2014-01-28 4 views
2

Мы только что обновили наш сервер MySQL с 5.0 до 5.1.Delphi, dbExpress и UTF8

Остальная задача - окончательно разобраться с нашей поддержкой Unicode, которая беспокоит нас с Delphi 2010. Теперь мы используем XE5.

Новая база данных была настроена со значением по умолчанию как utf8-general-ci. Таблицы были перенесены с их исходной сортировкой как latin1-swedish-ci.

На данный момент все наши приложения считаются с TSQLConnection.ServerCharSet = "", так как установка считываемых соединений на utf8 имеет неожиданные результаты.

Пишет с соединениями, установленными в TSQLConnection.ServerCharSet = "utf8"

я теперь сделал локальную копию новой схемы и превратил все таблицы в генерал-utf8-CI - и это похоже, прошел гладко.

Однако, когда я проверить на новом сервере он до сих пор не является гладким:

  • Настройка подключения для чтения к utf8 обеспечивает результаты в той или иной форме кандзи.
  • Установка считываемого соединения на utf8-general-ci или "" читается правильно.
  • Установка соединения записи в «» приводит мусор при написании «Е» или «€» символы
  • Настройка соединения записи в utf8 правильно пишет

Я подозреваю, что utf8 -general-ci не распознается как опция dbExpress, поэтому игнорируется

Я также подозреваю, что параметр SQLConnection.Locale может быть проблемой - в настоящее время это установлено на 0000, но у меня есть попытался установить его на LOCALE_SYSTEM_DEFAULT (2048) без успеха ...

Есть ли способ избежать двух разных TSQLConnections для процедур чтения/записи?

редактировать

На основе предложений по Ариоху «The Я побежал тест с различными типами строк столбцов. Мы используем поля Text/Tinytext, и именно там мы видим проблемы.

Проблема возникает при использовании типов столбцов VarChar. не.

Мы хотели бы предположение, что не требует от нас использования третьей стороны водителя/соединения, как этот шаг не соответствует нашей нынешней стратегии развития

+0

вы пытались MySQL DBX водителей от других производителей? –

+0

Нет - на данный момент предоставлен только Embarcadero. –

+1

Попробуйте их, даже если только для двоичного поиска ошибок «делить и побеждать» –

ответ

1

Заключительного комментарий от Ариоха «The вести меня чтобы найти этот вопрос:

With Delphi Xe2 and MySQL 5.1, how return UTF8 string from query?

Который, в свою очередь, приводят к этой странице Embarcadero:

dbExpress Data Type Mapping for Supported Databases

В чем ответ найден:

текст TDBXDataTypes.AnsiStringType

т.е. прочитанную AsAnsiString, а не AsString

Смежные вопросы