【发布时间】: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) collate 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 [...] 时,它会因错误“字符串值不正确”而失败。
【问题讨论】: