SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 08.07.2007 16:49:24

deluxe
Участник
Зарегистрирован: 08.07.2007
Сообщений: 8

выбор кодировки

где взять или как настроить правильную кодировку для русского языка.
работаю на MySQL 5.0.27
из имеющихся в настройках пробовал UTF8 и некоторые другие (в частности latin1 по умолчанию), но при этом  неправильно выводится русский  шрифт в браузере. рекомендуют использовать cp1251, но с ним командная строка при запуске выдает ошибку о том что cp1251 не прописано в файле Index.xml.
может можно его как нибудь отредактировать и прописать то что нужно или файл Index.xml скачать где нибудь.
спасибо.

кстати, в той же директории имеется файл cp1251. может его можно по умолчанию поставить?

Неактивен

 

#2 08.07.2007 17:41:16

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: выбор кодировки

Правильность кодировки определяется только Вами. Для русского языка традиционно
применялись koi8r и cp1251. В настоящее время (в связи с глобализацией проектов)
отдают предпочтение unicode-кодировкам. Например, этот сайт использует utf8.

Latin1 для русского языка не очень хорошая кодировка, потому что она изначально
семибитная и Вы столкнетесь с проблемами преобразования кодировок рано или поздно.

Для того, чтобы браузер правильно отображал символы в какой-то кодировке, он должен
знать, в какой кодировке эти символы находятся. Для этого используют обычно параметр
HTTP-ответа Content-type. В PHP, например, его можно установить командой

Код:

header ("Content-type: text/html; charset=utf8");

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

Код:

SET NAMES utf8;

Если Вы эту кодировку нигде не указываете, то сервер использует кодировку по-умолчанию.
Изменить ее можно, например, в файле my.cnf:

Код:

[mysqld]
default-character-set=utf8
[client]
default-character-set=utf8

По поводу ошибки: скорее всего, сервер ищет файлы в другом расположении. Проверьте
пути, которые записаны в журнале ошибок. Использовать встроенные кодировки в этом
отношении проще, потому что они не требуют дополнительных файлов.

Подробнее про кодировки можете почитать в статье: http://sqlinfo.ru/articles/info/2.html

Неактивен

 

#3 09.07.2007 23:37:36

deluxe
Участник
Зарегистрирован: 08.07.2007
Сообщений: 8

Re: выбор кодировки

спасибо за поддержку, но чтото все равно не то получается.

пытаюсь смоделировать регистрационную форму на php  и занести данные в базу.
ввожу дополнительную строку текст PHP  скрипта (12 строка):

header ("Content-type: text/html; charset=utf8");

выдает

Warning: Cannot modify header information - headers already sent by (output started at C:\Sites\home\localhost\www\register.php:10) in C:\Sites\home\localhost\www\register.php on line 12

в 10 строке <?php

в остальном код работает.

отправляю и принимаю данные через форму. проверял. работает.
после чего добавляю полученную через форму информацию в базу SQL (пытаюсь).

посылаю SQL-запрос в виде:

$result=mysql_query($sql, $conn) or die("Query failed: ".mysql_error ());

ошибка следующая:

Query failed: Data too long for column 'login' at row 1

появляется если вводится текст на русском языке. даже если ввести 1 символ.
у поля логин тип VARCHAR(20).  ключом не является.

в файле my.cnf все нормально прописано (правда у меня my.ini). вообще настраиваю mysql с помощью мастера конфигурации.

так же пробовал ставить кодировку для таблицы по умолчанию как указано в статье. (командой  DEFAULT CHARSET ).

кодировка UTF8 является доступной. впрочем как и cp1251

Отредактированно deluxe (09.07.2007 23:40:38)

Неактивен

 

#4 10.07.2007 00:11:17

deluxe
Участник
Зарегистрирован: 08.07.2007
Сообщений: 8

Re: выбор кодировки

попробовал сменить кодировку исходника PHP файла на UTF (было ANSI).
последняя ошибка пропала.

но в базу вместо рускоязычных символов попадают только знаки вопроса.
для таблицы в SQL по умолчанию стоит все также DEFAULT CHARSET utf8;

Неактивен

 

#5 10.07.2007 00:30:33

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: выбор кодировки

SET NAMES нужно сделать до добавления данных в таблицу.

