Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Кодировка
 
 автор: ck   (27.08.2006 в 15:47)   письмо автору
 
 

Проблема с кодировками. Все данные из MySQL приходят вопросами. Попытка занести новую запись с русским текстом приводит к ошибке вида

"Data too long for column 'test' at row 1".

phpMyAdmin неизменно использует при занесении в базу

convert(using utf-8)


Кроме того, по умолчанию создаются таблицы InnoDB, а не MyISAM. Версия MySQL - 5.0. При инсталляции указывал кодировку cp-1251, но phpMyAdmin показывает, что кодировка MySQL - UTF-8 Unicode. Проблема срочная. Большое спасибо ответившим.

   
 
 автор: cheops   (27.08.2006 в 16:25)   письмо автору
 
   для: ck   (27.08.2006 в 15:47)
 

> phpMyAdmin показывает, что кодировка MySQL - UTF-8 Unicode
Это не так - phpMyAdmin показывает в какой кодировке работает он сам.

1) Сообщите кодировку и сортировку ваших таблиц - её можно видеть в phpMyAdmin в списке таблиц базы данных.
2) Каково содержимое конфигурационного файла my.ini, лежащего в корне диска C.

   
 
 автор: ck   (27.08.2006 в 21:01)   письмо автору
 
   для: cheops   (27.08.2006 в 16:25)
 

>Это не так - phpMyAdmin показывает в какой кодировке работает он сам.
Во всяком случае, в числе прочего значится: "MySQL-кодировка: UTF-8 Unicode (utf8)".

В списке таблиц БД, в поле "Сравнение" значится "cp_1251_general_ci"

my.ini в моем случае в другом месте, но это, конечно, не важно. В нем по поводу кодировок я нашел следующее: "default-character-set=cp1251";

В phpMyAdmin в разделе "Системные переменные MySQL" указано вот еще что:

Переменная          -                значение сессии           -          глобальное значение
character set client                 utf8                                 cp1251  
character set connection             utf8                                 cp1251  
character set database               cp1251                               cp1251  
character set filesystem             binary                               binary  
character set results                utf8                                 cp1251  
character set server                 сp1251                               cp1251  
character set system                 utf8                                 utf8  
collation connection                 utf8_unicode_ci                      cp1251_general_ci  
collation database                   cp1251_general_ci                    cp1251_general_ci  
collation server                     cp1251_general_ci                    cp1251_general_ci  


В my.ini есть еще строка: "default-storage-engine=INNODB". Вероятно, за тип таблиц по умолчанию, она и ответственна?

   
 
 автор: cheops   (27.08.2006 в 22:33)   письмо автору
 
   для: ck   (27.08.2006 в 21:01)
 

>В my.ini есть еще строка: "default-storage-engine=INNODB". Вероятно, за тип таблиц по
>умолчанию, она и ответственна?
Да, если измените на MYISAM, то будет MyISAM...

   
 
 автор: ck   (27.08.2006 в 21:42)   письмо автору
 
   для: cheops   (27.08.2006 в 16:25)
 

Еще phpMyAdmin выводит красным следующее предупреждение:

The mbstring PHP extension was not found and you seem to be using multibyte charset. Without mbstring extension phpMyAdmin is unable to split strings correctly and it may result in unexpected results.

   
 
 автор: cheops   (27.08.2006 в 22:34)   письмо автору
 
   для: ck   (27.08.2006 в 21:42)
 

А у вас расширение mbstring не подключено в PHP, его нужно поключить.

   
 
 автор: ck   (28.08.2006 в 02:12)   письмо автору
 
   для: cheops   (27.08.2006 в 22:34)
 

Подключил. По-прежнему знаки вопроса...

   
 
 автор: cheops   (28.08.2006 в 12:15)   письмо автору
 
   для: ck   (28.08.2006 в 02:12)
 

Знаки вопроса в phpMyAdmin или в скриптах?

   
 
 автор: ck   (28.08.2006 в 16:01)   письмо автору
 
   для: cheops   (28.08.2006 в 12:15)
 

В скриптах. phpMyAdmin по-прежнему работает нормально, но по-прежнему добавляет инструкцию using utf8:

UPDATE `test` SET `test` = 'русский текст' WHERE CONVERT( `test` USING utf8 ) = 'русский' LIMIT 1 ;

   
 
 автор: cheops   (28.08.2006 в 17:54)   письмо автору
 
   для: ck   (28.08.2006 в 16:01)
 

В скриптах, сразу после соединения с базой данных - следует настроить кодировку соедиения при помощи запроса
SET NAMES 'cp1251'

   
 
 автор: ck   (30.08.2006 в 17:58)   письмо автору
 
   для: cheops   (28.08.2006 в 17:54)
 

Спасибо. Помогло. Но нельзя или изменить что-то в самой базе? Ведь на локальном сервере программы тестируются, а потом их предстоит выкладывать на хост - и либо вычищать, либо смириться с лишним запросом к БД, либо искать другие пути, тоже, в общем, неказистые...) В любом случае, большое спасибо.

   
 
 автор: cheops   (30.08.2006 в 19:36)   письмо автору
 
   для: ck   (30.08.2006 в 17:58)
 

Используйте конструкцию
<?php
  
@mysql_query("SET NAMES 'cp1251'");
?>

если база данных поддерживает SET NAMES запрос выполнится, если не поддерживает - не выполнится. Для скрипта не будет никаких последствий.

   
 
 автор: ck   (30.08.2006 в 20:43)   письмо автору
 
   для: cheops   (30.08.2006 в 19:36)
 

Спасибо. Это-то я понимаю. Просто лишний запрос к БД не радует.

   
 
 автор: cheops   (31.08.2006 в 12:25)   письмо автору
 
   для: ck   (30.08.2006 в 20:43)
 

Он не создаёт практически нагрузки...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования