- 0
Как правильно работать с utf8 в mysql?
Читаю данные из файлов в базу mysql. Исходная кодировка файлов = cp866. При чтении из файлов в базу каждая строка перекодируется в utf8 функцией iconv. Для проверки после считывания делаю к базе запросы через php и результаты вывожу в броузер (select ... from ... where ...). Если после where указывать непосредственно внешний ключ - все в порядке, запрос возвращает правильные данные (вывожу в браузер, проверяю - русские буквы выводятся).
НО если в where указать русский текст - запрос не возвращает НИЧЕГО (
После того, как поменял servercharacterset на utf8, стало еще хуже.
mysql> \s
mysql Ver 14.12 Distrib 5.0.75, for debian-linux-gnu (i486) using readline 5.2
Connection id: 49
Current database: mydb
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.0.75-0ubuntu10.2 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 3 hours 7 min 32 sec
В базу вообще перестали записываться русские слова (
Кто-нибудь сталкивался с подобной проблемой?
1 ответ:
-
- 0
Проблема вызвана тем, что неправильно указана кодировка для отправляемых запросов. Для явного указания кодировки нужно задать переменную
SET character_set_client = 'cp866';, тогда сервер сам сделает необходимые преобразования. Подробнее о работе с кодировками рекомендую почитать мануал.Чтобы узнать подробные настройки подключения можно выполнить команду:
mysql> show variables like 'character_set_%'; +--------------------------+---------------------------------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------------------------------+ | character_set_client | cp1251 | | character_set_connection | cp1251 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | cp1251 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.1\share\charsets\ | +--------------------------+---------------------------------------------------------+ 8 rows in set (0.00 sec)