Для того, чтобы не происходило ошибки с заголовками, Вам нужно
или включить кэширование документа в php.ini, или поставить команду
header() первой командой, до любого вывода документа (т.е. нельзя
допустить даже пробела до <?php

Неактивен

 

#6 10.07.2007 16:31:09

deluxe
Участник
Зарегистрирован: 08.07.2007
Сообщений: 8

Re: выбор кодировки

сделал. правда вместо header ввел аналогичный HTML мета тег в заголовке. но работает вроде бы без ошибок.

SET NAMES тоже применил.

вопросы пропали. вместо них появляются иероглифы.

причем вот что заметил. отправляю из формы в базу.
в базе иероглифы.
вывожу данные из базы с помощью соответствующего PHP кода.
возвращает нормальным русским языком.

похоже на то как mysql и PHP по разному интерпретируют одну и ту же кодировку UTF.
возможно ли прописать в php.ini другой путь для кодировок (к кодировкам mysql) и если да то как?

Неактивен

 

#7 10.07.2007 16:49:44

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: выбор кодировки

SET NAMES нужно делать в ту кодировку, в которой Вы хотите получить результат.
Т.е. если остальная страница в cp1251, Вам нужно выдавать результаты в cp1251.

Иероглифов в базе нет, там те же буквы, просто Вы их выводите на консоль в
не правильной кодировке. Ситуация та же, что с PHP и web-страницей.

Консоль в windows, насколько я помню, работает в cp866 вообще. Могу ошибаться.
На ней русский язык вывести вообще достаточно проблематично.

Неактивен

 

#8 10.07.2007 17:15:27

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: выбор кодировки

Для того, чтобы разобраться, попробуйте сделать следующее:
1. в MySQL:

Код:

CREATE TABLE testenc (a VARCHAR(10)) CHARSET=utf8;

2. в PHP:

Код:

<?php

header ("Content-type: text/plain; charset=utf8");

mysql_connect();
mysql_query ("SET NAMES utf8");
mysql_query ("INSERT INTO testenc VALUES ('слово')");
$q = mysql_query ("SELECT * FROM testenc");
$d = mysql_fetch_assoc($q);
mysql_close();

print ("Данные: ". $d['a'] . "\n");
?>

3. Откройте этот документ в браузере

Учтите, что SET NAMES и header() в данном случае должны совпадать с кодировкой, в
которой Вы сохраните документ PHP.

Неактивен

 

#9 10.07.2007 17:46:39

deluxe
Участник
Зарегистрирован: 08.07.2007
Сообщений: 8

Re: выбор кодировки

все как и раньше. браузер выводит

Данные: слово

а в базе иероглифы.

это при том что я изменил исходный код. вместо header

<meta http-equiv="Content-Type" content="text/plain; charset=utf8">

если в исходном коде оставляю header то получаем:

Warning: Cannot modify header information - headers already sent by (output started at C:\Sites\home\localhost\www\testenc.php:1) in C:\Sites\home\localhost\www\testenc.php on line 2
Данные: слово

Неактивен

 

#10 10.07.2007 18:19:31

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: выбор кодировки

В базе не иероглифы. В базе как раз это слово. Просто с консолью у Вас
та же проблема, что и с PHP. Слово "слово" хранится в базе в utf8. Кодировка
выдачи у Вас не совпадает с кодировкой консоли - только и всего.

Warning появляется из-за того, что у Вас есть что-то (например, пробел или
перенос строки, или еще какие-то символы) до "<?php".

Я советую Вам воспользоваться какой-то другой консолью, если Вы не можете
работать с этой. Можете попробовать использовать MySQL GUI tools, они очень
хорошо работают с кодировками, и Вы не будете считать, что в базе иероглифы.

Неактивен

 

#11 10.07.2007 18:22:22

deluxe
Участник
Зарегистрирован: 08.07.2007
Сообщений: 8

Re: выбор кодировки

проблема исчерпана. еще раз спасибо за поддержку

Неактивен

 

#12 10.07.2007 18:24:06

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: выбор кодировки

deluxe написал:

то есть получается, что в консоли я вообще не смогу промотреть базу в правильном формате?

У меня замечательно работает консоль в utf8. Но у меня консоль поддерживает utf8.
Чтобы вывести текст в консоли, попробуйте поиграть с ее SET NAMES. Раз уж у Вас есть
слово "слово" в базе - можете попробовать комбинации

Код:

SET NAMES cp866;
SELECT * FROM testenc;

с разными кодировками, пока не найдете кодировку Вашей консоли. GUI tools для windows,
думаю, все-таки лучше.

Неактивен

 

#13 10.07.2007 18:46:06

deluxe
Участник
Зарегистрирован: 08.07.2007
Сообщений: 8

Re: выбор кодировки

ok попробую.

а у вас какая операционка "стакой работающей консолью"? мак?

Отредактированно deluxe (10.07.2007 18:52:32)

Неактивен

 

#14 10.07.2007 19:04:47

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: выбор кодировки

Нет, linux. Мак - это не мое. Красиво, но не очень удобно.

Неактивен

 

#15 10.07.2007 19:10:38

deluxe
Участник
Зарегистрирован: 08.07.2007
Сообщений: 8

Re: выбор кодировки

ясн

Неактивен

 

#16 25.01.2008 19:23:05

vvsh
Завсегдатай
Зарегистрирован: 12.01.2008
Сообщений: 50

Re: выбор кодировки

Дайте  мне плиз настроенный файл my.ini!

Неактивен

 

#17 25.01.2008 21:56:08

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: выбор кодировки

Настроенный для чего? Меня вполне для локальной машинки устраивает вот такой файл:

Код:

[mysqld]
user=mysql

Но, возможно, Вы хотите от системы что-то еще...

Неактивен

 

#18 26.01.2008 16:27:41

vvsh
Завсегдатай
Зарегистрирован: 12.01.2008
Сообщений: 50

Re: выбор кодировки

У меня вместо букв вопросы!

Неактивен

 

#19 26.01.2008 19:45:57

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: выбор кодировки

Значит, Ваш клиент работает в кодировке, в которой неправильно отображаются
символы. Скорее всего, он работает в latin1.

Наберите команду SET NAMES cp1251 после подключения, чтобы сервер отдавал
Вам данные в cp1251.

Неактивен

 

#20 13.07.2008 13:43:47

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Re: выбор кодировки

paulus написал:

Значит, Ваш клиент работает в кодировке, в которой неправильно отображаются
символы. Скорее всего, он работает в latin1.

Наберите команду SET NAMES cp1251 после подключения, чтобы сервер отдавал
Вам данные в cp1251.

Хотел бы снова поднять тему с кодировкой.  Внимательно прочитал тему, но всё равно ничего сделать не смог.
У меня таблицы в кодировке cp1251. Работаю на WindowsXP. При использовании PHP и выводе информации в браузер у меня выводятся примерно такие символы:

ќв® ®Ўкпў«Ґ­ЁҐ ь7 ў ўв® Ё ва ­бЇ®ав

Что я пробовал делать:
1) Задавал заголовок в PHP header ("Content-type: text/html; charset=cp1251");
2) Задавал такой запрос из PHP: mysql_query("set names cp1251", $connect). Запрос не возвращает ошибки.

