天天看點

最簡單,最快方式 Mysql相容 emoji正文根本問題所在所在,

Mysql -> mybatis -> spring boot -> java

序:

最近寫一個類似成人商城的項目 ,

寫了一半的時候,發現使用者如果通過蘋果手機發送EMOJI的表情會無法插入資料庫:

=== Error updating database. Cause: java.sql.SQLException: Incorrect string value: 'xF0x9Fx92x9ExE5x80...' for column 'comment' at row 1

=== The error may involve cc.mb18.starshow.dbdto.TPageCoreDAO.intoComment-Inline

=== The error occurred while setting parameters

=== SQL: INSERT INTO

t_page_comment

(

useruuid

,

username

faceurl

comment

pageuuid

createDatetime

) VALUES (?,?, ?, ?, ?, ?)

=== Cause: java.sql.SQLException: Incorrect string value: 'xF0x9Fx92x9ExE5x80...' for column 'comment' at row 1

; uncategorized SQLException; SQL state [HY000]; error code [1366]; Incorrect string value: 'xF0x9Fx92x9ExE5x80...' for column 'comment' at row 1; nested exception is java.sql.SQLException: Incorrect string value: 'xF0x9Fx92x9ExE5x80...' for column 'comment' at row 1`

類似的報錯.

然後網上找了一堆 需要改資料庫配置的方案,但是看完以後,我就否決了這個實施的方法,雖然項目沒有上線,還在開發階段,但是,動辄修改資料庫配置檔案這種操作,作為一個有 自我DBA限制的人,我怎麼會這樣做.

正文

平時管理資料庫的時候 都是使用Navicat for Mysql的

是以 以12版本為例

根據文章的學習,雖然不能按照修改資料庫配置的操作 但是卻找到了

根本問題所在所在,

修改資料庫承接字元集,但是修改可以設定範圍,

資料庫級修改 還是 表級修改 還是字段級修改

我最後選擇了字段級修改 附圖如下

從 圖1 變為 圖2 (下圖1)

最簡單,最快方式 Mysql相容 emoji正文根本問題所在所在,

從 圖1 變為 圖2 (下圖2)

最簡單,最快方式 Mysql相容 emoji正文根本問題所在所在,

打開資料庫 在表上 右鍵 設計表 然後選擇字段 就會出現圖中設定

`ALTER TABLE t_page_comment

MODIFY COLUMN comment varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL AFTER sername;`

因為我資料庫語句不是很熟 是以我隻是把軟體的代碼截取出來給大家參考

至此 mysql 支援 emoji的操作就完成了

另外 我為了保險起見 在

@Update("set names utf8mb4")

void setCharsetToUtf8mb4();

我在Dao裡面做了一個設定目前SESSION的字元集的操作,感覺沒用,也不想去證明了

最後附上校訓

理論結合實踐