LINUX.ORG.RU
ФорумAdmin

В консоли MySQL не пишется кириллица, что делать?

 


0

2

В консоли MySQL не пишется кириллица, в ответе на запрос отображается, в терминале пишется и отображается нормально.

 locale
LANG=ru_RU.UTF-8
LANGUAGE=
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
***********************************************
в Mysql
SHOW VARIABLES LIKE 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

 SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.01 sec)

Пробовал вручную

SET NAMES 'utf8';
SET CHARACTER SET 'utf8';
SET SESSION collation_connection = 'utf8_general_ci';

в результате запроса отображается

ков С.           | 5      | 051051    | 2022-11-26 02:25:32 |         5 | NULL   | NULL  | NULL      | 08ПС    

но запрос написать не могу типа:

select * from tab where name like 'Иванов';

Ответ на: комментарий от adn
 TaskMat | CREATE TABLE `TaskMat` (
  `operator` varchar(50) DEFAULT NULL,
  `mashin` varchar(30) DEFAULT NULL,
  `use_plane` varchar(30) DEFAULT NULL,
  `wrdate` datetime DEFAULT NULL,
  `quntities` int(11) DEFAULT NULL,
  `length` varchar(30) DEFAULT NULL,
  `width` varchar(30) DEFAULT NULL,
  `thickness` varchar(30) DEFAULT NULL,
  `metal_grade` varchar(30) DEFAULT NULL,
  `dop` varchar(50) DEFAULT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=195 DEFAULT CHARSET=utf8
Busf
() автор топика
Ответ на: комментарий от Psilocybe

mysql.cnf

[client]
#default-character-set = utf8

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
init-connect="SET NAMES utf8"
skip-character-set-client-handshake

[mysql]
default-character-set = utf8

[mysqldump]
default-character-set = utf8




#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

my.cnf

[client]
#default-character-set = utf8

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
init-connect="SET NAMES utf8"
skip-character-set-client-handshake

[mysql]
default-character-set = utf8

[mysqldump]
default-character-set = utf8



#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
Busf
() автор топика
Последнее исправление: Busf (всего исправлений: 1)

А версия MySQL какая? Вообще, MySQL - довольно ущербная СУБД, по-моему. По крайней мере, с точки зрения поддержки фич и удобства работы.

В частности, в зависимости от версии MySQL, она может использовать ущербную кодировку utf8-mb3, которая не может представить все символы Юникода.

Короче, там какой-то п…ц с кодировками постоянно, помню, как это невероятно бесило, когда на работе плотно работал с MySQL. А главное - истоки появления «чудесных решений» типа utf8-mb3 похоронены где-то в истории, и никто не может ответить на вопрос, зачем надо было подбрасывать такие чудовищные грабли на дороге пользователей…

emorozov
()
Ответ на: комментарий от firkax

Консольный клиент - это тоже часть СУБД. И по ощущениям, они как написали его в 1995, так с тех пор и не трогали. Земля и небо по удобству, если сравнивать с таким же консольным psql.

emorozov
()
Ответ на: комментарий от Busf

Вот еще информация появилась, у меня есть такой же mysql, я пробовал писать кириллицу, он пишет, добавил в my.cnf

[client]
#default-character-set = utf8

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
init-connect="SET NAMES utf8"
skip-character-set-client-handshake

[mysql]
default-character-set = utf8

[mysqldump]
default-character-set = utf8

и он перестал писать кириллицу

Busf
() автор топика
Ответ на: комментарий от Psilocybe

Ужос, разоблачили тупого. А я то увидел, что клиент является частью исходного кода (можно проверить здесь https://github.com/mysql/mysql-server) и сделал настолько некорректные неподобающие выводы… Горе мне!

emorozov
()

dpkg-reconfigure locales

сгенерируй ru_RU.UTF8 и в качестве дефолтной локали выбери её (или любую другую с UTF8, не важно), после этого закрой ssh сессию и открой обратно.

(ну или перезапусти терминал)

annerleen ★★★★☆
()
Ответ на: комментарий от Busf

Это значит латинские буквы пишутся, а русские не пишутся

Проблема только в mysql клиенте, или вообще в консоли русские буквы не пишутся? Ты просто подключаешься по ssh, или юзаешь screen?

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

Пацаны вы первое сообщение читали? Там же есть это. В консоли и видно, и печатается. По ssh через putty.

На текущий момент выясняется, что при добавлении в my.cnf любой из строк:

[mysql]
default-character-set = utf8
или
[client]
default-character-set = utf8

Пропадают русские буквы.

Busf
() автор топика
Последнее исправление: Busf (всего исправлений: 1)
Ответ на: комментарий от Busf

Есть подозрение, что у тебя для консоли на сервере какая-то экзотическая кодировка, и когда ты форсишь utf8 для клиента мускула, все ломается. Когда все работает, попробуй выполнить запрос show variables like '%character%';

goingUp ★★★★★
()
Ответ на: комментарий от goingUp
mysql> show variables like '%character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

mysql> фываолдж
Busf
() автор топика
Ответ на: комментарий от Busf

my.cnf

[client]
#default-character-set = utf8

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
init-connect="SET NAMES utf8"
skip-character-set-client-handshake

[mysql]
#default-character-set = utf8

[mysqldump]
default-character-set = utf8



#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
Busf
() автор топика