Но это не помогло. Данные в браузер извлекаются в неправильном виде. Как исправить?

Неактивен

 

#21 13.07.2008 23:16:41

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: выбор кодировки

Возможно, в базе данные уже хранятся в некорректном виде. см. стать. http://sqlinfo.ru/articles/info/5.html

Неактивен

 

#22 14.07.2008 19:22:24

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Re: выбор кодировки

rgbeast написал:

Возможно, в базе данные уже хранятся в некорректном виде. см. стать. http://sqlinfo.ru/articles/info/5.html

При работе с монитором MYSQL всё читается нормально. Прочитал статью. У меня MYSQL 5.0.45. Пытался как в статье написано решить проблему методом сервера, но команда

ALTER TABLE mytable MODIFY text BINARY(10);

превратила весь текст в NULL (это значение по умолчанию поставил я. Может это не самая удачная идея ставить значение по умолчанию NULL для текста?)

Следующие команды также не помогли:

SET NAMES koi8r;

SET character_set_server=koi8r;

Не подскажите, как задать свою кодировку таблицы при её создании? У меня по умолчанию кодировка устанавливается как cp1251.

Неактивен

 

#23 14.07.2008 19:55:47

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: выбор кодировки

CREATE TABLE .... DEFAULT CHARACTER SET utf8;

Неактивен

 

#24 14.07.2008 23:18:51

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Re: выбор кодировки

Всё равно не помогло, даже если таблица создаётся в кодировке koi8r.
Не подскажите как изменить установки MYSQL, заданные по умолчанию, в частности установка кодировки? У себя на компьютере не могу найти никакой конфигурационный файл!

Неактивен

 

#25 14.07.2008 23:37:08

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: выбор кодировки

Файл называется либо my.ini либо my.cnf
Лежать может либо в каталоге, куда ставили mysql
либо в каталоге windows

Контекстный поиск в TotalCommander рулит - ищем my.* и по всем дискам

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson