此文档限制在mysql 5.5以上成立
在utf8 的格式情况下的总结
﹙1﹚ 在mysql提供的官方文档中描述如下
1﹚ 在mysql5.1参考手册中如下描述
TEXT[(M)]
最大长度为65,535(216–1)字符的TEXT列。
可以给出可选长度M。则MySQL将列创建为最小的但足以容纳M字符长的值的TEXT类型。
[NATIONAL] VARCHAR(M) [BINARY]
变长字符串。M 表示最大列长度。M的范围是0到65,535。(VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定。最大有效长度是65,532字节)。
[NATIONAL] CHAR(M) [BINARY| ASCII | UNICODE]
固定长度字符串,当保存时在右侧填充空格以达到指定的长度。M表示列长度。M的范围是0到255个字符
﹙2﹚ 对字符和字节的关系做个介绍
1﹚ 字符是指计算机中使用的字母、数字、字和符号
2﹚ 在 ASCII 编码中,一个英文字母字符存储需要1个字节
3﹚ 在 GB 2312 编码或 GBK 编码中,一个汉字字符存储需要2个字节
4﹚ 在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节(在我的计算机环境上是一个汉字存贮需要3个字节)
5﹚ 在UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)
6﹚ 在UTF-32编码中,世界上任何字符的存储都需要4个字节
7﹚ 我们现在数据库编码使用的是utf-8编码格式,所以一个字符占有3个字节
﹙3﹚ 但是通过实验我们得出了和上面手册文档中不同的值(在utf8编码下)
1﹚ Text类型最多可以存贮65535个字节,而非65535个字符,就是存贮英文等字符的时候是可以存贮65535个字符,存贮纯汉字最多可以存贮21485个汉字
2﹚ Varchar类型可以设置的最大值为21491,存贮形式为字符,varchar(21491)最多可以存贮21491个英文字符,也可以存贮最多为21491个汉字
3﹚ Char类型最大可设的值为255个字符,char(255)最多可以存贮255个英文字符,最多也可以存贮255个汉字,char(M)当你使用char了之后就该字段不管有多少值占用的空间都是M个字符
4﹚ 检索效率char>varchar>text
﹙4﹚ 通过以上的讨论,我们的数据库设计可以设计一个原则
1﹚ 当数据库存贮的是html或者一些文章性的不需要检索的使用text,存贮量大,也比较少的需要检索.存贮的性能上来说是最佳的.,可以少占空间多存内容
2﹚ 当一些字符比较少而且需要比较高的检索效率我们首先考虑char,比如字典表的类型可以使用char类型,这样对字典表的读取效率会有比较大的提高
3﹚ 除了以上这些特殊的,其他建议都采用varchar,但是对于不同的字段要定不同的长度,比如:标题用varchar(200)不管是英文还是汉语作为标题应该都是比较够了
4﹚ 对于一些个人简介以及名医简介等类似的一些东西来说是需要不同的需求分配不同的长度.所以我们类型用varchar.长度按照需求定义