| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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ебольшое уточнение, это делается через
|