我正在使用带有.Net连接器(6.5.4)的Mysql(5.5.27),当我试图插入一些数据时,我收到了以下错误。
Incorrect string value: '\xF3\xB6\xA5\x89f'...' for column 'STACK_TRACE' at row 1
我已经对堆栈溢出进行了足够的搜索,并尝试了以下charset&数据库,表和列的排序规则。
我已正确设置连接字符串中的'charset = utf8'。
答案 0 :(得分:8)
我通过以下更改解决了这个问题。
正如@eggyal所提到的,列charset和collation只是重要的,我已经设置了所有默认值,所以我以后没有更新所有新列。
答案 1 :(得分:2)
字节序列\xF3\xB6\xA5\x89
似乎是字符U + F6949(一个私有用字符)的有效UTF-8字节序列。请注意,此字符位于补充平面中,并且需要一个4字节的UTF-8序列来表示它。
MySQL documentation 10.1.10. Unicode Support注意到在MySQL 5.5.3之前,字符集“utf8”仅支持“每个字符一到三个字节”。您正在使用MySQL 5.5.27(感谢您注意到这一点),因此MySQL可以处理此字符 - 但您必须使用新编码:“utf8mb4
,Unicode字符集的UTF-8编码,使用一个每个字符四个字节“。还可以使用排序规则的utf8mb4
变体。此外,“需要使用Unicode与服务器通信的客户端应用程序应相应地设置客户端字符集;例如,通过发出SET NAMES 'utf8'
语句。”
不要忘记将列设置为utf8mb4
。错误消息“列值...的错误字符串值...”提示这可能是您的问题。 MySQL bug report #30131 "Incorrect string value" error (1366) when inserting special characters似乎是类似的情况。最后的评论写道:“这个问题很容易解决。不要忘记不仅要将数据库,表格和校对设置为utf8,而且还要设置列!这就是导致问题的原因。我用拉丁语创建了表格,然后切换到utf8,但忘了也改变列。“
Stack Overflow question “Incorrect string value” when trying to insert UTF-8 into MySQL via JDBC?似乎是一个类似的问题。
答案 2 :(得分:0)
从文档 - 名为utf8的字符集每个字符最多使用三个字节,仅包含BMP字符。从MySQL 5.5.3开始,utf8mb4字符集每个字符最多使用四个字节,支持补充字符...
The utf8mb4 Character Set (4-Byte UTF-8 Unicode Encoding)
如果你需要使用4字节的UTF,那么改变表字段 - 设置utf8mb4字符集,并设置连接 - SET NAMES utf8mb4
。
答案 3 :(得分:-1)
将您遇到问题的参数类型更改为LONGBLOB。 MySQL将负责其余部分。