【问题标题】:utf8mb4 characters not surviving "LOAD DATA INFILE"utf8mb4 字符在“LOAD DATA INFILE”中不存在
【发布时间】:2013-08-24 19:19:11
【问题描述】:

我有一个 csv 文件,其中包含一些位于 Unicode BMP 之外的字符,例如字符 ????。它们是 SMP 字符,因此它们需要存储在 MySQL 中的utf8mb4 charset 和utf8mb4_general_ci 排序规则中,而不是utf8 charset 和utf8_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,timestamp,source,text,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 [...] 时,它会因错误“字符串值不正确”而失败。

【问题讨论】:

    标签: mysql utf-8 utf8mb4


    【解决方案1】:

    问题解决了。

    这是一个错误。在实验过程中,我只是TRUNCATE TABLE,但没有重新创建它。所以数据库和表都是utf8mb4,但是列还是utf8...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 2015-03-11
      相关资源
      最近更新 更多