2

我有一个 csv 文件,其中包含一些位于 Unicode BMP 之外的字符,例如字符. 它们是 SMP 字符,因此它们需要存储在 MySQL 中的 charset 和 collat​​ion 中,而不是utf8mb4charset和collat​​ion 中。utf8mb4_general_ciutf8utf8_general_ci

所以这是我的 SQL 查询。

MariaDB [tweets]> 设置名称“utf8mb4”;
查询正常,0 行受影响(0.01 秒)

MariaDB [tweets]> create table test (a text) collat​​e utf8mb4_general_ci;
查询正常,0 行受影响(0.06 秒)

MariaDB [tweets]> 插入测试 (a) 值 ('');
查询正常,1 行受影响(0.03 秒)

MariaDB [tweets]> 从测试中选择 *;
+------+
| 一个 |
+------+
| |
+------+
一组中的 1 行(0.00 秒)

没有警告。一切都是对的。现在我想加载那个 csv 文件。对于测试,该文件只有一行。

MariaDB [tweets]> 将数据本地 infile 't.csv' 加载到表 wzyboy 字符集 utf8mb4 字段中,以 ',' 结尾,由 '"' 括起来,以 '\n\n' 结尾 (tweet_id,in_reply_to_status_id,in_reply_to_user_id,retweeted_status_id,retweeted_status_user_id ,时间戳,来源,文本,expanded_urls);
查询正常,1 行受影响,7 个警告(0.01 秒)      
记录:1 删除:0 跳过:0 警告:7

警告信息是:

| 警告 | 第1366章 不正确的字符串值:第 1 行的列 'text' 的 '\xF0\x9F\x80\x80' |

我所有的工作环境(操作系统、Termianl 等)都使用 UTF-8。我已经utf8mb4在我能想到的每个地方都指定了,如果我手动INSERT INTO它就可以了。但是,当我使用LOAD DATA INFILE [...] CHARACTER SET utf8mb4 [...]它时,它会因错误“字符串值不正确”而失败。

4

1 回答 1

1

问题解决了。

那是一个错误。在实验过程中,我只是TRUNCATE TABLE而不是重新创建它。所以数据库和表都是utf8mb4,但列仍然utf8......

于 2013-08-22T15:37:45.340 回答