Данные Windows 1252 в UTF-8 MySQL Table с использованием CakePHP - PullRequest
1 голос
/ 09 ноября 2010

Я вижу версии этого вопроса на SO, поэтому я попытаюсь быть в курсе того, что здесь происходит.

У нас есть приложение Cake 1.2.5, подключенное к базе данных MySQL 5.1.Исходная база данных и таблица, в которую я пытаюсь писать, были Latin-1, но я изменил базу данных, таблицу и столбец на UTF-8 (насколько я понимаю, это не имеет значения, но я включаю его)ради полноты).

Проблема заключается в том, что пользователь Windows, который вводит в нашу форму знак тире (полученную с помощью MS Word, автоматически исправляющего дефис), получает в базе данных байт x96 (просматривается с помощью шестнадцатеричного редактора в режиме hexl в Emacs), который является точкой кода для черточки в кодировке Windows 1252 (и в значительной степени недопустимой в других распространенных кодировках).

Изначально я думал, что это проблемас вводом формы, поэтому я сделал обычный раунд изменения заголовка Content-Type, проверки метатегов, добавления accept-charset к тегу формы, ни один из которых ничего не сделал, но затем я попытался сбросить данные, которые я получалформа в файл перед сохранением в базе данных, и она правильно сохраняет кодовую точку UTF-8 для en dash xe2x80x93 (рассматривается аналогично),поэтому я считаю, что проблема возникает, когда Cake общается с базой данных.

То, что я пробовал:

  • Добавлено 'encoding'=>'utf8' в определение соединения в app / config / database.php.
  • Добавлен Configure::write('App.encoding', 'UTF-8'); в app / config / core.php.
  • Добавлен mb_internal_encoding('UTF-8'); в app / config / core.php.

Дополнительнона возможные ответы мне интересно услышать о любых предположениях, которые я сделал в этом процессе, которые являются недопустимыми, а также о методах просмотра состояния данных на различных этапах процесса.

Ответы [ 2 ]

1 голос
/ 09 ноября 2010

если вы просто измените схему таблицы с latin1 на UTF-8, это, вероятно, не очень хорошо работает, если ваши существующие данные содержат символы UTF-8 не совсем уверен насчет cakephp, ты тоже проверял это mysql_set_charset? http://php.net/manual/en/function.mysql-set-charset.php

0 голосов
/ 10 ноября 2010

Ответ на этот вопрос оказался проблемой с параметром character_set_client всех клиентов, которые я использовал (клиент командной строки MySQL, режим Emacs SQL [который на самом деле является просто оболочкой для клиента командной строки MySQL], и Библиотека MySQLDb) для просмотра данных после вставки.

После выполнения команды SHOW variables; стало очевидно, что данные действительно были в базе данных правильно, но все мои попытки наблюдать данные были неверными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...