數據庫9:數據庫字符編碼調整與校隊(排序)規則

一.常用字符編碼

1.ASCII編碼

用一個字節表示一個字符

2.ANSI編碼

每個國家為了顯示本國的語言而對ASCII碼進行了拓展

用兩個字節表示一個漢字,中國的ANSI編碼是GB2312編碼(簡體),日本的ANSI編碼是JIS編碼,臺灣的ANSI編碼是BIG5編碼(繁體)

3.GBK編碼

對GB2312進行的擴展,用來顯示罕見的、古漢語的漢字。

4.Unicode編碼

用四字節表示一個字符

5.UTF-8編碼

國際通用字符庫,涵蓋了地球上人類的所有的語言文字

可以識別字符,如果字符是簡單的字母,就用一字節存儲,如果是復雜的生僻字,就用四字節存儲

utf8不支持表情符號emoji,utf8mb4支持表情符號emoji

二.字符編碼全局設置

1.原因

用戶在向網站服務端進行數據信息存儲時,由于數據庫服務系統默認的字符編碼設置問題,可能會導致出現字符亂碼,為了能更準確地識別數據庫中的中文字符信息,需要對數據庫服務配置文件中的默認字符編碼設置進行調整

2.顯示所有可用的字符集

show charset;

3.查詢 MySQL 中所有包含“char”關鍵字的系統變量(通常是與字符集和字符編碼相關的系統變量)

show variables like '%char%';

注意這些是否是一樣的

4.在/etc目錄將數據庫服務配置文件進行備份

cp my.cnf my.cnf.bak

5.修改配置文件

vim /etc/my.cnf

在[mysqld]區域寫入

character-set-server=gbk

6.重啟以重新加載配置文件

?systemctl restart mysqld

7.再次查看

show variables like '%char%';

8.查看新創建的數據庫的字符集

show databases;
create database yong65535;
show create database yong65535;

9.編輯修改客戶配置文件參數信息

client.cnf是客戶端配置文件信息

vim /etc/my.cnf

在[client]區域內寫入

default-character-set=gbk

10.重啟和查看

systemctl restart mysqld
show variables like '%char%';

show variables like 'character_set_%';

11.最后修改回去

vim /etc/my.cnf

三.字符編碼局部設置

1.指定某一數據庫的字符集

在創建庫時指定字符集就行了

如創建qwq數據庫,指定字符集為gbk

create database qwq charset gbk;

查看該數據庫信息

show create database qwq;

2.指定數據庫中某一個表的字符集

在創建表時指定字符集就可以了

先進入qwq數據庫

use qwq;

3.查看新創建的表優先使用默認全局的字符集還是優先使用這一數據庫的字符集

創建t1表,該表有表項id,數據類型為int

create table t1(id int);
查t1表信息

show create table t1;
?

由此可見優先繼承的是數據庫的字符集

4.創建t2表,該表有表項id類型為int,且指定使用的字符集為utf8mb4;

create table t2(id int) charset utf8mb4;

查看表t2內容
show create table t2;

四.參數信息、解釋說明及其關系圖

1.參數信息及其解釋說明

character_set_client:用來設置客戶端默認使用的字符集

character_set_connection:用來設置連接數據庫時默認的字符集

character_set_database:用來設置創建數據庫默認的編碼格式

character_set_filesystem:文件系統的編碼格式,把操作系統上的文件名轉化成此字符集,即把character_set_client轉換character_set_filesystem,默認binary是不做任何轉換

character_set_results:數據庫給客戶端返回時默認使用的編碼格式

character_set_server:服務器安裝時指定的默認編碼格式,這個變量建議由系統管理,不要認為定義

character_set_system:數據庫系統使用的編碼格式,這個值一直是utf8,不需要設置,它是存儲系統元數據的編碼格式

character_sets_dir:這個變量是字符集安裝的目錄

2.關系圖

舉例說明:

SET character_set_client = gbk;
SET character_set_connection = utf8mb4;
SET character_set_results = latin1;

內部操作字符集=utf8mb4

