我正在尝试进行MySQL插入,我收到如下错误消息:
Incorrect string value: '\xA0' for column 'foo' at row 1
\xA0
和\x96
都会发生这种情况。
我正在使用PHP,我将此查询传递给mysqli_query()
:
INSERT INTO ttest1 (foo) VALUES("test\xA0")
这是创建表:
CREATE TABLE ttest1 ( test_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, foo VARCHAR(32))
以下是MySQL的字符集和整理信息:
character_set_client utf8mb4 character_set_connection utf8mb4 character_set_database utf8 character_set_filesystem binary character_set_results utf8mb4 character_set_server utf8 character_set_system utf8 collation_connection utf8mb4_unicode_ci collation_database utf8_general_ci collation_server utf8_general_ci
foo
列的排序规则是uft8_general_ci。
那么为什么我在这个设置中遇到了这个错误,最好的解决方法是什么?
答案 0 :(得分:1)
\x80
和\xFF
之间没有有效的utf8编码,因此错误是正确的。
代码点160(0xA0)(也称为 
或
),在utf8中,是一个2字节字符,编码为0xC2
0xA0
。< / p>
同样,代码点150(0x96)编码为0xC2
0x96
。
使用有效的utf8对字符串进行编码是正确的解决方案。
我是MySQL DBA,不是PHP专家(尽管我的青铜PHP标签徽章),但显然PHP 7引入unicode codepoint escape literals所以你显然可以使用"\u{a0}"
。