Mysql

將 UTF8 數據從文件導入 MySQL 會導致截斷

  • September 24, 2010

我有一個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

之後,我能夠在不截斷的情況下成功導入。

引用自:https://serverfault.com/questions/183687