MySQL資料庫字元集

来源:https://www.cnblogs.com/yanyanqaq/archive/2020/06/19/13164334.html
-Advertisement-
Play Games

1.MySQL資料庫字元集知識 1.1.什麼是字元集 電腦只能識別0和1這樣的二進位數字,無論是處理電腦程式,還是進行科學運算,最終都要轉換為二進位數據來完成操作;例如,我們輸入一個數字“8”,電腦會將其識別成二進位數字“1000”。 但是,電腦要處理的數據不僅僅是數字,還會有字母,為了處理 ...


目錄

1.MySQL資料庫字元集知識

1.1.什麼是字元集

電腦只能識別0和1這樣的二進位數字,無論是處理電腦程式,還是進行科學運算,最終都要轉換為二進位數據來完成操作;例如,我們輸入一個數字“8”,電腦會將其識別成二進位數字“1000”。

但是,電腦要處理的數據不僅僅是數字,還會有字母,為了處理字母,就產生了ASCII碼系統。英文字母共有26種變化,算上大小寫也才52種變化,即使加上特殊的英文標點符號、特殊字元,變化也不多,而用8位二進位數字可以表達256種字元,也就是說,8位二進位數字就足以勝任英文字元的處理工作了。

但是,各個國家的語言文字大多不同,不僅僅是數字、字母以及特殊字元。例如中國的漢字數量就有數萬之多,常用的有幾千個。這時,使用ASCII編碼就會無法滿足需求,於是就有了GBK、BIG5、GB2312這類的字元編碼,採用16位二進位數可以表達65535個漢字,這對於常用的漢字使用來說就足夠用了。

現在,在簡體中文環境下,常用的編碼除了GB2312和GB18030之外,還會用到UTF-8。GBK是專門用作中文的字元編碼規範,UTF是通用轉換格式的縮寫,又可稱為萬國碼,理論上來說,UTF可以表達各種文字的編碼格式。

字元編碼其實就是將人類使用的英文字母、漢字、特殊符號等信息,通過預先設定的轉換規則,將其轉換為電腦可以識別的二進位數字的一種編碼方式。

1.2.MySQL資料庫字元集

字元集其實就是一套文字元號及編碼,對應的文字及編碼,可以將人類可以識別的內容與電腦可以識別的信息進行互相轉換。

一個字母表使用了四個字母:A、B、a、b。每個字母賦予一個數值:A=0,B=1,a=2,b=3。字母A是一個符號,數字0是A的編碼,這四個字母和它們的編碼組合在一起就可以稱為一個字元集。

MySQL資料庫的字元集不僅包括字元集(CHARACTER),還包括校對規則(COLLATION)。其中,校對規則的作用是定義比較字元串的方式。

假設比較兩個字元串的值:A和B。最簡單的方法是查找編碼:A為0,B為1。因為0小於1,所以可以說A小於B。所做的僅僅是在字元集上應用了一個校對規則。校對規則是一套規則,作用是對編碼進行比較。

1.3.常用字元集介紹與選擇建議

1.3.1.常用字元集介紹

在操作系統以及各類軟體中都有字元集,MySQL也不例外。

常用字元集知識:

常用字元集 最大長度 說明
GB2312 2位元組 早期制定的標準,不推薦使用
GB18030 4位元組 受一些系統支持,資料庫支持的不多,不推薦使用
GBK 2位元組 不是國際標準,對中文環境支持的很好,不推薦使用
UTF8 3位元組 中英文混合的環境,建議使用此字元集,目前使用的比較多,互聯網場景的Linux/UNIX及MySQL都支持UTF8,重點推薦
latin1 1位元組 MySQL系統的預設字元集,不推薦使用
utf8mb4 4位元組 utf8mb4字元集主要從5.5開始被支持,相容UTF8,且比UTF8能表示更多的字元,正在成為未來趨勢字元集,重點推薦

1.3.2.MySQL如何選擇合適的字元集

1、如果存儲的是各種各樣的語言文字,則可以選擇UTF8,這是目前國內應用最為廣泛的字元集,沒有之一。
2、如果只需要支持中文,並且數據量很大,此外,還包含了大量的運算,則可以選擇GBK,理論上其可以獲得更高的性能,但不推薦使用。
3、對於新型的互聯網以及移動互聯網的混合業務,推薦使用utf8mb4字元集替代UTF8字元集。總之,如果沒有極特別的需求,請選擇UTF8或utf8mb4作為資料庫的字元集。
4、如果使用開源程式,則可以根據上述說明進行選擇,如果是公司開發人員自己開發產品,那麼選擇權就在開發人員手裡,DBA只能提供建議。

1.3.3.查看MySQL資料庫字元集和校對規則

