Ответ 1
Короткий ответ
Запустите клиент с параметром --default-character-set=utf8
:
mysql --default-character-set=utf8
Вы можете установить это как значение по умолчанию в файле /etc/mysql/my.cnf
.
[mysql]
default-character-set=utf8
Короткий ответ не сработал, читайте ниже
Приведенная выше команда utf8
устанавливает переменные конфигурации character_set_client
, character_set_connection
и character_set_results
в utf8
.
Чтобы проверить значения для всех переменных конфигурации, связанных с набором символов, вы можете запустить:
show variables like '%char%';
База данных character_set_database
предоставляет вам набор символов текущей базы данных (схемы), в которой вы находитесь. Схема и таблицы создаются по умолчанию с набором символов, заданным в character_set_server
, если это не указано явно в операторе CREATE
.
character_set_server
можно изменить в файле my.cnf
:
[mysqld]
character-set-server = utf8
Кроме того, таблицы и столбцы могут иметь собственную кодировку, которая может отличаться от их родительской таблицы или схемы. Чтобы конкретно проверить значения каждой таблицы и столбца в базе данных, просмотрите следующий ответ: Как узнать, какой набор символов используется в базе данных/таблице/столбце MySQL?
Если вы хотите изменить набор символов существующих таблиц и столбцов, см. Ответ: Как преобразовать весь набор символов и параметры сортировки базы данных MySQL в UTF-8?
Больше информации о наборах символов соединения в документации mysql.
Все настроено на utf8, но я все еще вижу странные символы
Даже если для всех переменных charsets, таблиц и столбцов задано значение utf8
, могут быть случаи, когда на экране появляются странные символы. Например, кто-то мог написать символы Unicode в столбце utf8
через клиента с подключением latin1
(например, запустив mysql --default-character-set=utf8
). В этом случае вам необходимо подключиться к базе данных с той же кодировкой, в которой были записаны значения. Вы также можете получить и переписать их с помощью правильной кодировки.
ПРИМЕЧАНИЕ. Как отмечается в комментариях, кодировка myslq utf8
не является истинной и полной реализацией UTF-8. Если требуется полная реализация UTF-8, можно использовать кодировку utf8mb4
:
mysql --default-character-set=utf8mb4
Больше информации здесь: В чем разница между кодировками utf8mb4 и utf8 в MySQL?