web-dev-qa-db-ja.com

INSERTはエラーコード1366を返します。列の文字列値が正しくありません: '\ xF0 \ x9F \ x98 \ x80'

テーブル構造に問題があります:

My_Table_Name1

 CREATE TABLE `My_Table_Name1`(
` Twitter_id_str` varchar(255)COLLATE utf8mb4_unicode_ci DEFAULT NULL、
 `Twitter_screen_name` varchar(512)COLLATE utf8mb4_unicode_ci DEFAULT NULL、[.____一意キー `Twitter_id_str`(` Twitter_id_str`)
)ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci 

データベースについても、同じ文字セットと照合順序があります。

CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

このテーブルに絵文字を挿入しようとしています:

insert into My_Table_Name1 values("2","????") 

ただし、エラーが発生します。

エラーコード:1366。不正な文字列値:行1の列 'Twitter_screen_name'の '\ xF0\x9F\x98\x80' 0.00027秒

これを解決するには?

前もって感謝します。

3
RAJ KASHWAN

問題はクライアントにあるようです。

クライアントがMySQLサーバーに接続するとき、クライアントのバイトがutf8mb4であることを通知する必要があります。これは、いくつかの方法で実行できます。

  • 接続パラメータ(クライアント依存)。
  • SET NAMES utf8mb4

\U+1F600は、その絵文字のUnicode表現です。
\xF0\x9F\x98\x80は同等の16進数です。
F09F9880は、16進数のUTF-8(utf8mb4)です。

Unicode表現は避けてください。

3
Rick James

これは、絵文字が正しいUnicodeに変換されないmysql-workbench(FedoraおよびMySQL 5.7(CentOS)のバージョン6.3.9でテスト済み)の問題のようです。

コマンドラインmysqlクライアントでは、絵文字を貼り付けるとコードに変換されるため、クエリ

INSERT INTO My_Table_Name1 values("2","????"); 

になる:

INSERT INTO My_Table_Name1 values("4","\U+1F600");

これは正常に動作します。

ただし、mysql-workbenchでは、絵文字を貼り付けても変換されず、クエリ結果は次のようになります。

エラーコード:1366。不正な文字列値:行1の列 'Twitter_screen_name'の '\ xF0\x9F\x98\x80'

1
dbdemon