1. 程式人生 > 其它 >Sqoop報錯:Caused by: java.sql.BatchUpdateException: Incorrect string value: '\xF0\xA4\x8F\x81' 再見亂碼:5分鐘讀懂MySQL字符集設定 

Sqoop報錯:Caused by: java.sql.BatchUpdateException: Incorrect string value: '\xF0\xA4\x8F\x81' 再見亂碼:5分鐘讀懂MySQL字符集設定 

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檢視、修改字符集及Collation

再見亂碼:5分鐘讀懂MySQL字符集設定 

mysql存入表情符號emoji MYSQL: Caused by: java.sql.SQLException: Incorrect string value

sqoop匯入資料至mysql時,emoji表情無法匯入mysql問題解決