MySql存儲表情報錯的排查解決
前言
- 操作系統(tǒng):linux
- 數(shù)據(jù)庫版本: 8.0.27
- 查看版本命令:
mysql -uroot -p
登錄成功后就可以看到
問題
個人博客markdown插入標簽后報以下錯誤
報錯信息:Incorrect string value: '\\xF0\\x9F\\x98\\x82' for column 'content' at row 1
在網(wǎng)上查詢得知:在用mysql進行表情符號存儲時,會報錯,這是由于Emoji表情是4個字節(jié),而mysql的utf-8編碼最多是3個字節(jié),所以在進行表情符號插入的時候會插入不進去。那么此時應該通過修改mysql編碼為utf8mb4來解決該問題。
但是我在sql表創(chuàng)建時已經(jīng)想到了這一點并且相關(guān)字段也是utf8mb4,為什么還會報錯
排查解決
通過多方查詢和嘗試,發(fā)現(xiàn)只要修改mysql配置信息就可以解決問題
1.在linux下找到mysql的配置文件my.cnf
(window為my.ini),如果找不到可以直接查詢
$ find / -name my.cnf
2.在my.cnf
修改編輯
[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.重啟mysql服務
$ service mysqld restart
mysql變量配置擴展
1.character_set_client
主要用來設(shè)置客戶端使用的字符集。
2.character_set_connection
主要用來設(shè)置連接數(shù)據(jù)庫時的字符集,如果程序中沒有指明連接數(shù)據(jù)庫使用的字符集類型則按照這個字符集設(shè)置。
3.character_set_database
主要用來設(shè)置默認創(chuàng)建數(shù)據(jù)庫的編碼格式,如果在創(chuàng)建數(shù)據(jù)庫時沒有設(shè)置編碼格式,就按照這個格式設(shè)置。
4.character_set_filesystem
文件系統(tǒng)的編碼格式,把操作系統(tǒng)上的文件名轉(zhuǎn)化成此字符集,即把 character_set_client轉(zhuǎn)換character_set_filesystem, 默認binary是不做任何轉(zhuǎn)換的。
5.character_set_results
數(shù)據(jù)庫給客戶端返回時使用的編碼格式,如果沒有指明,使用服務器默認的編碼格式。
6.character_set_server
服務器安裝時指定的默認編碼格式,這個變量建議由系統(tǒng)自己管理,不要人為定義。
7.character_set_system
數(shù)據(jù)庫系統(tǒng)使用的編碼格式,這個值一直是utf8,不需要設(shè)置,它是為存儲系統(tǒng)元數(shù)據(jù)的編碼格式。
8.character_sets_dir
這個變量是字符集安裝的目錄。
補充
在實際開發(fā)中,我們應該提前約定好字符集,而不是后面隨意更改,隨意更改可能會影響到原有數(shù)據(jù)顯示問題;可以更改mysql默認配置,將其設(shè)為utf8mb4具體操作如下:
1、修改mysql配置文件(windows:my.ini;linux:my.cnf)
[client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] #character-set-server=utf8 這行注釋掉 character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_general_ci init_connect = 'SET NAMES utf8mb4'
2、重啟mysql
service mysql restart
3、查看是否修改成功
SHOW VARIABLES WHERE Variable_name LIKE 'character%' OR Variable_name LIKE 'collation%';
下圖紅框內(nèi)為utf8mb4信息即為修改成功
總結(jié)
到此這篇關(guān)于MySql存儲表情報錯排查解決的文章就介紹到這了,更多相關(guān)MySql存儲表情報錯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
sql語句escape查詢數(shù)據(jù)中含通配字符[ %用法詳解
這篇文章主要為大家介紹了sql語句escape查詢數(shù)據(jù)中含通配字符[ %用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08[MySQL binlog]mysql如何徹底解析Mixed日志格式的binlog
這篇文章主要介紹了mysql徹底解析Mixed日志格式的binlog,需要的朋友可以參考下2014-02-02