Назад | Перейти на главную страницу

Ошибка SQL (1064) при импорте данных из файла SQL

У меня есть база данных 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 первых байта с помощью любого приложения, которое вы жестяная банка...