GB2312 没有收入“啰”字
本文最后更新于 2023年4月17日 上午
太长不看
如果导出数据库时使用 GB2312编码,数据里又有汉字“啰”时,会报错,因为 GB2312 没有收入“啰”字。
背景
最近饱受背单词折磨。之前因为想订制背单词的内容,又不想自己一个一个输入,或者对着 Excel 背单词,所以使用了 WordReview,可以读取 Excel 中的单词到数据库中。过了几轮单词后,我打算把所有没背熟的单词导出,每天看一遍。
过程
编写 SQL
1 |
|
其中 history 字段记录了单词背诵历史,1 代表记得,0 代表不记得,所以认为那些最后一次记得但前两次不记得 和 最后两次不记得 的单词是没背熟的单词。forget_num 代表忘记的次数。
导出查询结果
查询出数据后,因为想偷懒,所以打算借助 phpmyadmin 导出数据(选择 CSV 格式,编码 GB2312),但是导出的文件显示,导出某个单词时产生了报错。然后我把 SQL 里的 DESC 去掉,再导出,发现在另一个单词处报错。
找到这两个单词 diffuse,garrulous,发现它们有一个共同的意思“啰嗦的”。通过控制变量法发现有“啰”就会报错。通过查询才得知 GB2312 没有收入“啰”字[1]。
知道原因后,用 utf-8 导出然后解决中文乱码问题即可。
解决乱码
- 通过 Excel 解决[2] 如图,选择“从文本/CSV”,以 Unicode编码 导入数据即可。
- 通过记事本解决
用记事本打开导出的 CSV 文件,然后更改文件编码。
后记
顺带学习一下如何用 SQL 导出 CSV 格式的数据 1
2
3
4
5
6
7SELECT word, mean, mnemonic, note into outfile 'D:/words.csv'
FIELDS TERMINATED BY ','
OPTIONALLY
ENCLOSED BY '"' ESCAPED BY ' '
LINES TERMINATED BY '\n'
FROM `words` WHERE history like '%001' or history like '%00'
ORDER BY forget_num DESC;
ENCLOSED BY 字段括起字符
ESCAPED BY
转义字符(默认:\)[3]