java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x98",
1695 ワード
データベース同期binlogで次のエラーが発生しました.
理由:
エラープロンプトの文字0 xF 0 x 9 F 0 x 98 0 x 84は、UTF-8符号化フォーマットの4バイト符号化(UTF-8符号化仕様)に対応します.普通の漢字は普通3バイトを超えませんが、なぜ4バイトが出てくるのでしょうか.実際にはスマートフォン入力方式の表情に対応しています.どうして間違ったことを報告したの?mysqlのutf-8は本当の意味でのutf-8ではないため、1~3バイトの長さのutf-8符号化しか記憶できず、4バイトを記憶したい場合はutf 8 mb 4タイプを使用する必要があります.いいえutf 8 mb 4タイプを使用するには、まずMysqlバージョンがMySQL 5.5.5.3以下であることを保証します.
ソリューション:
MySQLを5.5.3以上にアップグレードし、ターゲットライブラリのデータ型符号化を対応するデータ型に変更してutf 8 mb 4型に変更し、リンク符号化をutf 8 mb 4に設定します.
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x98",...' for column 'content' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922)
理由:
エラープロンプトの文字0 xF 0 x 9 F 0 x 98 0 x 84は、UTF-8符号化フォーマットの4バイト符号化(UTF-8符号化仕様)に対応します.普通の漢字は普通3バイトを超えませんが、なぜ4バイトが出てくるのでしょうか.実際にはスマートフォン入力方式の表情に対応しています.どうして間違ったことを報告したの?mysqlのutf-8は本当の意味でのutf-8ではないため、1~3バイトの長さのutf-8符号化しか記憶できず、4バイトを記憶したい場合はutf 8 mb 4タイプを使用する必要があります.いいえutf 8 mb 4タイプを使用するには、まずMysqlバージョンがMySQL 5.5.5.3以下であることを保証します.
ソリューション:
MySQLを5.5.3以上にアップグレードし、ターゲットライブラリのデータ型符号化を対応するデータ型に変更してutf 8 mb 4型に変更し、リンク符号化をutf 8 mb 4に設定します.