LINUX.ORG.RU
ФорумAdmin

mysql 4.1: данные в кодировке cp1251 в виде "??????"


0

0

Не хочется постоянно использовать SET NAME cp1251;

[mysqld]
default-character-set=cp1251

php-5.1
mysql-4.1.16

mysql> show variables like 'character%';
+--------------------------+----------------------------------------+
| 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/ |

Array
(
    [0] => Array
        (
            [itemId] => 1
            [name] => ?????? ???????
★★★★

http://dev.mysql.com/doc/refman/5.0/en/charset-cyrillic-sets.html
It's true about the results like "???????" . In versions of PHP >5.0.* and MySQL 4.1.14 , and if you try to get result in cyrillic , you will see just "????". There is sample solution : immediately after mysql_connect() , and mysql_select_db() add this lines :
mysql_query("SET NAMES CP1251");
Thats all ... ! Good luck ... !

ЕСТЬ другой способ?

----------------------------------------

Заставить My SQL <http://phpclub.ru/faq/wakka.php?wakka=MySql&v=1bgj>; автоматом выполнять этот запрос при каждом коннекте к нему.
Для этого нужно в файле my.cnf/my.ini (где их искать - в <http://dev.mysql.com/doc/mysql/en/index.html>&#228;&#238;&#234...; <http://dev.mysql.com/doc/mysql/en/index.html>;) в раздел [server] добавить следующую строку:
init-connect="SET NAMES кодировка"
Однако, следует заметить, что это НЕ будет работать, если пользователь, которым вы подключаетесь к базе имеет привилегию SUPER (а стандартный пользователь root к таким относится, так же как и все созданные через &#171;GRANT ALL PRIVILEGES ON *.* TO ...&#187;). Это сделано для того, чтобы в случае ошибки в этом запросе (а его можно изменить во время работы), хоть кто-то мог подключиться к базе и исправить его.

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

Try executing this code after establishing connection with mysql server:

mysql_query("SET NAMES 'ISO-8859-7'");
mysql_query("SET CHARACTER SET 'ISO-8859-7'");

This sgould help. I had similar problems with utf8 and php 5 (php 4 workes fine), and these two lines solved the problem.

Of course you should use functions from mysqli.
http://forums.mysql.com/read.php?52,47869,50972#msg-50972

Дело в PHP. Кто подтвердит?

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

>Не хочется постоянно использовать SET NAME cp1251;
Во первых, придётся :) А во-вторых, не "постоянно", а ОДИН РАЗ И НА ВСЁ ВРЕМЯ СОЕДИНЕНИЯ

>Дело в PHP. Кто подтвердит?
Враки.

>Тут человек интересуется, в скорости не проиграем, если использовать SET NAMES? :)
Я плакал :))) Твой человек видимо из тех кто по молодости лет ошибочно считает, что один запрос в десять JOINов, всегда быстрее десяти последовательных запросов к разным таблицам. Это клиника...

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