Sqoop報錯:Caused by: java.sql.BatchUpdateException: Incorrect string value: '\xF0\xA4\x8F\x81' 再見亂碼:5分鐘讀懂MySQL字符集設定
阿新 • • 發佈:2022-04-22
sqoop從hive匯出到mysql報錯如下:
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\xA4\x8F\x81' for column 'role_name' at row 68 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2487) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858) at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079) at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1756) ... 3 more
發現欄位中有emoji表情無法匯入mysql問題解決;
在使用MySQL的過程中,可能會出現初始設計使用的字符集或Collation不符合當前需求的情況。如使用utf8的表(MySQL中的utf8即utf8mb3)要支援emoji,
而utf8mb3不支援emoji(emoji需要4個位元組,而utf8mb3最長只支援3個位元組),所以需要將字符集修改為utf8mb4。(更改後需要重啟資料庫,待測。。。)
建表示例如下:
mysql> SHOW CREATE TABLE test_table; +------------+----------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +------------+----------------------------------------------------------------------------------------------------------------+ | test_table | CREATE TABLE `test_table` ( `id` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 | +------------+----------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
如果還是不能解決,則需要檢視sqoop中的jar包是否支援utf8mb4編碼符。 若是不支援,則需要更改jar包。
注;mysql的版本不能太低,低於5.5.3的版本不支援utf8mb4編碼。
檢視mysql是否支援(maxlen表示儲存的最大位元組數):
mysql存入表情符號emoji MYSQL: Caused by: java.sql.SQLException: Incorrect string value
sqoop匯入資料至mysql時,emoji表情無法匯入mysql問題解決