LINUX.ORG.RU

починить кодировку в mysql базе cacti

 ,


0

1

Досталась в наследство cacti. Надо ее отсадить на сервак помощнее. Поставил новую версию, подкинул всю дребедень. Завелось, но какая-то хрень с кодировками. Два дня мучаюсь. Походу в базу (на внешнем серваке) с кодировкой latin1_swedish_ci писался текст в кодировке cp1251_general_ci. В итоге крякозяблы в подписи. Сайт Артемки помог определить кодировку. Как бы это грамотно починить и перейти на utf8? В инете уже кучу всего перепробовал...

★★★★★

Сделал дамп базы, затер сведения о кодировке. Подсунул базу на свой комп.

Настройки

mysql> show variables like "char%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| 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)

Текст на русском увидел когда делаю следующее

mysql> USE cacti;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SELECT CONVERT(CONVERT(name USING binary) USING cp1251) FROM graph_tree;
+-----------------------------------------------------------+
| CONVERT(CONVERT(name USING binary) USING cp1251)          |
+-----------------------------------------------------------+
| Отчеты по загрузке районов Reports                        |
| Не юникастовая сеть                                       |
| Провайдеры+Internet                                       |
| VPN                                                       |
+-----------------------------------------------------------+
9 rows in set (0.02 sec)

Делаю выгрузку в файл

SELECT CONVERT(CONVERT(name USING binary) USING cp1251) FROM graph_tree INTO OUTFILE 'graph_tree';
Gedit кажет нормально. Cat пишет фигню, потому что бинарник. Заливаю в базу

LOAD DATA INFILE 'graph_tree' REPLACE INTO TABLE graph_tree (name);

В итоге новые крякозяблы. В phpmyadmin менял кодировки для базы на cp1251 и utf8 - не помогло.

andrew667 ★★★★★
() автор топика

Делаешь дамп через mysqdump (load data не нужно). Редактируешь дамп, вписываешь в начало 'set names cp1251'. В структуре таблиц кодировка должна быть utf-8, если в дампе нету, создаешь базу как create database blabla character set utf-8. То есть должно быть

| character_set_connection | cp1251 |
| character_set_database | utf-8 |

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

character_set_database это кодировка, в какой данные будут хранится в БД на диске, ты говорил, что хочешь utf8. character_set_connection это, если не вдаваться в детали, кодировка, в которой поступают запросы, выставляется set names xxx на сеанс. Дамп у тебя будет в cp1251.

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

character_set_connection это, если не вдаваться в детали, кодировка, в которой поступают запросы,

У меня запросы поступают именно в utf8 (такая и локаль и на серваках и на десктопе). Изрядно помучился...в итоге конвертнул базу - там стали неправильные значения в таблицах и скормил ей текст, который получил запросами. Теперь везде utf8.

andrew667 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.