1

Тема: Неправильное отображение русских букв, UTF-8

Здравствуйте!
Работаю с utf8, все, кроме русских букв отображается нормально, русские же - ?”???????? ?? ???µ???µ?????µ
В скрипте:
mysql_connect($serv, $uname, $upass);
   mysql_query('set character utf8');         
   mysql_query('set names utf8');

[spoiler]Variable_name    Value
character_set_client    utf8
character_set_connection    utf8
character_set_database    utf8
character_set_filesystem    binary
character_set_results    utf8
character_set_server    utf8
character_set_system    utf8
character_sets_dir    \usr\local\mysql-5.1\share\charsets\[/spoiler]
Помогите пожалуйста

2

Re: Неправильное отображение русских букв, UTF-8

Demy
Такие крякозябы обычно появляются если кодировка соединения с MySQL стоит в latin1. Посмотрите глобальные настройки запросом:
[mono]SHOW GLOBAL VARIABLES LIKE 'char%';[/mono]

Посмотрите как в phpMyAdmin выглядит кириллица, нет ли там крякозябов.

ВКонтакте Facebook Twitter

3

Re: Неправильное отображение русских букв, UTF-8

Нет, в админе все в порядке, результат я уже писала выше (в спойлере):
Variable_name    Value
character_set_client    utf8
character_set_connection    utf8
character_set_database    utf8
character_set_filesystem    binary
character_set_results    utf8
character_set_server    utf8
character_set_system    utf8
character_sets_dir    \usr\local\mysql-5.1\share\charsets\

кракозябры приходят через запрос из php-скрипта (его настройки кодировки я тоже указывала - вроде, все верно...)

4

Re: Неправильное отображение русских букв, UTF-8

Demy
В таком случае с настройками MySQL у вас все в порядке, конечно если таблицы в БД тоже имеют кодировку utf8.

Попробуйте в корневой .htaccess сайта прописать строку:
[mono]PHP_VALUE default_charset utf-8[/mono]

ВКонтакте Facebook Twitter

5

Re: Неправильное отображение русских букв, UTF-8

Во! то, что надо! Спасибо огромное - помогло!

6

Re: Неправильное отображение русских букв, UTF-8

Здравствуйте. Вот такой вопросhttp://img689.imageshack.us/img689/3452/70190479.gif. Вытяжка из кода[spoiler]Variable_name     Value
character_set_client    cp1251
character_set_connection    cp1251
character_set_database    cp1251
character_set_filesystem    binary
character_set_results    cp1251
character_set_server    cp1251
character_set_system    utf8
character_sets_dir    C:\server\MySQL\share\charsets\[/spoiler]

Как изменить кодировку сервера?Проблема похоже в этом?

7

Re: Неправильное отображение русских букв, UTF-8

Упсс!Вопрос снят -может кому пригодится прога dbForge Studio for MySQL изменяет сравнение.Все ок.

8

Re: Неправильное отображение русских букв, UTF-8

Здравствуйте.Рано обрадовался. Все таки проблема появилась вновь...Пытаюсь поставить скрипт голосования на сайт .В самом скрипте русские буквы передаются в базу и там превращаются вот в такой вид
http://img52.imageshack.us/img52/9154/59874185.gif

.При повторном обращении к базе скрипт встречает эти изменения и выдает ошибку:[spoiler]Query Error
MySQL Error : Query Error
Error Number: 1366 Incorrect string value: '\xC3\xEE\xEB\xEE\xF1\xEE...' for column 'vote_button' at row 1
Date        : Sun, April 11, 2010 11:13:58
IP          : 127.0.0.1
Browser     : Opera/9.64 (Windows NT 6.1; U; ru) Presto/2.1.1
Referer     : http://localhost/holodim/poll/admin/admin_settings.php
PHP Version : 5.2.13
OS          : WINNT
Server      : Apache/2.2.15 (Win32) PHP/5.2.13
Server Name : localhost
Script Name : /holodim/poll/admin/admin_settings.php[/spoiler]

А вот так изображается русский текст с скрипте
http://img91.imageshack.us/img91/9127/97675803.gif
При этом настройки сервера:

[spoiler]Variable_name     Value
character_set_client    cp1251
character_set_connection    cp1251
character_set_database    cp1251
character_set_filesystem    binary
character_set_results    cp1251
character_set_server    cp1251
character_set_system    utf8
character_sets_dir    C:\server\MySQL\share\charsets\[/spoiler]



И что делать?

Отредактировано redfor (2010-04-11 11:56:11)

9

Re: Неправильное отображение русских букв, UTF-8

redfor
В какой кодировке страницы скрипта?
Какая кодировка и сравнения прописаны в таблицах БД?

ВКонтакте Facebook Twitter

10

Re: Неправильное отображение русских букв, UTF-8

таблицы создавал скрипт,
*кодировка страниц cp1251
*кодировка в таблицах cp1251 (прописана не везде), в полях id text не прописана
таблица poll_config
http://img88.imageshack.us/img88/6772/54238457.gif

