Кратък отговор
Стартирайте клиента с опция --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 .
Всичко е настроено на utf8, но все още виждам странни знаци
Дори ако всички променливи, таблици и колони са зададени на utf8
, може да има случаи, когато виждате странни знаци на екрана си. Например, някой може да е написал Unicode символи в utf8
колона, чрез клиент с latin1
връзка (например чрез стартиране на mysql --default-character-set=latin1
). В този случай трябва да се свържете към базата данни със същия набор от знаци, както са били записани стойностите. Можете също да ги извлечете и пренапишете чрез правилното кодиране.
ЗАБЕЛЕЖКА :Както посочват коментарите, mysql utf8
кодирането не е истинска и пълна реализация на UTF-8. Ако е необходима пълна реализация на UTF-8, може да се използва utf8mb4
набор от знаци:
mysql --default-character-set=utf8mb4
Повече информация тук:Каква е разликата между utf8mb4 и utf8 набори знаци в MySQL?