Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Extensions > Косяки с кодировкой


Автор: мухр 21.1.2008, 13:25
Использую ORM Doctrine, та в свою очередь - расширение PDO. Пытаюсь поместить запись в БД, ипользуя Doctrine_Record::save() метод, встаёт как-то криво - мне даже кажатся, что в дважды юникод-закодированном виде. Когда получаю назад, некоторые символы выглядят следующим образом:
�?еверное им�? пользовател�? или пароль
До�?туп �? вашего IP запрещён

Сравнение текстовых ячеек - utf8_general_ci. Тип таблицы - InnoDB, но с другими типами такая же ерунда. Когда BLOB использую, то всё нормально, а с текстовым типом вот такая проблема.

Автор: GeneralElectric 21.1.2008, 14:20
Да, вот это один из недостатков PDO - невозможно посмотреть запрос в каноническом виде, и убедиться, нормальные ли там данные.
два уровня абстракции над базой - пдо и доктрина. 

Если тебе конкретный ответ, где править, то тут я ничего не скажу.
А если как искать ошибку, то очевидные вещи: проверить, какая кодировка при соединении, проверить, в каком виде данные лежат в базе, проверить, какая кодировка соединения, когда получаешь данные
судя по тому, что в с блобом все нормально, то как-то неверно перекодирует база. может быть, там где-то UC2 стоит?

Автор: мухр 22.1.2008, 01:41
Обычное указание "SET NAMES" решило проблему. В Доктрине это делается через Doctrine_Manager::setCharset().

Автор: Romiz 9.7.2008, 14:31
Hебольшое уточнение, это делается через 
Код

Doctrine_Connection::setCharset();


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)