Mysql
將 UTF8 數據從文件導入 MySQL 會導致截斷
我有一個
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)
事實證明,文本文件
person.sql
不是 UTF-8 編碼的(儘管看起來是這樣)。它實際上是 latin1 (ISO 8859-1
)。為了切換編碼,我跑了:
iconv -f latin1 -t utf-8 person.sql person-utf8.sql
之後,我能夠在不截斷的情況下成功導入。