欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql字符集相關(guān)總結(jié)

 更新時(shí)間:2021年03月08日 10:58:27   作者:Nemo  
這篇文章主要介紹了Python 中刪除文件的幾種方法匯總,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下

這邊筆記主要記錄一下對(duì)mysql字符集相關(guān)知識(shí)的學(xué)習(xí)

字符集

一般我們使用如下語(yǔ)句創(chuàng)建一張表,創(chuàng)建表的時(shí)候指定了charset為utf8編碼。

CREATE TABLE `test` (
 `c1` int UNSIGNED NOT NULL AUTO_INCREMENT,
 `c2` varchar(255),
 `c3` char(11),
 `c4` varchar(255),
 PRIMARY KEY (`c1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

但其實(shí)mysql也支持除了utf8之外的其他字符集,可以使用命令 show charset 查看當(dāng)前mysql支持的所有字符集。

例如下圖就是我的mysql支持的所有字符集。

可以從上圖中看到,第四列表示該字符集最大長(zhǎng)度。我們建表時(shí)常用的 utf8 在mysql里面實(shí)際最大長(zhǎng)度是 3 個(gè)字符。一般認(rèn)知中utf8是用1~4個(gè)字符來(lái)表示具體的內(nèi)容的,但mysql里面的 utf8 實(shí)際是 utf8mb3 的別名,正宗的的最大用4個(gè)字符表示的在mysql中是 utf8mb4 。

注意:

utf8mb4
utf8mb4

比較規(guī)則

在上面那張圖中,第三列 Default collation 就是這些字符集默認(rèn)的比較規(guī)則。例如acsii字符集的默認(rèn)比較規(guī)則是 ascii_general_ci ,utf8字符集的默認(rèn)比較規(guī)則是 utf8_general_ci 。

其實(shí)每個(gè)字符集有很多種比較規(guī)則,例如我們看一下acsii字符集有哪些比較規(guī)則,如下圖所示

mysql> show collation like 'ascii%';
+------------------+---------+----+---------+----------+---------+
| Collation  | Charset | Id | Default | Compiled | Sortlen |
+------------------+---------+----+---------+----------+---------+
| ascii_general_ci | ascii | 11 | Yes  |   |  0 |
| ascii_bin  | ascii | 65 |   |   |  0 |
+------------------+---------+----+---------+----------+---------+

ascii_general_ci 表示是一種通用的比較,其中 _ci 表示是不區(qū)分大小寫(xiě)(case insensitive)。(反之 _cs 就表示大小寫(xiě)敏感)

ascii_bin 表示是二進(jìn)制比較

再看一下utf8、utf8mb4字符集有哪些比較規(guī)則,如下圖所示

mysql> show collation like 'utf8%';
+--------------------------+---------+-----+---------+----------+---------+
| Collation    | Charset | Id | Default | Compiled | Sortlen |
+--------------------------+---------+-----+---------+----------+---------+
| utf8_general_ci   | utf8 | 33 | Yes  | Yes  |  1 |
| utf8_bin     | utf8 | 83 |   | Yes  |  1 |
| utf8_unicode_ci   | utf8 | 192 |   | Yes  |  8 |
| utf8_icelandic_ci  | utf8 | 193 |   | Yes  |  8 |
| utf8_latvian_ci   | utf8 | 194 |   | Yes  |  8 |
| utf8_romanian_ci   | utf8 | 195 |   | Yes  |  8 |
| utf8_slovenian_ci  | utf8 | 196 |   | Yes  |  8 |
| utf8_polish_ci   | utf8 | 197 |   | Yes  |  8 |
| utf8_estonian_ci   | utf8 | 198 |   | Yes  |  8 |
| utf8_spanish_ci   | utf8 | 199 |   | Yes  |  8 |
| utf8_swedish_ci   | utf8 | 200 |   | Yes  |  8 |
| utf8_turkish_ci   | utf8 | 201 |   | Yes  |  8 |
| utf8_czech_ci   | utf8 | 202 |   | Yes  |  8 |
| utf8_danish_ci   | utf8 | 203 |   | Yes  |  8 |
| utf8_lithuanian_ci  | utf8 | 204 |   | Yes  |  8 |
| utf8_slovak_ci   | utf8 | 205 |   | Yes  |  8 |
| utf8_spanish2_ci   | utf8 | 206 |   | Yes  |  8 |
| utf8_roman_ci   | utf8 | 207 |   | Yes  |  8 |
| utf8_persian_ci   | utf8 | 208 |   | Yes  |  8 |
| utf8_esperanto_ci  | utf8 | 209 |   | Yes  |  8 |
| utf8_hungarian_ci  | utf8 | 210 |   | Yes  |  8 |
| utf8_sinhala_ci   | utf8 | 211 |   | Yes  |  8 |
| utf8_german2_ci   | utf8 | 212 |   | Yes  |  8 |
| utf8_croatian_ci   | utf8 | 213 |   | Yes  |  8 |
| utf8_unicode_520_ci  | utf8 | 214 |   | Yes  |  8 |
| utf8_vietnamese_ci  | utf8 | 215 |   | Yes  |  8 |
| utf8_general_mysql500_ci | utf8 | 223 |   | Yes  |  1 |
| utf8mb4_general_ci  | utf8mb4 | 45 | Yes  | Yes  |  1 |
| utf8mb4_bin    | utf8mb4 | 46 |   | Yes  |  1 |
| utf8mb4_unicode_ci  | utf8mb4 | 224 |   | Yes  |  8 |
| utf8mb4_icelandic_ci  | utf8mb4 | 225 |   | Yes  |  8 |
| utf8mb4_latvian_ci  | utf8mb4 | 226 |   | Yes  |  8 |
| utf8mb4_romanian_ci  | utf8mb4 | 227 |   | Yes  |  8 |
| utf8mb4_slovenian_ci  | utf8mb4 | 228 |   | Yes  |  8 |
| utf8mb4_polish_ci  | utf8mb4 | 229 |   | Yes  |  8 |
| utf8mb4_estonian_ci  | utf8mb4 | 230 |   | Yes  |  8 |
| utf8mb4_spanish_ci  | utf8mb4 | 231 |   | Yes  |  8 |
| utf8mb4_swedish_ci  | utf8mb4 | 232 |   | Yes  |  8 |
| utf8mb4_turkish_ci  | utf8mb4 | 233 |   | Yes  |  8 |
| utf8mb4_czech_ci   | utf8mb4 | 234 |   | Yes  |  8 |
| utf8mb4_danish_ci  | utf8mb4 | 235 |   | Yes  |  8 |
| utf8mb4_lithuanian_ci | utf8mb4 | 236 |   | Yes  |  8 |
| utf8mb4_slovak_ci  | utf8mb4 | 237 |   | Yes  |  8 |
| utf8mb4_spanish2_ci  | utf8mb4 | 238 |   | Yes  |  8 |
| utf8mb4_roman_ci   | utf8mb4 | 239 |   | Yes  |  8 |
| utf8mb4_persian_ci  | utf8mb4 | 240 |   | Yes  |  8 |
| utf8mb4_esperanto_ci  | utf8mb4 | 241 |   | Yes  |  8 |
| utf8mb4_hungarian_ci  | utf8mb4 | 242 |   | Yes  |  8 |
| utf8mb4_sinhala_ci  | utf8mb4 | 243 |   | Yes  |  8 |
| utf8mb4_german2_ci  | utf8mb4 | 244 |   | Yes  |  8 |
| utf8mb4_croatian_ci  | utf8mb4 | 245 |   | Yes  |  8 |
| utf8mb4_unicode_520_ci | utf8mb4 | 246 |   | Yes  |  8 |
| utf8mb4_vietnamese_ci | utf8mb4 | 247 |   | Yes  |  8 |
+--------------------------+---------+-----+---------+----------+---------+

使用不同的比較規(guī)則對(duì)數(shù)據(jù)進(jìn)行比較,結(jié)果可能是不一樣的。

字符集和比較規(guī)則是對(duì)應(yīng)的,不管是只修改字符集還是只修改比較規(guī)則,另一方都會(huì)相應(yīng)地自動(dòng)變化。

四個(gè)級(jí)別的字符集和比較規(guī)則

上文提到了字符集和比較規(guī)則,實(shí)際上在mysql里面有不同級(jí)別的字符集和比較規(guī)則:

  • 服務(wù)器級(jí)別
  • 數(shù)據(jù)庫(kù)級(jí)別
  • 表級(jí)別
  • 列級(jí)別

服務(wù)器級(jí)別的字符集可以看參數(shù) character_set_server ,服務(wù)器級(jí)別的比較規(guī)則可以看參數(shù) collation_server

mysql> show variables like 'character_set_server';
+----------------------+-------+
| Variable_name  | Value |
+----------------------+-------+
| character_set_server | utf8 |
+----------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like 'collation_server';
+------------------+-----------------+
| Variable_name | Value   |
+------------------+-----------------+
| collation_server | utf8_general_ci |
+------------------+-----------------+
1 row in set (0.00 sec)

如果要查看數(shù)據(jù)庫(kù)級(jí)別的字符集和比較規(guī)則,那么可以先 use xxxdb 切換到具體的數(shù)據(jù)庫(kù),然后執(zhí)行 show variables like 'character_set_database' 和 show variables like 'collation_database' 來(lái)查看該數(shù)據(jù)庫(kù)的字符集和比較規(guī)則。

Database changed
mysql> show variables like 'character_set_database';
+------------------------+-------+
| Variable_name   | Value |
+------------------------+-------+
| character_set_database | utf8 |
+------------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like 'collation_database';
+--------------------+-----------------+
| Variable_name  | Value   |
+--------------------+-----------------+
| collation_database | utf8_general_ci |
+--------------------+-----------------+
1 row in set (0.00 sec)

如果要查看某個(gè)表的字符集和比較規(guī)則,或者表中的某個(gè)列的字符集和比較規(guī)則,那么可以使用 show create table xxxtb 來(lái)查看具體的建表語(yǔ)句,里面就有使用的字符集和比較規(guī)則。

如果創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候沒(méi)有指定字符集和比較規(guī)則,則會(huì)使用服務(wù)器級(jí)別的字符集和比較規(guī)則作為數(shù)據(jù)庫(kù)的字符集和比較規(guī)則。如果創(chuàng)建和修改表的語(yǔ)句中沒(méi)有指明字符集和比較規(guī)則,將使用該表所在數(shù)據(jù)庫(kù)的字符集和比較規(guī)則作為該表的字符集和比較規(guī)則

三個(gè)系統(tǒng)變量

mysql服務(wù)器可以對(duì)應(yīng)多個(gè)客戶端,而這些客戶端的編碼方式可能不同,但存在數(shù)據(jù)庫(kù)里的數(shù)據(jù)的字符集是一定的,mysql就要針對(duì)不同的客戶端進(jìn)行編碼轉(zhuǎn)換處理,然后返回結(jié)果給客戶端。

在mysql里面,有三個(gè) SESSION級(jí)別 的系統(tǒng)變量,可以進(jìn)行上述操作:

  • character_set_client : 服務(wù)器解碼客戶端請(qǐng)求時(shí)使用的字符集
  • character_set_connection : 服務(wù)器處理請(qǐng)求時(shí)會(huì)把請(qǐng)求字符串從character_set_client轉(zhuǎn)為character_set_connection
  • character_set_results : 服務(wù)器向客戶端返回?cái)?shù)據(jù)時(shí)使用的字符集

mysql服務(wù)器會(huì)為每個(gè)客戶端都維護(hù)一份session級(jí)別的這三個(gè)變量。

不過(guò)在實(shí)際生產(chǎn)環(huán)境中,為了避免麻煩,公司一般都會(huì)有規(guī)范規(guī)定客戶端默認(rèn)都使用utf8字符集。

以上就是mysql字符集相關(guān)總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于mysql字符集的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL MyISAM 與InnoDB 的區(qū)別

    MySQL MyISAM 與InnoDB 的區(qū)別

    這篇文章主要介紹了MySQL MyISAM與InnoDB 的區(qū)別,幫助大家更好的理解和使用MySQL的存儲(chǔ)引擎,感興趣的朋友可以了解下
    2020-09-09
  • MySQL限制查詢和數(shù)據(jù)排序介紹

    MySQL限制查詢和數(shù)據(jù)排序介紹

    這篇文章主要介紹了MySQL限制查詢和數(shù)據(jù)排序介紹,通過(guò)limit可以限制返回結(jié)果的行數(shù),而當(dāng)數(shù)據(jù)查詢出來(lái)以后,我們可以對(duì)數(shù)據(jù)進(jìn)行排序處理。在末尾使用order?by語(yǔ)句,下文相關(guān)詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-03-03
  • MySQL 存儲(chǔ)過(guò)程和"Cursor"的使用方法

    MySQL 存儲(chǔ)過(guò)程和"Cursor"的使用方法

    本文中介紹了一個(gè)MySQL的存儲(chǔ)過(guò)程,其中涉及Cursor的使用
    2008-12-12
  • MySQL數(shù)據(jù)庫(kù)表約束講解

    MySQL數(shù)據(jù)庫(kù)表約束講解

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)表約束講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • MySQL 數(shù)據(jù)庫(kù)定時(shí)備份的幾種方式(全面)

    MySQL 數(shù)據(jù)庫(kù)定時(shí)備份的幾種方式(全面)

    在操作數(shù)據(jù)過(guò)程中,可能會(huì)導(dǎo)致數(shù)據(jù)錯(cuò)誤,甚至數(shù)據(jù)庫(kù)奔潰,而有效的定時(shí)備份能很好地保護(hù)數(shù)據(jù)庫(kù)。本篇文章主要講述了幾種方法進(jìn)行 MySQL 定時(shí)備份數(shù)據(jù)庫(kù)。
    2021-09-09
  • MySQL中日期型單行函數(shù)代碼詳解

    MySQL中日期型單行函數(shù)代碼詳解

    這篇文章給大家介紹MySQL中日期型單行函數(shù)的相關(guān)知識(shí),包括返回當(dāng)前日期時(shí)精確到日、秒的參考代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-06-06
  • PHP MySQL的安裝與配置詳解

    PHP MySQL的安裝與配置詳解

    本篇文章給大家介紹php mysql的安裝與配置,首先給大家介紹安裝配置php,接著介紹配置mysql、安裝mysql,本文介紹的非常詳細(xì),需要的朋友可以參考下
    2015-10-10
  • mysql 重要日志文件匯總

    mysql 重要日志文件匯總

    這篇文章主要介紹了mysql 重要日志文件的匯總,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-11-11
  • docker 部署mysql詳細(xì)過(guò)程(docker部署常見(jiàn)應(yīng)用)

    docker 部署mysql詳細(xì)過(guò)程(docker部署常見(jiàn)應(yīng)用)

    這篇文章主要介紹了docker 部署mysql之docker部署常見(jiàn)應(yīng)用,本文以docker部署mysql5.7.26為例,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 簡(jiǎn)述Redis和MySQL的區(qū)別

    簡(jiǎn)述Redis和MySQL的區(qū)別

    這篇文章主要介紹了簡(jiǎn)述Redis和MySQL的區(qū)別,小編覺(jué)得挺不錯(cuò)的,這里給大家分享下,需要的朋友可以了解。
    2017-10-10

最新評(píng)論