экспорт и импорт данных utf8 в mysql: лучшие практики - PullRequest
3 голосов
/ 04 мая 2010

Мы часто сталкиваемся с необходимостью отправить файл данных одному из наших клиентов с данными из базы данных, которую он / она должен перевести. Большую часть времени это экспорт CSV или XLS. Большую часть времени мы создаем дамп csv с помощью phpmyadmin и получаем файл xls взамен переведенных данных. Проблема в том, что большую часть времени данные имеют формат UTF8, и когда файл возвращается в формате xls каждый раз, когда мы снова загружаем данные в mysql, мы сталкиваемся с проблемами utf8, некорректным отображением символов и т. Д.

Мы уже дважды проверили все в mysql от my.conf до наборов символов столбцов, и все правильно установлено на UTF8.

Мой вопрос , а не как исправить проблему с кодировкой, поскольку она была решена, но как нам лучше поступить в будущем, справившись с этой ситуацией? Какой формат экспорта мы должны передать? Как мы должны импортировать (просто mysql загрузить данные infile или наши собственные скрипты обработки). Каково общее мнение о том, как справиться с этой ситуацией?

Мы хотели бы продолжить использовать Excel, если это возможно, поскольку этого формата ожидают почти все, включая бюро переводов наших клиентов. Простота использования наших клиентов является наиболее важным фактором, не перегружая нас каждый раз серьезными проблемами. Лучшее из двух миров:)

1 Ответ

1 голос
/ 04 мая 2010

Приложение, над которым я сейчас работаю, также включает в себя функции импорта данных. Данные в основном кодируются в utf-8.

Мой подход заключается в предварительной обработке импортированного файла CSV (или разделителя табуляции) (в любой кодировке) в правильный временный CSV-файл в кодировке utf-8 в клиентском скрипте (Python) и загрузке содержимого файла с помощью LOAD ИНФОРМАЦИЯ О ДАННЫХ оператор.

Кодировка файла контролируется системной переменной character_set_database (переменная должна быть задана на уровне сервера) и, начиная с MySQL 5.1.17, может быть переопределена с помощью CHARACTER SET пункт ЗАГРУЗКИ ДАННЫХ INFILE.

Единственное, что нужно знать, это то, что MySQL хранит до 3 байтов для каждого символа вместо 4 (что может быть проблемой для восточных языков).

Для эффективного экспорта большого количества данных вы можете использовать оператор SELECT ... INTO OUTFILE .

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