テーブル構造に問題があります:
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秒
これを解決するには?
前もって感謝します。
問題はクライアントにあるようです。
クライアントがMySQLサーバーに接続するとき、クライアントのバイトがutf8mb4
であることを通知する必要があります。これは、いくつかの方法で実行できます。
SET NAMES utf8mb4
。\U+1F600
は、その絵文字のUnicode表現です。\xF0\x9F\x98\x80
は同等の16進数です。F09F9880
は、16進数のUTF-8(utf8mb4)です。
Unicode表現は避けてください。
これは、絵文字が正しい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'