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)

從 圖1 變為 圖2 (下圖2)
打開資料庫 在表上 右鍵 設計表 然後選擇字段 就會出現圖中設定
`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的字元集的操作,感覺沒用,也不想去證明了
最後附上校訓