MySQL中的字符集有兩個級別概念,分別是服務(wù)器級別和客戶端級別。
1. 服務(wù)器級別
服務(wù)器字符集指的是服務(wù)器用來存儲和處理數(shù)據(jù)的字符集。在MySQL中,可以在啟動MySQL服務(wù)的時候指定服務(wù)器字符集,也可以在配置文件中進行設(shè)置。服務(wù)器級別的字符集設(shè)定主要影響以下內(nèi)容:
- 存儲字符數(shù)據(jù)時所采用的字符編碼方式;
- SQL語句中的字符串常量的編碼方式;
- 數(shù)據(jù)庫中表、列名的編碼方式。
2. 客戶端級別
客戶端字符集指的是客戶端用來編碼和解碼數(shù)據(jù)的字符集。在MySQL中,客戶端可以連接多個服務(wù)器,每個服務(wù)器都可以擁有不同的字符集??蛻舳思墑e的字符集設(shè)定主要影響以下內(nèi)容:
- 連接服務(wù)器時采用的字符編碼方式;
- SQL語句中的字符串常量的編碼方式;
- 查詢結(jié)果返回的字符串的編碼方式。
因此,如果服務(wù)器和客戶端的字符集不同,就可能導致出現(xiàn)亂碼或數(shù)據(jù)不能正常存儲和讀取等問題。
在實際應用中,我們需要根據(jù)數(shù)據(jù)庫設(shè)計和應用場景的需要來選擇合適的字符集,并注意設(shè)置服務(wù)器和客戶端的字符集,目的是確保所儲存和查詢的數(shù)據(jù)的正確無誤。
問題解析
測試環(huán)境的數(shù)據(jù)庫中有些數(shù)據(jù)庫表的CHARSET=utf8,還有些是CHARSET=utf8mb4。我們期望修改數(shù)據(jù)庫表的CHARSET=uft8mb4。于是執(zhí)行下面語句:
alter table <表名> character set utf8mb4;
再次查看建表語句時發(fā)現(xiàn),表的DEFAULT CHARSET修改成功,但是字段的CHARSET還是保留原來的utf8。如果想修改表、字段的CHARSET時,應該執(zhí)行下面語句:
ALTER TABLE <表名> CONVERT TO CHARACTER SET utf8mb4;
避坑:請大家一定要使用正確的數(shù)據(jù)庫表字符集修改語句。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至2705686032@qq.com 舉報,一經(jīng)查實,本站將立刻刪除。原文轉(zhuǎn)載: 原文出處: