•  
  • 0
  •  
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

В базу вообще перестали записываться русские слова (

Кто-нибудь сталкивался с подобной проблемой?

utf, mysql, php.
спросил 821 день назад Аватор пользователя miche11e miche11e
30 1
300

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)
    
    ответил 821 день назад Аватор пользователя HyperGeek HyperGeek
    50 4
Чтобы написать ответ, вы должны авторизироваться.