努力,一定可以成长起来

mysql列类型-char,varchar,text的比较与选择[转]

检索的存储:

他们的存储方式和数据的检索方式都不一样。

数据的检索效率是:char>varchar>text

空间占用方面,要具体情况具体分析了。

CHAR(M)

M个字节,0 <= M <= 255

VARCHAR(M)

L+1个字节,其中L <= M 0 <= M <= 65535

TEXT

L+2个字节,其中L < 216

Char 为变长,varchartext为变长

Char在保存的时候,后面(右边)会用空格填充到指定的长度,在检索的时候后面的空格会去掉,所以检索出来的数据需要再用什么trim之类的函数去处理。(sql server可能有些不同)

Varchar 在保存的时候,不进行填充。当值保存和检索时尾部的空格仍保留。

TEXT列不能有 默认值,存储或检索过程中,不存在大小写转换.

当存储的字符超过他们定义的长度时候,如果不是在sql服务器的严格模式下,都会自动截取合适的字段存储,而不会出现错误。但是,如果是中文的话同样要报错误 :)比如定义char(4),然后insert (‘c哈哈’).

 

注意一点的,Char,Varchar不像数值类型,有系统默认长度,所以必须在括号里定义长度,可以有默认值

text不可以写默认值,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入(严格模式下没有测试 :))

 

存储计算:

在使用UTF8字符集的时候,手册上是这样描叙的:

·         基本拉丁字母、数字和标点符号使用一个字节。

·         大多数的欧洲和中东手写字母适合两个字节序列:扩展的拉丁字母(包括发音符号、长音符号、重音符号、低音符号和其它音符)、西里尔字母、希腊语、亚美尼亚语、希伯来语、阿拉伯语、叙利亚语和其它语言。

·         韩语、中文和日本象形文字使用三个字节序列。

但是,经过我的测试,中文汉字使用2个字节序列。

 

使用的一般规则:

1.       经常变化的字段用char

2.       知道固定长度的用char

3.       尽量用varchar

4.       超过255字节的只能用varchar或者text

5.       能用varchar的地方不用text

posted on 2007-11-17 18:14 努力的猪 阅读(1180) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2007年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