?
java.sql.SQLException:?Incorrect?string?value:?'\xF0\x9F\x92\x94'?for?colum?n?'name'?at?row?1?at?com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)? at?com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593)? at?com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525)? at?com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986)? at?com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)? at?com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)? at?com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662)? at?com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581)
?
當(dāng)報以上錯誤的時候,可能是java代碼中的字段與數(shù)據(jù)庫中的字段類型或者編碼不匹配,這種情況只要統(tǒng)一格式或者編碼就就可以了。
這里主要介紹emoji的圖像插入數(shù)據(jù)庫的錯誤以及解決方法
使用mysql數(shù)據(jù)庫的時候,如果字符集是UTF-8并且在java服務(wù)器上,當(dāng)存儲emoji表情的時候,會拋出以上異常(比如微信開發(fā)獲取用戶昵稱,有的用戶的昵稱用的是emoji的圖像)
這是由于字符集不支持的異常,因為utf-8編碼有可能是兩個,三個,四個字節(jié),其中Emoji表情是四個字節(jié),而mysql的utf-8編碼最多三個字節(jié),所以導(dǎo)致數(shù)據(jù)插不進(jìn)去。
解決方式:
一.從數(shù)據(jù)庫層面進(jìn)行解決(mysql支持utf8mb4的版本是5.5.3+,必須升級到較新版本)
? ? ?注意:
? ? ? (1.修改database,table,column字符集
ALTER?DATABASE?database_name?CHARACTER?SET?=?utf8mb4?COLLATE?=?utf8mb4_unicode_ci;ALTER?TABLE?table_name?CONVERT?TO?CHARACTER?SET?utf8mb4?COLLATE?utf8mb4_unicode_ci;ALTER?TABLE?table_name?CHANGE?column_name?VARCHAR(191)?CHARACTER?SET?utf8mb4?COLLATE?utf8mb4_unicode_ci;
? ? ? (2.修改mysql配置文件my.cnf(window為my.ini)
[client] default-character-set?=?utf8mb4 [mysql] default-character-set?=?utf8mb4 [mysqld] character-set-client-handshake?=?FALSE character-set-server?=?utf8mb4 collation-server?=?utf8mb4_unicode_ci init_connect='SET?NAMES?utf8mb4'
?
? ? ? ?(3.用的是java服務(wù)器,升級或者確保mysql connection版本高于5.1.13否則仍然不能試用utf8mb4
? ? ? ?(4.服務(wù)器端的db配置文件
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE jdbc.username=root jdbc.password=password
?
? ? 如果升級了mysql-connector,其中的characterEncoding=utf8可以自動被識別為utf8mb4(兼容原來的utf8),而
? ? autoReconnection(當(dāng)數(shù)據(jù)庫連接異常中斷時,是否自動重新連接?默認(rèn)為false)強烈建議配上,忽略這個屬性,可能導(dǎo)致緩存緣故 ,
? ? 沒有讀取到DB最新的配置,導(dǎo)致一直無法試用utf8mb4字符集;
二.從應(yīng)用層的方面進(jìn)行解決
? ? 在獲得數(shù)據(jù)之后往數(shù)據(jù)庫存之前先進(jìn)行編碼:?
URLEncoder.encode(nickName,?"utf-8");
?
? ? 當(dāng)從數(shù)據(jù)庫中取出準(zhǔn)備顯示的時候進(jìn)行解碼,?
URLDecoder.decode(nickname,?"utf-8");
? ? ? 從應(yīng)用層進(jìn)行解決的時候建議不要在對象getter,setter方法中直接編碼,因為放入對象的時候setter方法將nickname進(jìn)行編碼,當(dāng)插入數(shù)據(jù)庫的時候相當(dāng)于從對象中調(diào)用getter方法將你參考取出這就將之前setter編碼過的nickname又重新解碼了,等于未對Nickname進(jìn)行任何操作。依然會出現(xiàn)以上問題。
更多mysql保存emoji表情(微信開發(fā)用戶昵稱..)?相關(guān)文章請關(guān)注PHP中文網(wǎng)!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)