過程:

客戶端字符串(中文)?
? ?--用gbk編碼--> 字節流(gbk)
? ? ? ?↓
服務器用character_set_client=gbk解碼成字符
? ? ? ?↓
服務器用character_set_connection=utf8mb4編碼字符用于SQL執行
? ? ? ?↓
插入時轉為表字符集utf8mb4編碼寫入磁盤
? ? ? ?↓
查詢時從磁盤取utf8mb4字節流
? ? ? ?↓
轉成字符序列
? ? ? ?↓
根據character_set_results=latin1編碼成latin1字節流返回客戶端
? ? ? ?↓
客戶端用latin1解碼成字符顯示

3.注意事項

客戶端字符集設置要和服務器對應,避免字符集不匹配導致亂碼,一般建議客戶端、連接、結果、表字段都統一用utf8mb4,以減少字符集轉換復雜度和亂碼風險

五.編碼排序(校對)規則

根據設置的排序規則不同,查詢信息時,影像數據信息的查詢輸出和排序效果

1.所有已用的字符排序規則

?show collation;

2.排序規則后綴及其解釋

后綴含義及解釋
_ciCase Insensitive(不區分大小寫)
字符比較時忽略大小寫,‘a’與‘A’視為相同。是最常用的后綴。
_csCase Sensitive(區分大小寫)
字符比較時區分大小寫,‘a’和‘A’被視為不同字符。
_binBinary(二進制)
按照字符的二進制值(ASCII碼或Unicode碼)逐字節比較,區分大小寫且不考慮語言規則。速度快,精確比較。
_aiAccent Insensitive(不區分重音符號)
忽略字符的重音符號(例如é和e視為相同),通常和ci結合使用,如utf8mb4_0900_ai_ci
_asAccent Sensitive(區分重音符號)
區分帶重音符號和不帶重音符號的字符。
0900代表使用Unicode Collation Algorithm版本 9.0.0的排序規則。
比如utf8mb4_0900_ai_ci,這是MySQL 8.0及以后版本引入的新排序規則,支持更準確的Unicode排序。

3.對庫設置校對規則

在創建數據庫時指定

create database qoq charset utf8 collate utf8_general_mysql500_ci;

查看這個數據庫信息

show create database qoq;

4.對表設置校對規則

create table t1?(id int) charset utf8 collate utf8_german2_ci;

5.演示校對規則不同的效果

創建三個表,有表項info,char(3)類型,utf8mb4編碼,排序規則各不相同

區分大小寫

CREATE TABLE t3 (info CHAR(3)) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

不區分大小寫

CREATE TABLE t4 (info CHAR(3)) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs;

ascii碼存儲

CREATE TABLE t5 (info CHAR(3)) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

向三個表插入相同的數據

insert into t3 values('a'),('A'),('b'),('B'),('c'),('C');

insert into t4 values('a'),('A'),('b'),('B'),('c'),('C');

insert into t5 values('a'),('A'),('b'),('B'),('c'),('C');

查詢數據信息

select * from t3?where info='a';

select * from t4?where info='a';

select * from t5?where info='a';

排序處理

select * from t3 order by info;

select * from t4?order by info;

select * from t5?order by info;

校對規則還會影響數據排序結果,因此也成為排序規則

六.修改數據庫的字符集

1.直接轉換,此方法只會影響之后存儲的數據,不會修改之前存儲的數據

查看當前的字符集

show create table t1;

修改成utf8mb4,之后再次查看

alter table t1 charset utf8mb4;

show create table t1;

2.間接修改

鎖表邏輯(別讓用戶再寫數據了)導出數據(例如:mysqldump),重新創建數據空表(設定目標字符集),導入備份數據信息

可以影響之后存儲的數據,也可以影響之前的數據

注意必須保證修改之后的數據字符集是之前字符集的超集

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87303.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87303.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87303.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

人臉活體識別4:Android實現人臉眨眼 張嘴 點頭 搖頭識別(可實時檢測)

