我有一个名为的文件,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
此后,我能够成功导入而不会被截断。