摘要:二字符集和比較規則一些重要的字符集共收錄個字符,包括空格標點符號數字大小寫字母和一些不可見字符。這個字符集也有一個別名收錄漢字個,其他文字符號個。
MySql(二)——字符集和比較規則 一些重要的字符集
ASCII
共收錄128個字符,包括空格、標點符號、數字、大小寫字母和一些不可見字符。由于總共才128個字符,所以可以使用1個字節來進行編碼
ISO 8859-1
共收錄256個字符,是在ASCII字符集的基礎上又擴充了128個西歐常用字符(包括德法兩國的字母),也可以使用1個字節來進行編碼。這個字符集也有一個別名latin1
GB2312
收錄漢字6763個,其他文字符號682個。同時這種字符集又兼容ASCII字符集
如果該字符在ASCII字符集中,則采用1字節編碼,否則采用2字節編碼
這種表示一個字符需要的字節數可能不同的編碼方式稱為:變長編碼方式
GBK
在收錄字符范圍上對GB2312字符集作了擴充,編碼方式上兼容GB2312
utf8
收錄地球上能想到的所有字符,而且還在不斷擴充。這種字符集兼容ASCII字符集,采用變長編碼方式,編碼一個字符需要使用1~4個字節
utf8只是Unicode字符集的一種編碼方案,Unicode字符集可以采用utf8、utf16、utf32這幾種編碼方案,utf8使用1~4個字節編碼一個字符,utf16使用2個或4個字節編碼一個字符,utf32使用4個字節編碼一個字符。MySQL中支持的字符集和排序規則
MySQL中的utf8和utf8mb4
utf8mb3:閹割過的utf8字符集,只使用1~3個字節表示字符
utf8mb4:正宗的utf8字符集,使用1~4個字節表示字符
在MySQL中utf8是utf8mb3的別名
字符集的查看
SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式]
比較規則的查看
SHOW COLLATION [LIKE 匹配的模式]
后綴 | 英文釋義 | 描述 |
---|---|---|
_ai | accent insensitive | 不區分重音 |
_as | accent sensitive | 區分重音 |
_ci | case insensitive | 不區分大小寫 |
_cs | case sensitive | 區分大小寫 |
_bin | binary | 以二進制方式比較 |
1. MySQL有4個級別的字符集和比較規則
服務器級別
數據庫級別
表級別
列級別
2. 服務器級別
服務器級別的字符集:SHOW VARIABLES LIKE "character_set_server"
服務器級別的比較規則:SHOW VARIABLES LIKE "collation_server"
寫入配置文件:
[server] character_set_server=utf8 collation_server=utf8_general_ci
3. 數據庫級別
當前數據庫的字符集:SHOW VARIABLES LIKE "character_set_database"
當前數據庫的比較規則:SHOW VARIABLES LIKE "collation_database"
創建和修改數據庫的時候數據庫的字符集和比較規則
CREATE DATABASE 數據庫名 [[DEFAULT] CHARACTER SET 字符集名稱] [[DEFAULT] COLLATE 比較規則名稱]; ALTER DATABASE 數據庫名 [[DEFAULT] CHARACTER SET 字符集名稱] [[DEFAULT] COLLATE 比較規則名稱];
創建數據庫不指定字符集和比較規則,則默認使用服務器級別的字符集和比較規則
4. 表級別
CREATE TABLE 表名 (列的信息) [[DEFAULT] CHARACTER SET 字符集名稱] [COLLATE 比較規則名稱]] ALTER TABLE 表名 [[DEFAULT] CHARACTER SET 字符集名稱] [COLLATE 比較規則名稱]
如果創建和修改表的語句中沒有指明字符集和比較規則,將使用該表所在數據庫的字符集和比較規則作為該表的字符集和比較規則
5.列級別
CREATE TABLE 表名( 列名 字符串類型 [CHARACTER SET 字符集名稱] [COLLATE 比較規則名稱], 其他列... ); ALTER TABLE 表名 MODIFY 列名 字符串類型 [CHARACTER SET 字符集名稱] [COLLATE 比較規則名稱];
對于某個列來說,如果在創建和修改的語句中沒有指明字符集和比較規則,將使用該列所在表的字符集和比較規則作為該列的字符集和比較規則
6.僅修改字符集或僅修改比較規則
只修改字符集,則比較規則將變為修改后的字符集默認的比較規則
只修改比較規則,則字符集將變為修改后的比較規則對應的字符集
7.各級別字符集和比較規則小結
如果創建或修改列時沒有顯式的指定字符集和比較規則,則該列默認用表的字符集和比較規則
如果創建或修改表時沒有顯式的指定字符集和比較規則,則該表默認用數據庫的字符集和比較規則
如果創建或修改數據庫時沒有顯式的指定字符集和比較規則,則該數據庫默認用服務器的字符集和比較規則
客戶端和服務器通信中的字符集從發送請求到返回結果這個過程中伴隨著多次字符集的轉換,在這個過程中會用到3個系統變量
系統變量 | 描述 |
---|---|
character_set_client | 服務器解碼請求時使用的字符集 |
character_set_connection | 服務器運行過程中使用的字符集 |
character_set_results | 服務器向客戶端返回數據時使用的字符集 |
服務器認為客戶端發送過來的請求是用character_set_client編碼的
服務器將把得到的結果集使用character_set_results編碼后發送給客戶端
character_set_connection只是服務器在處理請求時使用的字符集,它是什么其實沒多重要,但是一定要注意,該字符集包含的字符范圍一定涵蓋請求以及結果集中的字符,要不然會出現無法將請求中的字符編碼成character_set_connection字符集或者無法編碼結果集中的字符
SET NAMES 字符集名等價于:
SET character_set_client = 字符集名;
SET character_set_connection = 字符集名;
SET character_set_results = 字符集名;
如果想寫進配置文件:
[client] default-character-set=utf8
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31015.html
摘要:串行最高的隔離級別,完全服從的隔離級別。但是這將嚴重影響程序的性能。此外,垂直分區可以簡化表的結構,易于維護。 我自己總結的Java學習的一些知識點以及面試問題,目前已經開源,會一直完善下去,歡迎建議和指導歡迎Star: https://github.com/Snailclimb/Java_Guide 書籍推薦 《高性能MySQL : 第3版》 文字教程推薦 MySQL 教程(菜鳥教程...
閱讀 3215·2021-09-30 09:48
閱讀 3489·2021-09-22 16:00
閱讀 1066·2019-08-30 13:08
閱讀 3106·2019-08-30 10:53
閱讀 2416·2019-08-29 18:33
閱讀 1589·2019-08-29 12:47
閱讀 900·2019-08-29 12:16
閱讀 1933·2019-08-26 12:02