特殊字符未导入 mysql 数据库
Posted
技术标签:
【中文标题】特殊字符未导入 mysql 数据库【英文标题】:special charactors not importing into mysql database 【发布时间】:2016-12-27 22:39:44 【问题描述】:我正在导入在 linux 中保存为 utf8 的 csv,看起来不错。 mysql 数据库中的表是为 utf8 设置的,连接排序规则也是如此。我正在使用“CSV using LOAD DATA”进行导入,字符集为 UTF8。然而,角色正在改变。例如 ∙ 变成 â^™ 。是什么原因造成的?
【问题讨论】:
【参考方案1】:一种可能是您的 MySQL 数据库使用utf8
编码。这是因为 MySQL 中的utf8
不等同于一般的 UTF-8 编码,而只支持 UNICODE 字符的一个子集。例如,您不能对像 ∙
(子弹运算符)这样的数学字符进行编码。
如果您想要完全支持所有 UNICODE 字符,您应该尝试改用 utf8mb4
编码,如 MySQL manual 所示:
utf8
,Unicode 字符集的 UTF-8 编码,每个字符使用一到三个字节。
utf8mb4
,Unicode 字符集的 UTF-8 编码,每个字符使用一到四个字节。
您还可以在manual 中查看有关 UNICODE 支持的完整讨论。
【讨论】:
您应该更改数据库本身的设置,更改表的编码,而不是命令的导入设置。 参见 this 或类似的关于更改 MySQL 编码的帖子。 如果我更改了受影响列中的设置并使用该设置上传,它没有任何区别。我看不到改变整个数据库的方法,也许需要这样做。我之前使用 utf8 上传到这个数据库没有问题,尽管 csv 应该是在 windows 上制作的。 我找到了一个解决方法,但由于这个问题被否决了这么多,我将把它发布到其他地方,尽管我感谢 Renzo 的投入 “子弹运算符”,十六进制E28899
在 MySQL 的 utf8 中可用; utf8mb4 不需要。以上是关于特殊字符未导入 mysql 数据库的主要内容,如果未能解决你的问题,请参考以下文章