与mysql插入有关的utf8问题,

时间:2018-09-04 15:02:43

标签: mysql laravel utf8mb4

我有一个在Laravel上运行的项目。

我的函数获取存储中的文件(UTF8文件),然后将数据解析/插入到mysql表中(Mysql在utf8mb4_unicode_ci中)。

由于某些错误,我在插入时卡住了:常规错误:1366不正确的字符串值:'\ xC2'

有关插入文本失败:“ Laclairièred'Eole n°5”

问题似乎在于“°”字符。当我删除它时,插入工作。口音没有问题,只是°,我不知道为什么。

我尝试了一些preg_replace,iconv,但没有成功。

2 个答案:

答案 0 :(得分:0)

根据您用于读取CSV的软件,您可能需要调整CSV文档输出脚本。

在Windows上,MS Excel要求使用UTF-8编码的CSV及其相应的BOM字符。要满足此要求,您只需要添加UTF-8 BOM字符即可。

在MacOS系统上,MS Excel要求以制表符作为分隔符的UTF-16 LE编码的CSV。

您可以使用此库来解析csv文件。他们已经将这些内容包含在库中。 https://csv.thephpleague.com/9.0/interoperability/encoding/

答案 1 :(得分:0)

听起来好像设置了ascii,而不是utf8,甚至不是latin1。

°在ascii中不可用,因此可能是导致错误的原因。在latin1中,它是十六进制B0。在utf8中,它是C2B0。由于错误消息仅提及C2,因此我猜测目标字符集是ascii,而不是latin1。

请提供SHOW CREATE TABLE以及用于读取文件的技术-比“读取纯文本文件”更多。