查看當前MySQL系統支持的字元集

MySQL資料庫支持的字元集有很多種,通過命令可以查看當前MySQL支持的字元集:

show character set;

2.MySQL資料庫字元集配置

設置MySQL的字元集需要考慮到很多個層次,將這些需要考慮的層次大概分為7個級別。

1、操作系統級別。
2、操作系統客戶端級別(SSH)。
3、MySQL實例級別。
4、資料庫中的庫級別。
5、表級別(含欄位級別)。
6、MySQL客戶端級別(連接及返回結果)。
7、程式代碼級別。

2.1.Linux系統服務端字元集設置

很多人在使用MySQL時經常會被中文亂碼所困擾,其中Linux系統和連接Linux系統客戶端的字元集設置可能就是問題之一,對此,要儘量將系統的字元集和系統中軟體的字元集進行統一,設置和生效的方法:

vim /etc/sysconfig/il8n  #配置到配置文件里可以永久生效。
LANG="zh_CN.UTF-8"  #LANG為系統字元集環境變數,設置為中文UTF8.
SYSFONT="latarcyrheb-sun16"

source /etc/sysconfig/il8n  #使得修改生效。
echo $LANG  #檢查生效情況。

在Linux伺服器里使用MySQL登錄到資料庫,要註意系統字元集的使用。

2.2.Linux系統客戶端字元集設置

常見的連接Linux的客戶端為SecureCRT、XShell。

SecureCRT:會話選項-終端-外觀-字元編碼
XShell:地球-下拉箭頭

2.3.MySQL服務端資料庫字元集設置

設置伺服器的字元集有很多種方法,常用的三種方法:

方法一:在編譯安裝MySQL的時候指定伺服器端字元集。

cmake .
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \

方法二:編譯時沒指定字元集,或者指定了不合適的字元集,也還可以在安裝後修改配置文件。

[mysqld]
character-set-server=utf8

方法三:可以在啟動資料庫時,增加選項指定的字元集。

mysqld --character-set-server=utf8

2.4.MySQL資料庫中的庫的字元集設置

在MySQL中,庫的字元集設置一般是在建庫的時候指定的,如果在建庫的時候未指定,則庫的字元集與MySQL資料庫實例的字元集一致。可通過命令查看當前實例的字元集:

show variables like 'character_set_database%';
show variables like 'collation_database%';

創建資料庫test,並查看建庫的字元集:

create database test;
show create database test\G

在編譯MySQL時,若指定了正確的字元集或者修改配置文件調整過的伺服器的字元集,那麼,在以後建庫的時候就可以直接執行簡化的命令“create database test;”。

也可以在建庫的時候指定字元集和校對規則來建庫;

create database oldboy default character set utf8 default collate = utf8_general_ci;

"CHARACTER SET UTF8"即為資料庫字元集,而“utf8_general_ci”則為校對規則。

2.5.MySQL資料庫表的字元集設置

建表的字元集與庫的字元集應一致,設置表字元集的命令:

use test;
create table test(id int(4));
show create table test\G;

2.6.MySQL資料庫客戶端字元集設置

對MySQL資料庫客戶端字元集進行設置,對於防止MySQL更新時,出現中文亂碼有極大的影響,設置方法也有幾種。

方法一:臨時生效單條命令法。

set names utf8;

“set names utf8”也可以用三個命令來替代。
set character_set_client = utf8;
set character_set_results = utf8;
set character_set_connection = utf8;

方法二:登錄資料庫時指定字元集。

mysql --default-character-set=utf8;

方法三:通過修改my.cnf實現修改MySQL客戶端的字元集,配置方法。

[client]
default-character-set=utf8

人工登錄資料庫執行“set names UTF8”,以及使用MySQL命令指定字元集登錄操作,或者更改my.cnf配置文件客戶端模塊的參數,來實現更改客戶端字元集,都是改變了MySQL客戶端的client、connection、results3個參數的字元集。

3.防止資料庫的中文顯示亂碼

管理員在配置MySQL資料庫字元集時,需要儘可能地確保7大項字元集統一,對於管理員來說,查看資料庫字元集的基本方法:

show variables like 'character_set%';
character_set_client  #客戶端字元集
character_set_connection  #客戶端連接字元集
character_set_database  #資料庫字元集,配置文件時指定或建庫建表時指定
character_set_filesystem  #文件系統字元集
character_set_results  #客戶端返回結果字元集
character_set_server  #伺服器字元集,配置文件時指定或建庫建表時指定
character_set_system  #系統字元集

更改Linux系統字元集變數之後,可以查看MySQL中字元集的變化。

徹底防止MySQL資料庫內的數據中文亂碼方法

