СтатьиПеренос базы из mysql ранних версий в mysql-4.1 без проблем с кодировкойАвтор: nmind . konstantin kalachev / http://tutorial.ru
При обновлении базы
Решение - говорить
Предположим, что у нас есть sql-дамп таблицы SET collation_connection = cp1251_general_ci; SET collation_database = cp1251_general_ci; SET collation_server = cp1251_general_ci; SET character_set_client = cp1251; SET character_set_connection = cp1251; SET character_set_database = cp1251; SET character_set_results = cp1251; SET character_set_server = cp1251; DROP TABLE IF EXISTS `my_win1251_table`; CREATE TABLE `my_win1251_table` ( `content` varchar(100) NOT NULL default '' ) TYPE=MyISAM; INSERT INTO `my_win1251_table` VALUES ('Текст на русском из базы mysql-4.0.15a'); Теперь заливаем дамп в базу mysql-4.1 mysql -usomeuser -psomepasswd somedb < dump.sql Если теперь посмотреть на дамп из базы mysql-4.1 то он будет выглядеть вот так: DROP TABLE IF EXISTS `my_win1251_table`; CREATE TABLE `my_win1251_table` ( `content` varchar(100) NOT NULL default '' ) ENGINE=MyISAM DEFAULT CHARSET=cp1251; LOCK TABLES `my_win1251_table` WRITE; INSERT INTO `my_win1251_table` VALUES ('Текст РЅР° СЂСѓСЃСЃРєРѕРј РёР· базы mysql-4.0.15a'); UNLOCK TABLES;
Обратите внимание, что в
Так же стоит обратить внимание на текст нового дампа
Для того, чтобы добиться не только правильного ввода данных, но и вывода нужно сказать mysql базе о том, что мы хотим получить от нее данные в кодировке mysql -usomeuser -psomepasswd somedb mysql> SET NAMES cp1251; mysql> SELECT * FROM my_win1251_table; +----------------------------------------+ | content | +----------------------------------------+ | Текст на русском из базы mysql-4.0.15a | +----------------------------------------+ 1 row in set (0.00 sec) Глобальные способы решения проблемы
Пример, приведеный выше доступен всем, у кого есть доступ к
Для этого в файле [client] default-character-set = cp1251 [mysqld] default-character-set = cp1251 init-connect = 'SET NAMES cp1251'
Причем, у меня все заработало правильно и без указания
Так же можно скомпилировать Переменные mysql-4.1 и странное поведение команды "SET NAMES cp1251;" и "SET CHARACTER SET cp1251;"Если у вас все получилось и больше ничего не нужно от базы эту часть читать не обязательно.
В интернете громадное количество информации по этой проблеме, но почти каждый ответ заключается в совете задавать команды mysql> SET NAMES cp1251; Query OK, 0 rows affected (0.00 sec) mysql> SET CHARACTER SET cp1251; Query OK, 0 rows affected (0.00 sec) mysql> SHOW VARIABLES LIKE 'character_set%'; +--------------------------+----------------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------------+ | character_set_client | cp1251 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_results | cp1251 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql/share/mysql/charsets/ | +--------------------------+----------------------------------------+ 7 rows in set (0.00 sec) mysql> SHOW VARIABLES LIKE 'collation%'; +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | latin1_swedish_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+ 3 rows in set (0.01 sec)
В документации написано, что А вот пример ручной замены всех возможных переменных: mysql> SHOW VARIABLES LIKE 'character_set%'; +--------------------------+----------------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql/share/mysql/charsets/ | +--------------------------+----------------------------------------+ 7 rows in set (0.00 sec) mysql> SHOW VARIABLES LIKE 'collation%'; +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | latin1_swedish_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+ 3 rows in set (0.00 sec) mysql> SET collation_connection = cp1251_general_ci; Query OK, 0 rows affected (0.00 sec) mysql> SET collation_database = cp1251_general_ci; Query OK, 0 rows affected (0.00 sec) mysql> SET collation_server = cp1251_general_ci; Query OK, 0 rows affected (0.00 sec) mysql> SET character_set_client = cp1251; Query OK, 0 rows affected (0.00 sec) mysql> SET character_set_connection = cp1251; Query OK, 0 rows affected (0.00 sec) mysql> SET character_set_database = cp1251; Query OK, 0 rows affected (0.00 sec) mysql> SET character_set_results = cp1251; Query OK, 0 rows affected (0.00 sec) mysql> SET character_set_server = cp1251; Query OK, 0 rows affected (0.00 sec) mysql> SHOW VARIABLES LIKE 'character_set%'; +--------------------------+----------------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------------+ | character_set_client | cp1251 | | character_set_connection | cp1251 | | character_set_database | cp1251 | | character_set_results | cp1251 | | character_set_server | cp1251 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql/share/mysql/charsets/ | +--------------------------+----------------------------------------+ 7 rows in set (0.00 sec) mysql> SHOW VARIABLES LIKE 'collation%'; +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | cp1251_general_ci | | collation_database | cp1251_general_ci | | collation_server | cp1251_general_ci | +----------------------+-------------------+ 3 rows in set (0.00 sec) |
||