将 UTF8 数据从文件导入 MySQL 会导致截断

将 UTF8 数据从文件导入 MySQL 会导致截断

我有一个名为的文件,person.sql其中只有一行:

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

如果我从 shell 运行以下命令:

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)

答案1

事实证明,该文本文件person.sql不是 UTF-8 编码的(尽管看起来是)。它实际上是 latin1 ( ISO 8859-1)。

要切换编码,我运行:

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

此后,我能够成功导入而不会被截断。

相关内容