Задавайте вопросы, мы ответим
Вы не зашли.
где взять или как настроить правильную кодировку для русского языка.
работаю на MySQL 5.0.27
из имеющихся в настройках пробовал UTF8 и некоторые другие (в частности latin1 по умолчанию), но при этом неправильно выводится русский шрифт в браузере. рекомендуют использовать cp1251, но с ним командная строка при запуске выдает ошибку о том что cp1251 не прописано в файле Index.xml.
может можно его как нибудь отредактировать и прописать то что нужно или файл Index.xml скачать где нибудь.
спасибо.
кстати, в той же директории имеется файл cp1251. может его можно по умолчанию поставить?
Неактивен
Правильность кодировки определяется только Вами. Для русского языка традиционно
применялись 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
Неактивен
спасибо за поддержку, но чтото все равно не то получается.
пытаюсь смоделировать регистрационную форму на 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)
Неактивен
попробовал сменить кодировку исходника PHP файла на UTF (было ANSI).
последняя ошибка пропала.
но в базу вместо рускоязычных символов попадают только знаки вопроса.
для таблицы в SQL по умолчанию стоит все также DEFAULT CHARSET utf8;
Неактивен
SET NAMES нужно сделать до добавления данных в таблицу.
Для того, чтобы не происходило ошибки с заголовками, Вам нужно
или включить кэширование документа в php.ini, или поставить команду
header() первой командой, до любого вывода документа (т.е. нельзя
допустить даже пробела до <?php
Неактивен
сделал. правда вместо header ввел аналогичный HTML мета тег в заголовке. но работает вроде бы без ошибок.
SET NAMES тоже применил.
вопросы пропали. вместо них появляются иероглифы.
причем вот что заметил. отправляю из формы в базу.
в базе иероглифы.
вывожу данные из базы с помощью соответствующего PHP кода.
возвращает нормальным русским языком.
похоже на то как mysql и PHP по разному интерпретируют одну и ту же кодировку UTF.
возможно ли прописать в php.ini другой путь для кодировок (к кодировкам mysql) и если да то как?
Неактивен
SET NAMES нужно делать в ту кодировку, в которой Вы хотите получить результат.
Т.е. если остальная страница в cp1251, Вам нужно выдавать результаты в cp1251.
Иероглифов в базе нет, там те же буквы, просто Вы их выводите на консоль в
не правильной кодировке. Ситуация та же, что с PHP и web-страницей.
Консоль в windows, насколько я помню, работает в cp866 вообще. Могу ошибаться.
На ней русский язык вывести вообще достаточно проблематично.
Неактивен
Для того, чтобы разобраться, попробуйте сделать следующее:
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.
Неактивен
все как и раньше. браузер выводит
Данные: слово
а в базе иероглифы.
это при том что я изменил исходный код. вместо 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
Данные: слово
Неактивен
В базе не иероглифы. В базе как раз это слово. Просто с консолью у Вас
та же проблема, что и с PHP. Слово "слово" хранится в базе в utf8. Кодировка
выдачи у Вас не совпадает с кодировкой консоли - только и всего.
Warning появляется из-за того, что у Вас есть что-то (например, пробел или
перенос строки, или еще какие-то символы) до "<?php".
Я советую Вам воспользоваться какой-то другой консолью, если Вы не можете
работать с этой. Можете попробовать использовать MySQL GUI tools, они очень
хорошо работают с кодировками, и Вы не будете считать, что в базе иероглифы.
Неактивен
проблема исчерпана. еще раз спасибо за поддержку
Неактивен
deluxe написал:
то есть получается, что в консоли я вообще не смогу промотреть базу в правильном формате?
У меня замечательно работает консоль в utf8. Но у меня консоль поддерживает utf8.
Чтобы вывести текст в консоли, попробуйте поиграть с ее SET NAMES. Раз уж у Вас есть
слово "слово" в базе - можете попробовать комбинации
SET NAMES cp866; SELECT * FROM testenc;
с разными кодировками, пока не найдете кодировку Вашей консоли. GUI tools для windows,
думаю, все-таки лучше.
Неактивен
ok попробую.
а у вас какая операционка "стакой работающей консолью"? мак?
Отредактированно deluxe (10.07.2007 18:52:32)
Неактивен
Нет, linux. Мак - это не мое. Красиво, но не очень удобно.
Неактивен
Дайте мне плиз настроенный файл my.ini!
Неактивен
Настроенный для чего? Меня вполне для локальной машинки устраивает вот такой файл:
[mysqld] user=mysql
Но, возможно, Вы хотите от системы что-то еще...
Неактивен
У меня вместо букв вопросы!
Неактивен
Значит, Ваш клиент работает в кодировке, в которой неправильно отображаются
символы. Скорее всего, он работает в latin1.
Наберите команду SET NAMES cp1251 после подключения, чтобы сервер отдавал
Вам данные в cp1251.
Неактивен
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). Запрос не возвращает ошибки.
Но это не помогло. Данные в браузер извлекаются в неправильном виде. Как исправить?
Неактивен
Возможно, в базе данные уже хранятся в некорректном виде. см. стать. http://sqlinfo.ru/articles/info/5.html
Неактивен
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.
Неактивен
CREATE TABLE .... DEFAULT CHARACTER SET utf8;
Неактивен
Всё равно не помогло, даже если таблица создаётся в кодировке koi8r.
Не подскажите как изменить установки MYSQL, заданные по умолчанию, в частности установка кодировки? У себя на компьютере не могу найти никакой конфигурационный файл!
Неактивен
Файл называется либо my.ini либо my.cnf
Лежать может либо в каталоге, куда ставили mysql
либо в каталоге windows
Контекстный поиск в TotalCommander рулит - ищем my.* и по всем дискам
Неактивен