略懂 MySQL字符集

2022-04-04 08:59:47 字數 1908 閱讀 4379

本文雖說旨在明白、但若略懂亦可、畢竟諸葛孔明如是

只有基於字元的值才有所謂字符集的概念

某些字符集可能需要更多cpu、消費更多的記憶體和磁碟空間、甚至影響索引使用

這還不包括令人蛋碎的亂碼、

可見、我們還是有必要花點時間略懂下mysql字符集

先直觀認識各階梯下顯示使用字符集:

# 囊括三個層級:db、table、column

mysql> create database d charset utf8;

query ok, 1 row affected (0.04 sec)

mysql> create table d.t

-> (str varchar(10) charset latin1)

-> default charset=utf8;

query ok, 0 rows affected (0.05 sec)

那如果沒有顯示指定?mysql是如何設定?路分兩條:

① 建立物件時的預設設定

這是個逐層繼承的預設設定:

server → db → table → column

高層為底層設定預設值、底層可遵可棄、

沒有指定字符集、謂之可遵

顯示指定字符集、謂之可棄

② 伺服器和客戶端通訊時的設定

當客戶端提交一條sql到mysql時、mysql server總是假定客戶端字符集是character_set_client

其後、server把character_set_client轉為character_set_connection進行sql處理、

在返回結果集給客戶端時、server又將character_set_connection轉為character_set_result、然後返回

以上涉及的三個字符集、我們可以通過set names 一次搞定

字符集之間的相互轉換是需要額外的系統開銷的、

如何知道?

explain extended + show warnings 即可

那該如何盡量避免這種隱式轉換?

這裡介紹一種被稱為"極簡原則"的方法、如下:

先為伺服器(或資料庫)選擇合適的字符集、然後依據業務、讓某些列選擇合適的字符集

在mysql字符集中隱含了些意外驚喜、主要有三:

① 有趣的character_set_database

當character_set_database和character_set_server不同時、庫的預設字符集由後者決定

你不能直接修改csd、改變css就改變了csd、因為csd和庫預設字符集相同、

改變庫預設字符集、csd就隨之改變、而css決定庫的預設字符集

所以、當連線到mysql例項、又沒有指定庫時、預設字符集與css相同

② load data infile 

進行此操作時、建議最佳實踐如下:

use 庫;

set names 字符集;

開始載入資料;

這就使用統一字符集、避免混搭的"字符集style"

③ select into outfile 

該行為沒有進行任何轉碼操作!

有人說、不管37二十

一、全用utf8、整個世界都清淨了

但這不僅消耗更多磁碟空間、也帶來一定效能犧牲

為什麼?因為utf8是多位元組字符集、比如乙個漢字是三個位元組

這會帶來兩方面的問題:

① 浪費空間、如char(10)可能會開闢30位元組空間、即使不需要

② 索引長度限制、mysql總是假定乙個字元三個位元組、導致最長索引長度變成1/3

行文至此、大意已明、後續想到、再續前緣

by waterbin

2013-07-18

good luck

mysql 集群字符集 Mysql 字符集

字符集與字元比較 字符集字符集是某種字元的集合,比如最常見的ascii碼,由127個字元組成,只需要乙個位元組就能表示 我們常說的字符集還是gbk iso utf8 mysql 我們使用得最多的字符集就是gbk 和 utf8了 他們都是變長字符集,如果字元在ascii範圍內就使用乙個位元組表示,其他...

mysql字符集 MySQL字符集選擇

一 怎樣選擇合適的字符集 對mysql資料庫來說,字符集很重要,因為資料庫儲存的資料大部分都是各種文字,字符集對資料庫的儲存,處理效能都會有所影響。主要考慮一下幾方面的因素 1.滿足應用支援語言的需求,應用處理各種各樣的文字,發布到使用不同語言的國家或地區,可以選擇unicode字符集,mysql的...

mysql api 字符集 MySQL字符集

mysql字符集包括字符集 character 和 collation 兩個概念。字符集是用來定義mysql儲存字串的規則,校對規則則是定義了比較字串的方式。字串和校對規則是一對多的 關係。使用命令 show collation like gbk 可檢視相關的校對規則 使用 show charact...