У меня есть файл под названием 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
После этого я смог успешно импортировать без усечения.