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

Форум MySQL

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

 

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

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

тема: Проблемы с кодировкой (character_set_server)
 
 автор: nurdus   (26.03.2011 в 12:10)   письмо автору
 
 

Доброго времени суток.

Есть сайт кодировка utf-8, в сайт вставили наш сторонний запрос, результат выдается квадратиками (если "сменить", кодировку страницы на cp1251 то нормально работает на скрипт, а вот сайт криво уже.)...

SHOW VARIABLES LIKE '%char%'
выдает:
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server cp1251
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

Заранее большое спасибо.

  Ответить  
 
 автор: cheops   (26.03.2011 в 12:18)   письмо автору
 
   для: nurdus   (26.03.2011 в 12:10)
 

1. Проблемный запрос к какой таблице/таблицам обращается? Какую кодировку имеют эти таблицы и данные в них?
2. Как настраиваете кодировку соединения с MySQL-сервером (какую кодировку указываете Win-1251 или UTF-8)?

  Ответить  
 
 автор: nurdus   (26.03.2011 в 12:21)   письмо автору
 
   для: cheops   (26.03.2011 в 12:18)
 

1. к таблице utf8_general_ci, где все поля тоже utf8_general_ci.

2. Сопоставление соединения с MySQL тоже utf8_general_ci.

3. Даже файл скрипта в utf8.

  Ответить  
 
 автор: cheops   (26.03.2011 в 12:30)   письмо автору
 
   для: nurdus   (26.03.2011 в 12:21)
 

Т.е. получается, что там данные в Win-1251? Попробуйте вот что, измените CHARACTER SET таблицы на cp1251, а все остальное оставьте без изменений в UTF-8. Дело в том, что MySQL корректно переконвертирует данные даже если они в одной кодировке, а запрашивается другая. А вот если кодировка в таблице указана одна, а данные в ней в другой кодировке - она уже ничего поделать не сможет.

  Ответить  
 
 автор: nurdus   (26.03.2011 в 12:51)   письмо автору
 
   для: cheops   (26.03.2011 в 12:30)
 

попробовал, таблицу поменял, поля остались теме же... результата пока нет.

  Ответить  
 
 автор: cheops   (26.03.2011 в 13:03)   письмо автору
 
   для: nurdus   (26.03.2011 в 12:51)
 

>поля остались теме же..
Т.е. их кодировка указана как UTF-8? Или имеется в виду что-то другое? Если не сложно выполните запрос SHOW CREATE TABLE, чтобы можно было посмотреть текущую структуру таблицы?

  Ответить  
 
 автор: nurdus   (26.03.2011 в 13:12)   письмо автору
 
   для: cheops   (26.03.2011 в 13:03)
 

да, имею ввиду кодировку.

SHOW CREATE TABLE cms_es_cats выдал только:
cms_es_cats 435245415445205441424c452060636d735 f65735f636174736020280a202060696460 20696e7428313129204e4f54204e552e2e2

  Ответить  
 
 автор: cheops   (26.03.2011 в 13:26)   письмо автору
 
   для: nurdus   (26.03.2011 в 13:12)
 

>да, имею ввиду кодировку.
Нужно добиться того, чтобы кодировка в таблице везде куда попали данные Win-1251 была cp1251 и в самой таблице и столбцах. Это важно еще из-за того, что если таблица будет пополняться, у вас будет смешанные данные - половина в cp1251, половина в utf-8 и тогда решить проблему, без ручного вмешательства будет вообще невозможно. Т.е. все CHARACTER SET должны указывать истинную кодировку данных - тогда MySQL сможет корректно их преобразовывать в ту кодировку, которую запрашивает клиент.

>SHOW CREATE TABLE cms_es_cats выдал только:
>cms_es_cats 435245415445205441424c452060636d735
>f65735f636174736020280a202060696460 20696e7428313129204e4f54204e552e2e2
Хм... странно, а вы в какой среде этот запрос выполняете?

  Ответить  
 
 автор: nurdus   (26.03.2011 в 13:28)   письмо автору
 
   для: cheops   (26.03.2011 в 13:26)
 

>Нужно добиться того, чтобы кодировка в таблице везде куда попали данные Win-1251 была cp1251 и в самой таблице и столбцах.

сейчас попробуем поменять

>Хм... странно, а вы в какой среде этот запрос выполняете?

phpmyadmin 3.3.10

  Ответить  
 
 автор: cheops   (26.03.2011 в 13:31)   письмо автору
 
   для: nurdus   (26.03.2011 в 13:28)
 

>phpmyadmin 3.3.10
Странно, обычно он такие запросы корректно обрабатывает...

  Ответить  
 
 автор: nurdus   (28.03.2011 в 01:37)   письмо автору
 
   для: nurdus   (26.03.2011 в 12:10)
 

Вообщем попробовал с измененной кодировкой (на утф-8) нужного поля и самой таблицы перезалить (предварительно удалив содержимое) данные через csv импорт в кодировки 1251... результат тот же... (((

Есть ли какие ли идеи по этому поводу у кого нибудь?... Срочна нужна помощь!..

  Ответить  
 
 автор: cheops   (28.03.2011 в 11:44)   письмо автору
 
   для: nurdus   (28.03.2011 в 01:37)
 

>данные через csv импорт в кодировки 1251...
Вы перекодировали данные 1251 в utf-8 перед помещением в базу данных? Или указывали set names cp1251, если заливались данные в win-1251?

  Ответить  
 
 автор: nurdus   (28.03.2011 в 16:06)   письмо автору
 
   для: cheops   (28.03.2011 в 11:44)
 

>Вы перекодировали данные 1251 в utf-8 перед помещением в базу данных?
нет, данные остались в 1251

>Или указывали set names cp1251, если заливались данные в win-1251?
поле которое криво отображается имеет кодировку 1251...

и что значит set names cp1251? (из csv данные импортировались не через пхпмайадмин, а через сам сайт)

  Ответить  
 
 автор: cheops   (28.03.2011 в 16:15)   письмо автору
 
   для: nurdus   (28.03.2011 в 16:06)
 

phpMyAdmin как раз сам позаботится о настройки кодировки соединения. А вот при работе из ваших собственных скриптов MySQL нужно сообщать в какой кодировки вы предоставляете ей данные. Если вы отсылаете MySQL-серверу данные в кодировке Windows-1251, то первый запрос после установки соединения должен быть
SET NAMES cp1251;
Если передаете данные в кодировке UTF-8, то первый запрос должен быть
SET NAMES utf8;
Если во время сеанса меняете кодировку отправляемых данных, нужно выполнять соответствующие запросы.

PS В противном случае, MySQL считает, что данные передаются в шведской кодировке.

  Ответить  
 
 автор: nurdus   (28.03.2011 в 16:45)   письмо автору
 
   для: cheops   (28.03.2011 в 16:15)
 

Большое спасибо, будем пробовать. )

  Ответить  
 
 автор: nurdus   (29.03.2011 в 00:27)   письмо автору
 
   для: cheops   (28.03.2011 в 16:15)
 

ОГРОМНОЕ СПАСИБО! Всё работает. Скажите, если могу вам чем нибудь помощь (или отблагодарить...)

  Ответить  
Rambler's Top100
вверх

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