Подтвердить что ты не робот

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

Пожалуйста, расскажите мне, чего не хватает из вышеперечисленного.

4b9b3361

Ответ 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, но и для всех других наборов символов. Вам может потребоваться изменить его в соответствии с вашими потребностями.