обзор ее же:http://img687.imageshack.us/img687/6144/67799964.gif

Отредактировано redfor (2010-04-11 13:01:29)

11

Re: Неправильное отображение русских букв, UTF-8

redfor
cp1251_bin - это сравнение для полей с бинарными данными. Должно быть cp1251_general_ci.

Попробуйте пересоздать таблицы полностью удалив те, что есть сейчас. Обязательно проверьте, чтобы у базы данных было правильное сравнение, которое устанавливается на странице операций. Выберите БД, перейдите на вкладку "Операции", снизу поставьте сравнение cp1251_general_ci.

ВКонтакте Facebook Twitter

12

Re: Неправильное отображение русских букв, UTF-8

Спасибо,разобрался...
(первый раз в первый клас).

13

Re: Неправильное отображение русских букв, UTF-8

Я использую бд mysql, ASP.NET C#.
Сравнение кодировки для соединения с моей бд: cp1251_general_ci
Сравнение кодировки для таблицы: cp1251_general_ci
Сравнение для текстовых полей в таблице: cp1251_general_ci
После соединения с бд отправляю команду: SET NAMES cp1251;
Чтобы проверить как устанавливается кодировка в mysql я через phpmyadmin сделал запрос:

set names 'cp1251';
SHOW VARIABLES LIKE 'char%';

Variable_name     Value
character_set_client     cp1251
character_set_connection     cp1251
character_set_database     cp1251
character_set_filesystem     binary
character_set_results     cp1251
character_set_server     latin1
character_set_system     utf8
character_sets_dir     C:\Program Files\Parallels\Plesk\Databases\MySQL\s...

Из этого видно, что вроде бы кодировки устанавливаются верные, но на сайте почему-то кириллица отображается вот так: ??????????????
В phpmyadmin все данные отображаются верно, но на сайте почему-то неверно.

Подскажите пожалуйста, в чем же дело? Что я делаю не так? Может быть проблема в том, что latin1 стоит в настройках у character_set_database, character_set_server?

Отредактировано south_anal (2010-04-22 14:20:50)

14

Re: Неправильное отображение русских букв, UTF-8

Смотрите вывод глобальных настроек. Подозреваю, что там будет latin1.
[mono]SHOW GLOBAL VARIABLES LIKE 'char%';[/mono]

SET NAMES cp1251 вам поможет, но выполнять этот запрос надо в скрипте, сразу после функции соединения с MySQL.

ВКонтакте Facebook Twitter

15

Re: Неправильное отображение русских букв, UTF-8

После соединения я делаю в скрипте запрос SET NAMES cp1251, но не помогает.

В phpmyadmin сделал:
SET NAMES 'cp1251';
SHOW GLOBAL VARIABLES LIKE 'char%';

Результат:
character_set_client     latin1
character_set_connection     latin1
character_set_database     latin1
character_set_filesystem     binary
character_set_results     latin1
character_set_server     latin1
character_set_system     utf8
character_sets_dir     C:\Program Files\Parallels\Plesk\Databases\MySQL\s...

Почему везде latin1? Как поменять на cp1251?

Еще я заметил в phpmyadmin вот это:

http://imgur.com/Yx4Th.jpg

Это не страшно?

16

Re: Неправильное отображение русских букв, UTF-8

south_anal пишет:

После соединения я делаю в скрипте запрос SET NAMES cp1251, но не помогает.

Покажите как вы это делаете. Как я понимаю, вы пишите на C#, именно там надо установить кодировку соединения с MySQL сразу после функции соединения.

Эту строку не надо писать перед каждым SQL запросом.
SET NAMES 'cp1251';

south_anal пишет:

Почему везде latin1? Как поменять на cp1251?

latin1 - является изначальной кодировкой. Поменять ее глобально можно добавив в конфигурационный файл MySQL (my.ini), в раздел [mysqld] строку:
[mono]init-connect="SET NAMES cp1251"[/mono]

Только имейте в виду, что это глобальная настройка и теперь все скрипты в которых не прописана кодировка соединения с MySQL, будут использовать именно cp1251.

На картинке у вас кодировка баз данных. Это означает, что если создать базу данных не указав ее кодировку, то будет использоваться latin1_swedish_ci.

ВКонтакте Facebook Twitter

17

Re: Неправильное отображение русских букв, UTF-8

Я в коде делаю вот так:

        OdbcConnection conn = new OdbcConnection(connectionString);
        OdbcCommand comm = new OdbcCommand("SELECT * FROM news ORDER BY dateadded DESC", conn);
        OdbcCommand comm2 = new OdbcCommand("SET NAMES cp1251", conn);

        try
        {
        conn.Open();
            comm2.ExecuteNonQuery();
            OdbcDataAdapter da = new OdbcDataAdapter(comm);
            DataSet ds = new DataSet();
            da.Fill(ds);
            ListView1.DataSource = ds;
            ListView1.DataBind();
        }

