Как сохранить кодировку символов в запросах к базе данных - PullRequest
1 голос
/ 13 апреля 2010

Я делаю следующее.

1) Я экспортирую базу данных и сохраняю ее в файл с именем dump.sql.2) Файл затем передается на другой сервер через PHP FTP.3) После успешного переноса файла администратор может запустить скрипт «dbtransfer» на новом хосте.4) Этот скрипт взрывает скрипт и запускает запросы построчно.

Это прекрасно работает - однако есть проблема с кодировкой на иностранном языке.Мы используем UTF-8.

Шаг 1: Это работает нормально, файл в формате UTF-8.Шаг 3: Когда я проверяю содержимое файла dump.sql с помощью mb_check_encoding ().Строка возвращается как UTF-8.Шаг 4: Это создает таблицы с кодировкой utf8_general_ci.Информация сбрасывается в.

Когда я проверяю таблицу после передачи, я получаю такие записи:, Az, Ay, Az.Я не понимаю, как строка UTF-8 может потерять свою кодировку при входе в базу данных.Я пропускаю шаг?Нужно ли запускать какую-то функцию, чтобы гарантировать, что строка анализируется как UTF-8?

После установки системы я могу сохранять запросы на иностранных языках.Это просто перевод, который портит.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 13 апреля 2010

После подключения к БД в PHP я всегда выполняю следующий запрос к объекту подключения, чтобы убедиться, что соединение использует UTF-8:

$pdo->exec('SET NAMES \'utf8\' COLLATE \'utf8_unicode_ci\'');

Другой вариант заключается в том, что целевой таблицы нет в UTF-8.

1 голос
/ 13 апреля 2010

Непонятно, как вы делаете все эти шаги, но давайте попробуем.

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

Во-вторых, перед вставкой каких-либо данных выполните следующий запрос:

SET NAMES 'utf8';
1 голос
/ 13 апреля 2010

Скорее всего, вы не сказали MySQL, что говорите с ним по UTF-8 - у соединения неправильный набор символов. Для этого используйте функцию mysql_set_charset .

Также обратите внимание, что utf8_general_ci - это не кодировка, это сопоставление. Другими словами, он только сообщает MySQL, как должен обрабатываться этот столбец при сравнении значений (в том числе при сортировке).

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