字元集的不一致是資料庫亂碼的罪魁禍首,要想避免MySQL資料庫內的數據中文亂碼方法,就要遵循7大項字元集設置規則,即Linux系統服務端與Linux系統客戶端字元集、MySQL服務端資料庫實例與MySQL資料庫客戶端字元集、MySQL資料庫中的庫和表的字元集、程式代碼的字元集要一致。如果是利用文件還原數據,還要註意文件的編碼問題。

4.更改MySQL資料庫庫表的字元集

4.1.更改庫的字元集

管理員可以使用alter命令對資料庫的字元集進行更改:

show create database oldboy\G
alter database oldboy character set latin1 collate = latin1_swedish_ci;
show create database oldboy\G
alter database oldboy character set utf8 collate utf8_general_ci;
show create database oldboy\G

4.2.更改表的字元集

管理員也可以使用alter命令對資料庫的表的字元集進行更改:

use test;
show create table t1\G
alter table t1 character set latin1;
show create table t1\G

4.3.生產環境更改資料庫(含數據)字元集的方法

對於已經包含了數據的庫表,若要對字元集進行調整,就需要將數據先導出,然後更改資料庫環境,更改建庫和表的字元集之後,重新導入數據,這樣才能實現相應的調整。

1、確保資料庫不要更新,然後導出所有數據為SQL的文件。
2、針對導出的數據進行字元集替換(替換表和庫),例如把GBK改為UTF8。
3、修改my.cnf配置文件,更改MySQL客戶端及服務端的字元集,重啟生效。
4、導入更改過新字元集的庫表的數據,包括表結構語句,然後提供服務。
5、將操作系統、SSH客戶端,以及程式更改為對應的新字元集。

更改字元集時,要將小的字元集集合更改為大的字元集集合,不然可能會丟失數據。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 用docker-machine創建虛擬主機來對節點主機管理時,我們給定虛擬主機的名稱docker-machine會把該名稱當作主機名,把節點主機的主機名更改為我們指定的名稱;從上面的信息可以看到docker-node01這台主機上有nginx鏡像和n1容器;這說明我們剛纔的操作都是發送給docke... ...
  • 雲:雲和本地是相對的,傳統的應用跑在本地伺服器上,現在流行的應用跑在雲端;IaaS,PaaS,SaaS; 雲原生:Cloud Native, 原生表示土生土長的意思,我們在開始設計應用的時候,就考慮到應用將來是運行在雲環境中的;要充分利用雲資源的優點:彈性和分散式; 雲原生 = 微服務 + DevO ...
  • 花生殼phtunnel嵌入Openwrt 詳細介紹如何將phtunnel封裝成一個openwrt標準組件,並編譯到自己的openwrt固件中。 phtunnel組件製作下載 下載自己的編譯平臺的二進位phtunnel文件是第一步要做的,我們可以到oray的官方github網站進行下載,根據自己的型號 ...
  • yum倉庫管理 yum-config-manager 簡介 # yum 主要功能是更方便的添加/刪除/更新RPM 包,自動解決包的倚賴性問題,便於管理大量系統的更新問題。 # yum 可以同時配置多個資源庫(Repository),簡潔的配置文件(/etc/yum.conf),自動解決增加或刪除 在 ...
  • rpm部分命令解讀 rpm RedHat Package Manger 打包及安裝工具 rpm參數列表 rpm -a rpm -q < rpm package name> 解讀:查詢一個包是否被安裝 rpm -qa rpm -qa <package name> -q 使用詢問模式(query) -a ...
  • Git 是用來做啥的?想必碼農朋友都知道,Git 是版本控制軟體,是軟體開發過程中團隊協作不可或缺的軟體。 但是,作為版本控制軟體的 Git ,能跟聊天工具扯上關係嗎?這二者似乎毫無關係,但腦洞大開的外國朋友 Ephi Gabay 就開發了一個 GIC ,活生生將 Git 改造成了一個聊天工具,有了 ...
  • 前言 Linux命令並不可怕,只要熟悉日常的操作命令即可,其他不熟悉的命令,需要用到的時候可以查閱資料,熟能生巧。 Linux常用操作命令 命令的基本格式 命令的提示符 [root@localhost ~]# []:這是提示符的分隔符號,沒有特殊含義。 root:顯示的是當前的登錄用戶。 @:分隔符 ...
  • 1.MySQL引擎概述 1.1.什麼是存儲引擎? 資料庫表裡的數據存儲在資料庫里及磁碟上,它跟視頻格式及存儲磁碟文件系統格式的特征類似,也有很多存儲方式。 但是,對於用戶和應用程式來說,同樣一張表的數據,無論採用什麼引擎來存儲,用戶看到的數據都是一樣的。對於不同的引擎存取,引擎功能、占用的空間大小、 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...