Utf8 искажается при импорте в mysql
Импорт данных в кодировку UTF8 в mysql не работает для меня. Символы UTF8 повреждены. Например Nöthnagel отображается как Nöthnagel
Я создал файл дампа sql для импорта, который содержит кодированные данные UTF-8. Например:
INSERT INTO `users` VALUES(1, 'Fred','Nöthnagel');
Последовательность байтов, представляющая ö в файле, - c3 b6, которая, как я считаю, верна, так как она корректно отображается в vim и в моей оболочке bash, в которой установлены эти переменные среды:
$ env | grep -i utf
LANG=en_US.UTF-8
XTERM_LOCALE=en_US.UTF-8
mysql db был создан следующим образом:
mysql> CREATE DATABASE mydb CHARACTER SET utf8;
Таблица mysql была создана так:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`first_name` varchar(30) NOT NULL,
`last_name` varchar(30) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `last_name` (`last_name`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
Я импортирую файл дампа следующим образом:
mysql -u root -psecret mydb < mydump.sql
Пожалуйста, расскажите мне, чего не хватает из вышеперечисленного.
Ответы
Ответ 1
Я думаю, что это могло бы иметь отношение к сортировке, но я не уверен. В моем случае это, безусловно, было, так как я должен был поддерживать кириллицу.
Попробуй это, работал у меня:
-
Установите начальную сортировку при создании целевой базы данных на utf8_general_ci
-
Добавьте SET NAMES 'utf8' COLLATE 'utf8_general_ci';
в начало вашего файла sql
-
Запустите mysql -u root -p --default-character-set=utf8 yourDB < yourSQLfile.sql
Еще одна вещь, чтобы правильно получить данные UTF-8 из базы данных, вам также придется изменить строку соединения. Например:
mysql.url=jdbc:mysql://localhost:3306/nbs?useJvmCharsetConverters=false&useDynamicCharsetInfo=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&useEncoding=true
Кроме того, посмотрите, что моя проблема.
Ответ 2
Проблема была решена путем добавления этого в начало файла sql:
SET NAMES utf8;
Ответ 3
Используйте эту команду для импорта таблицы utf8 в базу данных:
mysql -u USERNAME -pPASSWORD --default_character_set utf8 DATABASE < file.sql
Ответ 4
У меня была аналогичная проблема. Существует несколько переменных, которые должны быть UTF8, а не только база данных, включая клиент, соединение, сервер и т.д.
Решение вашей проблемы описано в в этой статье. Описанное решение переносимо, поэтому оно работает не только для utf8, но и для всех других наборов символов. Вам может потребоваться изменить его в соответствии с вашими потребностями.