2017-04-13 28 views
0

我試圖做一個MySQL插入,我收到錯誤消息是這樣的:爲什麼我無法將某些字符插入到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

\x80\xFF之間沒有有效的utf8編碼,所以錯誤是正確的。

碼點160(0XA0)(也稱爲  ),在UTF8,是2個字節的字符,編碼爲0xC20xA0

類似地,代碼點150(0x96)被編碼爲0xC20x96

使用有效的utf8編碼字符串是正確的解決方案。

我是一名MySQL DBA,不是PHP專家(儘管我的青銅PHP標記徽章),但顯然PHP 7引入unicode codepoint escape literals,所以你可以顯然使用"\u{a0}"

+1

將文本切換到utf8是首選。但是,如果你不能,那麼將連接切換到'latin1'。 –

相關問題