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

Импорт данных UTF8 в MySQL из файла вызывает усечение

У меня есть файл под названием person.sql с 1 строкой:

INSERT INTO Person (sFullname) VALUES ('Thomas Ågren');

Если я запустил следующую команду из оболочки:

mysql --default-character-set=utf8 -uusername -ppassword mydatabase < person.sql

Я получаю усеченные результаты:

mysql> select sfullname from person;
+-----------+
| sfullname |
+-----------+
| Thomas    |
+-----------+

Если я запустил такой же точный вставить команду прямо из командной строки MySQL:

mysql> INSERT INTO Person (sFullname) VALUES ('Thomas Ågren');

Получаю правильный результат:

mysql> select sfullname from person;
+--------------+
| sfullname    |
+--------------+
| Thomas Ågren |
+--------------+

Любые идеи? Кодировка по умолчанию для базы данных и таблицы Person правильно установлена ​​на utf8. Вот определение схемы:

mysql> show create table person \G
*************************** 1. row ***************************
       Table: person
Create Table: CREATE TABLE `person` (
  `sFullname` varchar(50) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

Оказывается, текстовый файл person.sql не был закодирован в UTF-8 (хотя, похоже). На самом деле это был latin1 (ISO 8859-1).

Чтобы переключить кодировку, я запустил:

iconv -f latin1 -t utf-8 person.sql person-utf8.sql

После этого я смог успешно импортировать без усечения.