Краткий ответ
Запустите клиент с параметром --default-character-set=utf8
:
mysql --default-character-set=utf8
Вы можете установить его по умолчанию в файле /etc/mysql/my.cnf
.
[mysql]
default-character-set=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 docsumentation .
Все установлено на 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?