我有一个csv文件,其中包含一些位于Unicode BMP之外的字符,例如字符。它们是SMP字符,因此需要将它们存储在MySQL中的
utf8mb4
字符集和utf8mb4_general_ci
排序规则中,而不是utf8
字符集和utf8_general_ci
排序规则。
所以这是我的SQL查询。
MariaDB [tweets]> set names 'utf8mb4'; Query OK, 0 rows affected (0.01 sec) MariaDB [tweets]> create table test (a text) collate utf8mb4_general_ci; Query OK, 0 rows affected (0.06 sec) MariaDB [tweets]> insert into test (a) values (''); Query OK, 1 row affected (0.03 sec) MariaDB [tweets]> select * from test; +------+ | a | +------+ | | +------+ 1 row in set (0.00 sec)
没有警告。一切都是对的。现在我想加载那个csv文件。对于测试,文件只有一行。
MariaDB [tweets]> load data local infile 't.csv' into table wzyboy character set utf8mb4 fields terminated by ',' enclosed by '"' lines terminated by '\n\n' (tweet_id,in_reply_to_status_id,in_reply_to_user_id,retweeted_status_id,retweeted_status_user_id,timestamp,source,text,expanded_urls); Query OK, 1 row affected, 7 warnings (0.01 sec) Records: 1 Deleted: 0 Skipped: 0 Warnings: 7
警告信息为:
| Warning | 1366 | Incorrect string value: '\xF0\x9F\x80\x80' for column 'text' at row 1 |
我所有的工作环境(OS,Termianl等)都使用UTF-8。我在我能想到的每个地方都指定了utf8mb4
,如果我手动INSERT INTO
它就可以了。但是,当我使用LOAD DATA INFILE [...] CHARACTER SET utf8mb4 [...]
时,它只会失败并显示错误“字符串值不正确”。
答案 0 :(得分:1)
问题解决了。
这是一个错误。在实验过程中,我只是TRUNCATE TABLE
但不重新创建它。所以数据库和表都是utf8mb4
,但列仍然是utf8
...