1

Тема: проблема с кодировкой

Здраствуйте, возникла проблема с кодировкой.

MySQL
Сервер: localhost via TCP/IP
Версия сервера: 5.0.77-community-nt
Версия протокола: 10
Пользователь: root@localhost
MySQL-кодировка: UTF-8 Unicode (utf8)

Веб-сервер
Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4
Версия MySQL-клиента: 5.0.45
PHP расширение: mysql
phpMyAdmin
Информация о версии: 3.1.3
Документация
Вики
Официальная страница phpMyAdmin
[ChangeLog] [Subversion] [Lists]

Читал ранние темы по этому поводу, поэтому сразу перехожу к сути:
1) 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 D:\Program Files\MySQL\MySQL Server 5.0\share\char...

2) Можете, пожалуйста, дать поэтапное решение проблемы.
Если нужно делать дамп - объясните как его делать. и что с ним потом делать.
Кодировка  нужна utf-8 везде.

3)mysql_query('SET NAMES utf8'); помогает, но значения остаются latin1. Как навсегда исправить этот баг?

2

Re: проблема с кодировкой

Eretic
Если вам надо установить кодировку соединения с MySQL в utf8 глобально, то добавьте в my.ini, раздел [mysqld] строку:
init-connect="SET NAMES utf8"
Также поправьте эту строку:
default-character-set=utf8

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

3 (изменено: Eretic, 2009-03-17 21:07:19)

Re: проблема с кодировкой

Hanut сказал:

Eretic
Если вам надо установить кодировку соединения с MySQL в utf8 глобально, то добавьте в my.ini, раздел [mysqld] строку:
init-connect="SET NAMES utf8"
Также поправьте эту строку:
default-character-set=utf8

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

my.ini = my.cnf, верно? ;-)
Так вот, нашел в my.cnf раздел  [mysqld] там добавил строку init-connect="SET NAMES utf8" . default-character-set=utf8 уже была мною исправлена.
К сожалению результата это не дало.
Конечно, проблема далеко не так критична.
Но с другой стороны, лучше один раз установить "заплатку" чем сто раз давать команду "заплатка"(mysql_query('SET NAMES utf8')).
Вобщем, вопрос остается открытым.

P.S.: про то что под root нельзя - не знал. почему то в из учебника в примерах - всё под root.

4

Re: проблема с кодировкой

Eretic сказал:

my.ini = my.cnf, верно?

Обычно на Windows конфигурационный файл MySQL - my.ini; на Unix - my.cnf. Но если это какой-то веб комплекс, тогда может быть my.cnf и на Windows.

Eretic сказал:

К сожалению результата это не дало.

Что выводит SHOW GLOBAL VARIABLES LIKE 'char%'; ?
latin1 должно смениться на utf8.
Сервис MySQL после редакции конфигурационного файла следует перезапустить.

На пользователя root не действует запрос установки кодировки соединения вида SET NAMES.

Кстати, если скрипт предполагается переносить на удаленный сервер, на котором может быть иная кодировка соединения с MySQL, чем на локальном сервере, mysql_query('SET NAMES utf8') лучше все же использовать. К тому же функция соединения с MySQL обычно пишется один раз и используется с помощью включения (include).

5

Re: проблема с кодировкой

Hanut сказал:

Что выводит 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 D:\Program Files\MySQL\MySQL Server 5.0\share\char.

Сообщение добавлено Tue Mar 17 23:37:46 2009
На первой страничке отображается пользователь: root@localhost - как сменить?

Сообщение добавлено Tue Mar 17 23:39:48 2009

Eretic сказал:

Но если это какой-то веб комплекс

Это Денвер 3. Забыл упомянуть.

6

Re: проблема с кодировкой

Eretic
У вас отдельно стоящий сервер MySQL? Вы уверены, что правильный конфигурационный файл правите?
Запустите phpMyAdmin, перейдите на страницу "Переменные" и посмотрите путь директивы basedir, там должен быть конфигурационный файл MySQL.

7

Re: проблема с кодировкой

Вот теперь нашел my.ini
Правил там всё как вы сказали.
Опять на запрос везде latin1.
И если убрать строчку mysql_query('SET NAMES utf8'); - знаки вопроса.
Далее зашел D:\Program Files\MySQL\MySQL Server 5.0\share\charsets
там xml файлы кодировок, если правильно понял. среди них utf8 нету.
А если открыть любой файл там вверху строка <?xml version='1.0' encoding="utf-8"?>
Может быть, что из за отсутствие файла utf8 глобальное значение кодировки MySQL впихивает latin?

8

Re: проблема с кодировкой

Eretic
Вы пеерзагрузили сервис MySQL после изменения в my.ini?
В каталоге charsets utf8 нет.

9 (изменено: Eretic, 2009-03-19 13:32:39)

Re: проблема с кодировкой

теперь всё в utf8 отображается в phpmyadmin на запрос SHOW GLOBAL VARIABLES LIKE 'char%';.
правда, даже если создать новую таблицу,  если не прописать SET NAMES=utf8 в отдельном файле - всё в знаках вопроса.

10

Re: проблема с кодировкой

Eretic сказал:

правда, даже если создать новую таблицу,  если не прописать SET NAMES=utf8 в отдельном файле - всё в знаках вопроса.

Не смог понять. Где и как создать таблицу? Где прописать SET NAMES?

11

Re: проблема с кодировкой

Не смог понять. Где и как создать таблицу? Где прописать SET NAMES?

В отдельном файле. Не в файлах настройки My SQL, где уже внесены исправления.

12

Re: проблема с кодировкой

Eretic
Странно. Покажите ваш my.ini.
Вы не под root, надеюсь скрипты запускаете?

13 (изменено: Hanut, 2009-03-21 19:19:24)

Re: проблема с кодировкой

нет, не под root
вот пример:
<?php
$host="localhost";
$user="igor";
$pass="ljkmvty";
$database = "test_database";
$dp=mysql_connect($host, $user,$pass);
mysql_select_db($database, $dp);
mysql_query('SET NAMES utf8');
?>

А вот my.ini (не знаю как отправить файлом , поэтому как могу кидаю):

В my.ini ошибок не вижу. Должно работать и без прописывания кодировки соединения в скрипте.