У меня есть база данных MySQL, которая изначально была настроена по умолчанию latin1
набор символов и latin1_swedish_ci
сопоставление. Некоторое время я использовал эту базу данных, пока не заметил странных символов на своем рабочем веб-сайте, который работает на базе данных, экспортированной с моей машины разработки.
На этом этапе я изменил набор символов по умолчанию для базы данных и таблиц на utf8
и сопоставление с utf8_unicode_ci
, преобразовал latin1
данные внутри каждой таблицы для utf8
(используя опцию «преобразовать данные») и экспортировал базу данных как один файл SQL с помощью HeidiSQL.
Когда полученный файл SQL открывается в Notepad ++, некоторые символы отображаются неправильно. Например, короткие тире (-) отображаются как –
и e с ударением (é) отображаются как é
.
Я изменил кодировку файла с ANSI
к UTF-8
(с использованием опции меню кодирования в Notepad ++), и оскорбительные символы отображаются правильно. Я сохранил новый файл SQL в кодировке utf8 и попытался импортировать его содержимое в базу данных MySQL на моем производственном сервере. Процесс импорта завершается ошибкой со следующей ошибкой:
/* SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?# -------------------------------------------------------- # Host: ' at line 1 */
/* Error with snippets directory: The specified path was not found */
Заголовок файла SQL:
# --------------------------------------------------------
# Host: 127.0.0.1
# Server version: 5.1.33-community
# Server OS: Win32
# HeidiSQL version: 6.0.0.3773
# Date/time: 2011-04-20 09:48:36
# --------------------------------------------------------
Он заглушает первую строку файла, которая закомментирована. Почему это происходит? У меня не было проблем с загрузкой данных из файлов SQL, пока я не изменил набор символов и сопоставление базы данных.
Я придумал уродливое решение этой проблемы, выполнив следующие шаги:
Что мне здесь не хватает?
Ваш редактор, вероятно, вставил «Метку порядка байтов» спецификации в начало файла.
Это плохое поведение вашего редактора, поскольку спецификации не используются в кодировке UTF-8, они полезны только в UTF-16 или UTF-32. Однако такое поведение кажется обычным для некоторых редакторов.
Либо есть способ указать, что вам не нужна спецификация в вашем файле (например, в TextWrangler на Mac, используя кодировку «UTF-8 без спецификации»), либо вы должны удалить 2 первых байта с помощью любого приложения, которое вы жестяная банка...