人臉活體識別4:Android實現人臉眨眼 張嘴 點頭 搖頭識別(可實時檢測) 目錄 人臉活體識別4:Android實現人臉眨眼 張嘴 點頭 搖頭識別(可實時檢測) 1. 前言 2.人臉活體識別方法 (1)基于人臉動作的檢測?? (2&…

DAY1-Linux操作系統1

文章參考【黑馬程序員Python教程_600集Python從入門到精通教程(懂中文就能學會)】 https://www.bilibili.com/video/BV1ex411x7Em/?p40&share_sourcecopy_web&vd_source263bbee2ddeb835c3ab6d9d3c80e0f7c 一.常用命令簡單介紹 使用軟件 虛擬機…

第十二節:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入門 - 兩種權限控制方式(附前后端代碼)

Vben5 系列文章目錄 ?? 基礎篇 ? 第一節:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入門 ? 第二節:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入門 - Python Flask 后端開發詳解(附源碼) ? 第三節:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入…

華為云Flexus+DeepSeek征文 | 華為云 ModelArts Studio 賦能 AI 法務:合同審查與法律文件生成系統

一、引言 在法律行業數字化轉型的浪潮中,AI 技術正重塑法律服務的流程與效率。本文介紹如何利用華為云 ModelArts Studio 構建一套完整的 AI 法務系統,實現合同審查、法律文件生成、法律咨詢與風險識別的智能化解決方案。 二、系統架構設計 &#xff0…

SQL的底層邏輯解析

SQL的底層邏輯涉及數據庫管理系統(DBMS)如何解析、優化和執行SQL查詢,主要包括以下幾個層面: ?查詢處理流程? 解析器(Parser):將SQL語句轉換為語法樹查詢優化器(Optimizer):基于統計信息和成本模型生成最優執行計劃執行引擎(Exe…

深入剖析AI大模型:PyTorch 技術詳解

今天說一說PyTorch。作為一名python程序員,可能對它了解起來還是很快的。在人工智能浪潮席卷全球的當下,深度學習作為其核心技術,被廣泛應用于圖像識別、自然語言處理、語音識別等多個領域。而在深度學習的開發框架中,PyTorch 憑借…

物聯網架構:定義、解釋和實例

物聯網(IoT)架構是一個復雜且多維度的概念,構成了物聯網系統的核心框架。它是勾勒物聯網設備、應用程序和技術如何相互交互以實現預期功能的藍圖。物聯網架構并非 “一刀切” 的模型,而是會根據相關物聯網系統的具體需求而有所不同…

拿到一臺新服務器,怎么跑AI項目

公司新采購一臺AI服務器,花大本錢裝了個A6000顯卡,今天來記錄下新服務的使用步驟。 1、查看系統。 這臺服務器預裝了Ubuntu20.04系統。 lsb_release -a 查看下cpu、內存情況 top 看著還行。 再看下硬盤空間 df -h 空間不算小,2T。 2、…

IO--進程實操

1.創建一個進程扇 #include <051head.h> int main(int argc, const char *argv[]) {pid_t pid;for(int i0;i<4;i){pidfork();if(pid-1) //父進程{ERRLOG("fork error..\n");} else if(pid0) //這是子進程{ …

模型預測控制(MPC)概覽

模型預測控制&#xff08;Model Predictive Control, MPC&#xff09; 一、理論基礎與發展脈絡 1. 歷史起源 20世紀70年代起源于工業過程控制&#xff08;如化工領域的動態矩陣控制DMC、模型算法控制MAC&#xff09;&#xff0c;由Richalet、Mehra等學者提出&#xff0c;核心…

Python初體驗:從入門到實踐

Python無疑是開啟編程世界大門的絕佳鑰匙。今天,就讓我們一起踏上Python的學習之旅。 #01 編寫第一個Python程序 環境搭建好之后,上節已經編寫了第一個Python程序。現在就好比,我們已經準備好了廚房和食材,要開始做第一道菜了。啟動Jupyter后,在Jupyter中新建一個文件,…

【數字后端】- 什么是AOI、OAI cell?它們后面數字的含義

是什么&#xff1f; 不管是在DC綜合階段&#xff0c;還是在PR階段&#xff0c;嘗嘗會出現OAI、AOI組合邏輯單元的身影。因為它們可以通過巧妙的串聯和并聯晶體管非常高效地實現組合邏輯&#xff0c;因此在VLSI設計中非常常用。但是它們也是高pin密度單元&#xff0c;也可能會造…

MQTTServer服務器根據MQTTClient客戶端已訂閱的主題推送 分發消息

網絡讀卡器介紹&#xff1a;https://item.taobao.com/item.htm?ftt&id22173428704&spma21dvs.23580594.0.0.52de2c1bgK3bgZ 本示例使用了MQTTNet插件 C# MQTTNETServer 源碼 using MQTTnet.Client.Receiving; using MQTTnet.Server; using MQTTnet; using System; u…

【seismic unix 合并兩個su文件】

Seismic Unix簡介 Seismic Unix&#xff08;SU&#xff09;是由科羅拉多礦業學院開發的開源地震數據處理軟件包&#xff0c;基于Unix/Linux環境運行。它提供了一系列命令行工具&#xff0c;用于地震數據加載、處理、分析和可視化&#xff0c;支持SEG-Y格式和SU自定義格式。SU廣…

【vmware虛擬機使用】安裝vmware workstations17

安裝vmware17 本章學習目標VMware虛擬機簡介開始實操下載VMware workstation虛擬機安裝虛擬機配置虛擬機網絡 總結 本章學習目標 1.安裝vmware workstation虛擬機 2.自定義配置虛擬機網絡&#xff0c;避免網絡沖突 VMware虛擬機簡介 ? VMware的核心是Hypervisor&#xff0…

QT6 源(147)模型視圖架構里的表格窗體 QTableWidget 的范例代碼舉例,以及其條目 QTableWidgetItem 類型的源代碼。

&#xff08;1&#xff09;先用一個簡單的例子&#xff0c;學習一下本類里的成員函數的使用。生成如下圖的界面&#xff0c;表格窗體與初始數據&#xff1a; 查看其 ui_widget . h 文件 &#xff0c;里面的將是最標準的表格窗體的使用代碼 &#xff1a; #ifndef UI_WIDGET_H #…

URL時間戳參數深度解析:緩存破壞與前端優化的前世今生

&#x1f50d; URL時間戳參數深度解析&#xff1a;緩存破壞與前端優化的前世今生 在日常的Web開發中&#xff0c;你是否注意到很多接口URL后面都會帶有一個時間戳參數&#xff1f;比如 xxx/getMsg?_1751413509056。這個看似簡單的參數背后&#xff0c;卻隱藏著前端緩存策略、性…

分布式鎖實現方式:基于Redis的分布式鎖實現(Spring Boot + Redis)

Redis實現分布式鎖的原理 Redis分布式鎖基于其單線程執行命令的特性&#xff0c;通過原子操作實現多節點間的互斥訪問。下面從原理、實現、問題及優化四個方面詳細解析&#xff1a; 1.原子性與互斥性 Redis分布式鎖的核心是原子性操作&#xff1a; 獲取鎖&#xff1a;使用SE…

linux升級降級內核實驗

?實驗環境 vmware workstation 17 centos7.9 下載鏈接&#xff1a; https://vault.centos.org/7.9.2009/isos/x86_64/ ubuntu24.04 下載鏈接&#xff1a; https://old-releases.ubuntu.com/releases/24.04/ ?實驗目的 為了解決日常環境部署中某些驅動軟件依賴特定內…

華為云開始了“開發者空間 AI Agent 開發”活動

引言 今天在華為云App上偶然看到一個新活動&#xff1a;Developer Events_Developer Alliance-Huawei Cloud。這個活動要求開發者可結合自己的工作實踐&#xff0c;須在華為開發者空間內完成應用構建&#xff0c;應用構建類型和主題為AI Agent應用開發。 AI Agent平臺 華為開…