2017-04-13 10 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で、0xC20xA0としてエンコード2バイト文字です。

同様に、コードポイント150(0x96)は、0xC20x96としてエンコードされます。

有効なutf8で文字列をエンコードすることが正しい解決方法です。

私はMySQLのDBAですが、PHPの専門家ではありませんが、PHP 7ではunicode codepoint escape literalsが導入されているようですので、明らかに"\u{a0}"を使用することができます。

+1

テキストをutf8に切り替えることをお勧めします。しかし、できない場合は、接続を代わりに 'latin1'に切り替えてください。 –

関連する問題