为什么我不能将某些字符插入MySQL表格?

时间:2017-04-13 02:16:40

标签: mysql special-characters collation

我正在尝试进行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。

那么为什么我在这个设置中遇到了这个错误,最好的解决方法是什么?

1 个答案:

答案 0 :(得分:1)

\x80\xFF之间没有有效的utf8编码,因此错误是正确的。

代码点160(0xA0)(也称为&#160;&nbsp;),在utf8中,是一个2字节字符,编码为0xC2 0xA0。< / p>

同样,代码点150(0x96)编码为0xC2 0x96

使用有效的utf8对字符串进行编码是正确的解决方案。

我是MySQL DBA,不是PHP专家(尽管我的青铜PHP标签徽章),但显然PHP 7引入unicode codepoint escape literals所以你显然可以使用"\u{a0}"