MySql存儲(chǔ)表情報(bào)錯(cuò)的排查解決
前言
- 操作系統(tǒng):linux
- 數(shù)據(jù)庫(kù)版本: 8.0.27
- 查看版本命令:
mysql -uroot -p
登錄成功后就可以看到
問(wèn)題
個(gè)人博客markdown插入標(biāo)簽后報(bào)以下錯(cuò)誤
報(bào)錯(cuò)信息:Incorrect string value: '\\xF0\\x9F\\x98\\x82' for column 'content' at row 1
在網(wǎng)上查詢得知:在用mysql進(jìn)行表情符號(hào)存儲(chǔ)時(shí),會(huì)報(bào)錯(cuò),這是由于Emoji表情是4個(gè)字節(jié),而mysql的utf-8編碼最多是3個(gè)字節(jié),所以在進(jìn)行表情符號(hào)插入的時(shí)候會(huì)插入不進(jìn)去。那么此時(shí)應(yīng)該通過(guò)修改mysql編碼為utf8mb4來(lái)解決該問(wèn)題。
但是我在sql表創(chuàng)建時(shí)已經(jīng)想到了這一點(diǎn)并且相關(guān)字段也是utf8mb4,為什么還會(huì)報(bào)錯(cuò)
排查解決
通過(guò)多方查詢和嘗試,發(fā)現(xiàn)只要修改mysql配置信息就可以解決問(wèn)題
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服務(wù)
$ service mysqld restart
mysql變量配置擴(kuò)展
1.character_set_client
主要用來(lái)設(shè)置客戶端使用的字符集。
2.character_set_connection
主要用來(lái)設(shè)置連接數(shù)據(jù)庫(kù)時(shí)的字符集,如果程序中沒(méi)有指明連接數(shù)據(jù)庫(kù)使用的字符集類型則按照這個(gè)字符集設(shè)置。
3.character_set_database
主要用來(lái)設(shè)置默認(rèn)創(chuàng)建數(shù)據(jù)庫(kù)的編碼格式,如果在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)沒(méi)有設(shè)置編碼格式,就按照這個(gè)格式設(shè)置。
4.character_set_filesystem
文件系統(tǒng)的編碼格式,把操作系統(tǒng)上的文件名轉(zhuǎn)化成此字符集,即把 character_set_client轉(zhuǎn)換character_set_filesystem, 默認(rèn)binary是不做任何轉(zhuǎn)換的。
5.character_set_results
數(shù)據(jù)庫(kù)給客戶端返回時(shí)使用的編碼格式,如果沒(méi)有指明,使用服務(wù)器默認(rèn)的編碼格式。
6.character_set_server
服務(wù)器安裝時(shí)指定的默認(rèn)編碼格式,這個(gè)變量建議由系統(tǒng)自己管理,不要人為定義。
7.character_set_system
數(shù)據(jù)庫(kù)系統(tǒng)使用的編碼格式,這個(gè)值一直是utf8,不需要設(shè)置,它是為存儲(chǔ)系統(tǒng)元數(shù)據(jù)的編碼格式。
8.character_sets_dir
這個(gè)變量是字符集安裝的目錄。
補(bǔ)充
在實(shí)際開(kāi)發(fā)中,我們應(yīng)該提前約定好字符集,而不是后面隨意更改,隨意更改可能會(huì)影響到原有數(shù)據(jù)顯示問(wèn)題;可以更改mysql默認(rèn)配置,將其設(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存儲(chǔ)表情報(bào)錯(cuò)排查解決的文章就介紹到這了,更多相關(guān)MySql存儲(chǔ)表情報(bào)錯(cuò)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Mysql數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程基本語(yǔ)法講解
- MySQL存儲(chǔ)過(guò)程輸入?yún)?shù)(in),輸出參數(shù)(out),輸入輸出參數(shù)(inout)
- MySQL一次性創(chuàng)建表格存儲(chǔ)過(guò)程實(shí)戰(zhàn)
- MySql存儲(chǔ)過(guò)程循環(huán)的使用分析詳解
- MySQL中存儲(chǔ)過(guò)程的詳細(xì)詳解
- MySQL數(shù)據(jù)庫(kù)之存儲(chǔ)過(guò)程?procedure
- Mysql怎么存儲(chǔ)json格式數(shù)據(jù)詳解
- MySQL存儲(chǔ)過(guò)程及語(yǔ)法詳解
相關(guān)文章
sql語(yǔ)句escape查詢數(shù)據(jù)中含通配字符[ %用法詳解
這篇文章主要為大家介紹了sql語(yǔ)句escape查詢數(shù)據(jù)中含通配字符[ %用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08[MySQL binlog]mysql如何徹底解析Mixed日志格式的binlog
這篇文章主要介紹了mysql徹底解析Mixed日志格式的binlog,需要的朋友可以參考下2014-02-02MySQL觸發(fā)器的使用場(chǎng)景及方法實(shí)例
這篇文章主要給大家介紹了關(guān)于MySQL觸發(fā)器的使用場(chǎng)景及方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12