Я пробовал менять запрос на "SET NAMES 'cp1251'", на "SET NAMES 'cp1251';" и на "SET NAMES cp1251;", но не помогает.
Елки-палки, этот путь всем помогает, а мне почему-то нет. Буду просить хостера поменять на init-connect="SET NAMES cp1251", может получится.

18

Re: Неправильное отображение русских букв, UTF-8

south_anal
Кажется с ODBC надо по другому. Найдите где формируется строка соединения connectionString и добавьте в нее параметр ;charset=cp1251
В этом случае SET NAMES уже будет не нужен.
Connector/ODBC Параметры соединения

ВКонтакте Facebook Twitter

19

Re: Неправильное отображение русских букв, UTF-8

я так и не могу решить эту проблему.
строку соединения сделал такую:
"Driver={MySQL ODBC 3.51 Driver};Server=localhost;charset=cp1251;Database=cpl0000000457_bon; User=xxxx;Password=555;Option=0;"

Но ошибка на сайте появляется, не может найти папку с кодировками:
System.Data.Odbc.OdbcException: ERROR [HY000] [MySQL][ODBC 3.51 Driver]Can't initialize character set cp1251 (path: C:mysql\sharecharsets) ERROR [HY000] [MySQL][ODBC 3.51 Driver]Can't initialize character set cp1251 (path: C:mysql\share\charsets) at System.Data.Odbc.OdbcConnection.HandleError

Проблема в том, что на хостинге стоит Plesk Panel, а там MySql установлен вот так: C:\Program Files\Parallels Plesk\Databases\MySQL\sharecharsets
пытался договориться с одними админа хостинга, чтобы просто сделать вот такой путь на сервере:
C:mysqlsharecharsets и закинуть туда все данные из C:Program FilesParallelsPleskDatabasesMySQLsharecharsets, но не хотят.

Попробовал еще один хостинг, проблемы с кодирокой все те же самые. Я не знаю, что делать. С UTF8 таже хрень. Как же мне надоело это все.

Отредактировано south_anal (2010-04-29 22:25:01)

20

Re: Неправильное отображение русских букв, UTF-8

south_anal
Я знаю только одно решение - правка конфигурационного файла MySQL (my.ini), что доступно только администратору сервера.

Необходимо отредактировать директиву character-sets-dir указав в ней путь к каталогу с файлами описаний кодировок. Причем прописать эту директиву надо, как в разделе [mysqld], так и в разделе [client].

Сожалею, что не могу ничем конкретным помочь. Но попробуйте поискать другие способы связи с MySQL: .NET connector, OleDB connector, может что-то еще есть. Должно быть решение.

ВКонтакте Facebook Twitter

21

Re: Неправильное отображение русских букв, UTF-8

Hanut
наконец решил проблему с кодировкой. сменил провайдера для MySQL на http://www.devart.com/dotconnect/mysql/download.html  и теперь все нормально. возможно причина в ODBC 3.51 драйвере, он довольно глючный, проблемы с кодировкой в этой версии встречались у людей в инете раньше, возможно 5 версия работает с юникодом лучше.
спасибо большое за Вашу помощь.

22

Re: Неправильное отображение русских букв, UTF-8

Здравствуйте.
Тоже столкнулся с проблемой кодировок и, как назло, при первом же моем знакомстве с денвером php и mysql.
Установил везде где мог(и в phpmyadmin и в my.ini) кодировку cp1251 - все равно по запросу на страницу выводятся кракозябры.
Затем случилось самое интересно - нажал на главной странице phpmyadmin вкладочку

23

Re: Неправильное отображение русских букв, UTF-8

an0maly пишет:

Установил везде где мог(и в phpmyadmin и в my.ini) кодировку cp1251 - все равно по запросу на страницу выводятся кракозябры.

Денвер вроде настроен для windows-1251, насколько я помню, и настраивать его не надо.

Не подключайте скрипты под root, создайте отдельного пользователя без привилегий администрирования.

ВКонтакте Facebook Twitter

24

Re: Неправильное отображение русских букв, UTF-8

Hanut пишет:
an0maly пишет:

Установил везде где мог(и в phpmyadmin и в my.ini) кодировку cp1251 - все равно по запросу на страницу выводятся кракозябры.

Денвер вроде настроен для windows-1251, насколько я помню, и настраивать его не надо.

Не подключайте скрипты под root, создайте отдельного пользователя без привилегий администрирования.

Хорошо, я попробую, спасибо.

25

Re: Неправильное отображение русских букв, UTF-8

Подскажите пожалуйста как исправить кодировку:

сделал запрос SHOW GLOBAL VARIABLES LIKE 'char%'

Итог:

Variable_name Value
character_set_client — latin1
character_set_connection — latin1
character_set_database — latin1
character_set_filesystem — binary
character_set_results — latin1
character_set_server — latin1
character_set_system — utf8
character_sets_dir
/usr/share/mysql/charsets/

В таблицах латиница отображается не понятными сивмолами, как сделать чтобы все было в кодировке утф8 и все рускоязычные символы были понятны...