Mysqlは表情を格納することをサポートします

1778 ワード

今日、モバイル側は、サービス側が表情文字を格納できないと言い、エラーを与えました.
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x80\xF0\x9F...' for column 'content' at row 1
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1084)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4232)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4164)
....

調べてみると、表情に必要なutf 8 mb 4の文字セットが格納されていたが、元のフィールドの文字セットはutf 8にすぎず、次のフィールドを変更した
ALTER TABLE `question`   
  CHANGE `content` `content` VARCHAR(2500) CHARSET utf8mb4 COLLATE utf8mb4_general_ci NULL;

あるいは時計を作るときに注意しました
`content` VARCHAR(2500) CHARACTER SET utf8mb4 DEFAULT NULL,

もう一度やってみましたが、保存に成功しました.また、この文字セットはmysqlに要求があり、5.5.3以上が必要です.
----
update 2017-12-14
ソート・ルール、テーブル・エンコード・ルールの押し出し
ライブラリの表示
SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = "dbxx";
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
表の表示
SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA WHERE CCSA.collation_name = T.table_collation AND T.table_schema = "dbname"AND T.table_name = "tablename";
show table status from db_name;
列の表示
SELECT character_set_name FROM information_schema.`COLUMNS`
WHERE table_schema = "dbname"AND table_name = "tablename"AND column_name = "columnname";
show full columns from tablexx;
jdbcドライバはutf 8 mb 4の設定をサポートしていません.utf 8に設定するとutf 8 mb 4が自動的にサポートされます.最低バージョンは5.1.13です.
mysqlのutf 8は1~3バイトしかサポートされておらず、実際の意味でのutf-8は1~4をサポートできる