日期:2014-05-16  浏览次数:20726 次

mysql char ,varcher, text的区别与选用原则

mysql中char,varchar,text有什么使用区别呢?

先看看他们的共同点:都可以用来存储字符类型的数据。

char,varchar都可以指定最大的字符长度,text不可以。

比如,

username char(10) ,

weibo vachar(200)

这是在定义表的时候使用。都可以定义最大的长度。

区别:以上面的语句为例,username是char类型的数据,最大字符长度为10个字符,如果输入不满10个字符时,后面会自动被填充空格,也就是说始终会占用10个字符的长度。如果内容被取出之后,后面的空格将被自动清除(即使存入是后面带有空格,取出之后也会不空格给去掉,例如“abcd  ”,后面有两个空格,最后取出之后也空格就没有了'abcd')

而varchar类的是变长的,比如上例,200个最大长度,其中会有一到两个字节用来记录战用的长度。比如存进去100个字符,最后只会占有100个长度多一点(多的一连个记录占用空间的),而不是在后面补充空格占用所有长度。如果存进去后面有空格,那么后面的空格也会占用长度,取出之后空格还有事结果的一部分,这些是char和varchar之间的区别。

text主要是存储字符串,和varchar的长度相同,text不可以设置默认值,对索引的支持还不是很好或者就不支持。

char的速度要比varhcar快速

使用原则:

协调空间和时间的关系,

以微博为例,

如果存储的是用户名的话,使用char,速度快,占用空间不是很大,空间使用率较高,比如最多10个字符,

如果是存储微薄,有的用户微薄会占用100多个字符,而有的微薄最多占用10个字符,并且并不是每个用户只发一条微薄,如果使用char的话浪费率太高,空间浪费太大,使用text速度也跟不上,是用varchar比较好,空间是变长的,并且速度也算可以。


现在的硬件的价格相对便宜,尽量让空间换时间,提高系统的效率与吞吐量,不过也要做到一定的度。需要根据具体情况具体分析考虑。