在mysql中,char和varchar都表示字符串類型.但他們存儲和檢索數據的方式並不相同.
在表結構定義中聲明char和varchar類型時,必須指定字符串的長度.也就是該列所能存儲多少個字符(不是字節,是字符).例如:char(10)和varchar(10)都能存儲10個字符.
聲明為char的列長度是固定的,char的長度可選范圍在0-255之間.也就是char最大能存儲255個字符.如果該列是utf8編碼,則該列所占用的字節數=字符數*3.如果是gbk編碼則該列所占用的字節數=字符數*2.
聲明為varchar的列長度是可變的,在mysql5.0.3之前varchar的長度范圍為0-255,mysql5.0.3之后varchar的長度范圍為0-65535個字節.采用varchar類型存儲數據需要1-2個字節(長度超過255時需要2個字節)來存儲字符串的實際長度.如果該列的編碼為gbk,每個字符最多占用2個字節,最大長度不能超過32766個字符.如果該列的編碼為utf8,每個字符最多占3個字節,最大字符長度為21845.
總結:
① char和varchar最大的不同就是一個是固定長度,一個是可變長度.由於是可變長度,因此存儲的是實際字符串再加上一個記錄字符串長度的字節。如果分配給char或varchar列的值超過 列的最大長度,則對值進行裁剪.
②varchar(M)和char(M),M都表示字符數.varchar的最大長度為65535個字節,不同的編碼所對應的最大可存儲的字符數不同.char最多可以存放255個字符,不同的編碼最大可用字節數不同.
length()與char_length()
length():Return the length of a string in bytes.返回字符串所占的字節數(受編碼影響).
char_length():Return number of characters in argument.返回字符串中的字符數.
test:
1.建表
create table t_char_test(
id int(11) primary key,
name_char char(10) ,
name_varchar varchar(10)
)engine=Myisam default charset=utf8;
insert into t_char_test(id,name_char,name_varchar) values (0,'字符類型','字符類型');
結果集如下: