2013-05-02 4 views
0

Я установил базу данных MySQL с помощью команды utf8_unicode_ci, и все таблицы и столбцы на ней имеют одинаковую сортировку.ZF2 Doctrine2 MySql charset error

Конфигурация My Doctrine имеет SET NAMES utf8 в качестве опции подключения, а в моих html-файлах используется кодировка utf8.

Текст, сохраненный на этих таблицах, содержит символы с акцентом (á, è и т. Д.).

Проблема заключается в том, что при сохранении содержимого в БД он сохраняется со странными символами, например, когда я пытаюсь сохранить ISO в таблице UTF8. (например: NotÃcias)

Единственным обходным решением, которое я нашел, является utf8_decode перед сохранением и utf8_encode перед печатью.

Это означает, что по какой-то причине что-то промежуточное - это испортить utf8 с iso.

Что может быть?

Спасибо.

EDIT:

я установки для кодирования перед сохранением и расшифровывать перед печатью, и это правильно печатает, но в БД мои символы изменится:

XPTÓ -> XPTà«

Это делает поиск в БД для «XPTÓ» невозможным ...

+0

Сортировка не имеет значения, она просто сообщает MySQL, как упорядочить строки. Вы хотите убедиться, что для кодировки _charset_ установлено значение utf8. Можете ли вы обновить свой ответ, чтобы убедиться, что у вас есть правильная кодировка? –

+0

@EzequielMuns обновлен – MGP

ответ

0

Я бы print bin2hex($string); на каждом шаге исходного рабочего процесса (т.е. без шагов кодирования/декодирования).

Пройдите через каждый из:

  1. необработанных данных $_POST
  2. значения, которые вы получите после проверки формы
  3. значения, которые получают положить в вашей связанной Entity
  4. значения, которые вы хотите получить от db, если вы запросите его напрямую с помощью PDO (получите от
    $em->getConnection())
  5. значения, которые заселяются в лету ur Entity on reload (может сделать это через $em->detach($entity); $entity = $em->find('Entity', $id);)

Вы бы посмотрели на точку, в которой выход изменяется, и сосредоточьте свой поиск там.

Я хотел бы также двойной контроль:

  • На дб: SHOW CREATE TABLE 'table' показывает CHARSET=utf8 для всей таблицы (и ничего другого для отдельных столбцов)
  • Это инструмент, используемый, чтобы увидеть свои значения из базы данных (Navicat, phpMyAdmin) имеет правильный набор кодировок.
Смежные вопросы