1. varchar(n) 的最大值字符數是多少
varchar 最大可以保存 65535 字節,但是具體保存多少個字符,不同的編碼不一樣。
MySQL 5.0 之前的版本:n 指的是 n 個字節
n 的最大值是 65535,如果以 utf-8 格式存放數據,最長保存 [n/3] 個漢字(一個漢字佔 3 字節),即 varchar(20) 類型的字段只能保存 6 個漢字;
MySQL 5.0 之後的版本:n 指的是 n 個字符
無論是數字,字母還是漢字,都可存放 n 個,即 varchar(20) 類型的字段可以保存 20 個漢字;
utf8mb4 格式:varchar(n) 中每個字符最多佔 4 個字節,英文數字佔 1 個字節,漢字佔 3 個字節。
2. varchar(n) 需要 1 到 2 個額外字節記錄保存的字符長度
當 n<=255 的時候,只需要 1 個字節記錄即可(數據表示範圍:0~28-1,即 0~255);當 n>255 的時候,則需要 2 個字節記錄(28~ 216-1,即 256~65535)。
字符的長度保存在第一個或者前兩個字節中。所以(對於 utf8mb4 格式):
a. 如果 varchar(20),實際最多需要 1+20*4 個字節的存儲空間;
b. 如果 varchar(255),實際最多需要 1+255*4 個字節的存儲空間;
c. 如果 varchar(256),實際最多需要 2+256*4 個字節的存儲空間;
d. 如果 varchar(500),實際最多需要 2+500*4 個字節的存儲空間。
因爲 varchar 是存儲可變長字符串,所以:
a. 如果 name varchar(8),那麼 name='12345678',實際長度爲 1+8*1 字節;
b. 如果 name varchar(32),那麼 name='12345678',實際長度爲 1+8*1 字節;
c. 如果 name varchar(16),那麼 name='1234',實際長度爲 1+4*1 字節;
基於 MySQL 中 varchar 長度的設置問題 修改