mysql 以不同編碼儲存漢字長度測試

2021-08-20 06:16:09 字數 1343 閱讀 4530

1.以utf8編碼儲存漢字(乙個漢字佔3位元組)

建立測試表

create

table

`dist` (

`id`

int(11) not

null auto_increment,

`col2`

varchar(2) character

set utf8 collate utf8_general_ci default

null,

) engine=innodb auto_increment=9

default charset=utf8;

為表中col2 字段插入值

通過 length(field)查詢插入字段值的實際占用記憶體大小

select col2, length(col2) from dist ;
col2 length(col2)

昂發 6

ab 2

昂 3

確實在utf8編碼下漢字佔3個位元組,其他每個字元佔一位元組

再來看看字段儲存的字元個數,通過char_length(field)

select col2, char_length(col2) from dist;
col2 length(col2)

昂發 2

ab 2

昂 1

結果為col2欄位實際儲存的字元的個數

2.以gbk編碼儲存漢字(乙個漢字佔2位元組)

先來建個表

create

table gbk_test(

id int ,

gbk_char1 varchar(1),

gbk_char2 varchar(2)

)engine = innodb default charset = gbk;

直接看結果

select gbk_char2, length(gbk_char2) from gbk_test
gbk_char2 length(gbk_char2)

昂是 4

1 1

a 1

aa 2

在gbk編碼下乙個漢字實際佔2個位元組

select gbk_char2, char_length(gbk_char2) from gbk_test
gbk_char2 length(gbk_char2)

昂是 2

1 1

a 1

說 1實際儲存個數也出現啦!

漢字的統一與儲存編碼

今天碰巧看了下unicode編碼問題,計算機的世界真是太神奇了。因為中日韓等多個地區都有自己漢字的寫法,統計起來漢字個數就非常多了,如果文字採用16位全球文字編碼 ucs 2標準 六萬多個位置估計放漢字都不夠。所以把一些同字異形的漢字統一成相同的編碼,從而節省空間,這是十分有必要的。其中漢字編碼有個...

mysql 編碼和漢字儲存占用位元組問題的探索

mysql 5.5 之前,utf8 編碼只支援1 3個位元組,只支援bmp這部分的unicode編碼區,bmp是從哪到哪?基本就是 0000 ffff 這一區。從mysql 5.5 開始,可支援4個位元組utf編碼utf8mb4,乙個字元最多能有4位元組,所以能支援更多的字符集。utf8mb4 is...

MySQL漢字轉換拼音 儲存函式

mysql漢字轉換拼音 儲存函式 begin declare tmp str varchar 255 charset gbk default 擷取字串,每次做擷取後的字串存放在該變數中,初始為函式引數in string值 declare tmp len smallint default 0 tmp ...