Mysql прекодиране на база данни

Mysql поддържа много кодировки и често главоболие за системните администратори.

Най-често срещаният проблем - безсмислици вместо български букви. И това се случва, че сайтът ще изглежда нормално, но търсачката няма да произвеждат същото, ако не и нещо, което да се търси.
Това се дължи на факта, че в текста на сървъра в грешна кодировка, или текст се дава на клиента в грешна кодировка.

Настройки на MySQL, които отговарят за кодиране:
character_set_client - кодиране, в които данните ще бъдат получени от клиента
character_set_connection - кодировка по подразбиране за всички, които в рамките на връзката не е криптиране
character_set_database - кодировка по подразбиране за базата данни
character_set_filesystem - кодиране за файловата система
character_set_results - кодиране, в които ще бъдат избрани в резултат
character_set_server - кодиране, в които сървърът работи
character_set_system - кодиране, които са посочени MySQL идентификатори винаги UTF8
character_sets_dir - папка с кодировки

Техните стойности могат да се видят в такава заявка: Покажи променливи, като например "знак%;
MariaDB [(няма)]> Покажи променливи, като например "character_set%;
----------------------------------------------------+
variable_name Value
----------------------------------------------------+
character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem двоичен
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir / ЮЕсАр / акции / MySQL / набори от знаци /
----------------------------------------------------+

След като инсталирате MySQL сървър, характер по подразбиране, определена latin1 изложени.
Съответно, глобалните променливи, изброени по-горе, ще бъдат в latin1.
Базата по подразбиране, съответно, както и таблица, както добре.

Помислете за получаване един нормален кодиране utf8 в нашата база данни?
1. Уверете се изсере на база данни, като отбелязва, необходимо ние Encoding:
mysqldump --u потребителското -p --default-герой-комплект = latin1 --skip за серия набор от знаци DBNAME> самосвални latin1.sql

2. ще се преобразува в нашия файл самосвални latin1.sql желания кодиране UTF8
изброяване -f ISO-8859-1 -t UTF8 самосвални latin1.sql> зареже-utf8.sql
Присвояване на клавиши, както следва:
-е latin1 - конвертиране от latin1 кодиране (latin1 начин и изо-8859-1 е едно и също нещо)
-т UTF-8 - в UTF-8 кодиране
зареже-latin1.sql - файл, който ще бъде прехвърлен
самосвални utf8.sql - резултатите са записани във файла
Понякога има специални функции: при определена позиция изброяване може да издаде съобщение за грешка невалиден знак във входящия файл.
Този проблем се дължи на факта, че в основата има маса тип петно. И като следствие изброяване не може skonvertit данните и спира с грешка.
За това не се случи, на сметището трябва да се направи с помощта на параметъра индикация, която изнася база с петно ​​полета в двоичен формат.
mysqldump --u потребителското -p --default-характер настроени = latin1 --skip за серия набор от знаци --hex-петно ​​DBNAME> самосвални latin1.sql
След преобразуването се извършва без проблеми.

3. Допълнително, всички препратки към Latin1 кодиране замени копирания файл, за да utf8:
котка самосвални utf8.sql | СЕД е / CHARSET = latin1 / CHARSET = utf8 / г '> самосвални utf8-new.sql

4. След това извадете нашата база данни и да го пресъздаде с правилното кодиране:
MySQL --user = употреба -р --execute = "капка DATABASE databasename; CREATE DATABASE databasename набор от символи utf8 съпоставя utf8_general_ci;"

5. Попълнете новосъздадената база данни сметището
MySQL --user = корен -p --default-характер настроени = utf8 databasename

Глобалните променливи се инициализират към стойностите по подразбиране, когато стартирате сървъра MySQL, или да приеме ценностите, залегнали в my.cnf конфигурационния файл.
Така че сега да отидем, за да редактирате my.cnf файла и да го дам на изглежда така:
[Mysqld]
DataDir = / Var / ПЬ / MySQL
гнездо = ​​/ Var / ПЬ / MySQL / mysql.sock
символни връзки = 0
характер настроени-сървър = utf8
характер настроени-клиент = utf8
групиране-сървър = utf8_unicode_ci
първоначален свързване = 'SET означения utf8 "

[Mysqld_safe]
вход грешка = / Var / дневник / mariadb / mariadb.log
PID-файл = / Var / работи / mariadb / mariadb.pid

Ние се рестартира нашата база данни и проверка:
MariaDB [(няма)]> Покажи променливи, като например "character_set%;
+--------------------------+----------------------------+
| variable_name | Цена |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | двоичен |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | / ЮЕсАр / акции / MySQL / набори от знаци / |
+--------------------------+----------------------------+
8 реда в комплект (0.00 сек)