Используйте MySQL в OUTFILE для генерации читаемых данных Excel в формате UTF8 - PullRequest
2 голосов
/ 11 апреля 2011

У меня есть проблема, похожая на этот вопрос . То есть - мне нужно экспортировать некоторые данные UTF8 из базы данных MySQL в MS Excel.

Добрый день, Excel предоставляет:

  • Excel открывает отформатированные в UTF8 файлы CSV как ANSCI, тем самым нарушая
  • Excel будет правильно открывать разделенные табуляцией файлы UTF8, но разрывы строк не поддерживаются (в моих данных есть разрывы строк, хотя в худшем случае я могу их потерять)
  • Excel будет , по-видимому , откроет CSV в кодировке UTF-16LE (с прямым порядком байтов) в порядке. Однако, насколько мне известно, MySQL INTO OUTFILE не принимает аргумент кодировки контента, а просто использует кодировку базы данных (UTF8).

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

Если кто-нибудь знает, как заставить MySQL перескочить через обручи Excel на этом, это было бы здорово.

Большое спасибо,

Jack

Редактировать : Этот ответ описывает решение, которое работает для Excel 2007. Добавление «спецификации» в файл, что я могу сделать, предоставив выведенный файл клиент с помощью сценария PHP, который добавляет спецификацию. В идеале я хотел бы найти решение, которое работает и в 2003 году.

Ответы [ 2 ]

1 голос
/ 11 апреля 2011

Я помню, столкнулся с этой проблемой в Excel.Исправление спецификации работает для Excel 2007 и 2010. Мы также хотели поддержать 2003, однако наше решение заключалось в том, чтобы просто писать файлы XLS вместо файлов CSV (используя Java).Это не похоже на вариант, так как вы экспортируете из MySQL.Одна идея, которая приходит на ум, - преобразовать ваш вывод UTF8 в UTF-16LE после экспорта. Эта страница объясняет, как это сделать с помощью Perl.

1 голос
/ 11 апреля 2011

Для обработки likebreaks я предлагаю добавить:

FIELDS ENCLOSED BY '"'

Более полный пример из mysql docs :

SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
  FROM test_table;
...