我有一个文件名为person.sql与1行:
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)
事实certificate,文本文件person.sql不是UTF-8编码(虽然它似乎是)。 这实际上是latin1( ISO 8859-1 )。
要切换编码,我跑了:
iconv -f latin1 -t utf-8 person.sql person-utf8.sql
之后,我能够成功导入而不截断。