【MySQL进阶】--char & varchar & text的区别
来源:互联网 发布:淘宝网店上架宝贝 编辑:程序博客网 时间:2024/05/21 18:31
最近在设计MySQL数据库表时,用到了char和varchar类型,另外还接触到了text类型。他们的存储方式和数据的
检索方式都不一样,今天就对三者之间的异同进行一下总结。
首先要明确的三点:
1.char长度固定,varchar和text长度可变。
2.char和varchar可以设定默认值,text没有默认值。
3.char和varchar定义时要指定长度,text定义时通常不用指定长度,可以自己计算。
接下来分别看一下三个类型的存储和检索特点
char
最大长度255个字符,表现形式Char(M),M表示严格限定的字符数。 注意:是字符数,跟字符集的设定没有关系。
在保存字符串的时候,如果字符串长度不够,则后面用空格补足空字符串会造成空间浪费。
在检索的时候后面的空格会去掉,所以检索出来的数据需要再用trim之类的函数去处理。
varchar
最大长度65535个字节,表现形式Varchar(M),M表示允许的最大字符串长度。注意:是字节数,跟字符集有关。
注意:这里的65535在实际应用中限制的不再是某一列而是一个行定义的长度,要考虑到其它的column。
在保存字符串的时候,不进行填充,节省空间。当值保存和检索时尾部的空格仍保留。
高频率面试题:varchar类型长度范围65535,实际范围为65532或65533。为什么?
varchar存储字符串的同时会在内容开头用1到2个字节保存该字符串的实际长度(小于255采用一个字节保存,长
度超过255时需要2个字节),还有如果存在not null的时候,整条记录需要一个额外的字节来保存当前字段的null
值,也会占用一位。除非所有的字段都不是null,这个字节才可以省略。因此varchar定义的最大长度为65535,实际
长度为65532或65533.
第一段提到,varchar最大长度是65535字节,因此对不同的字符集,有效长度还不一样。
字符类型若为gbk, 每个字符最多占2个字节,最大长度不能超过32767;
字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。
text
text和varchar基本相同,但是text会忽略指定的大小这和varchar有所不同。后面如果指定长度,不会报错误,
但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入。存储或检索过程
中,不存在大小写转换.text的65535字节全部用来存储数据,使用额外的2个字节来存储数据的大小,varchar根据存
储数据的大小选择用几个字节来存储。
检索效率
char是直接检索,varchar类型需要检索统计字符串的长度然后进行读取相应的位数就停止了,因此是可变长度的,
存储空间控制的好,但是也因此效率低于char类型。text效率就更低了,需要自己计算长度然后进行检索。
数据的检索效率是:char>varchar>text
适用范围
1. 经常变化的字段用varchar,例如昵称、描述信息等等。
2. 知道固定长度的用char,例如身份证号,手机号
3. 尽量用varchar,能用varchar的地方不用text
4. 超过255字节的只能用varchar或者text,超过varchar范围的会自动强制转换为text类型
关键字:mysql char varchar text 65535 65532 检索 存储
- 【MySQL进阶】--char & varchar & text的区别
- mysql char varchar text的区别
- Mysql 中 char 、varchar 、text的区别
- Mysql 中 char 、varchar 、text的区别
- MySQL中char、varchar和text的区别
- MySQL中char、varchar和text的区别
- MySQL中char、varchar和text的区别
- MySQL性能优化之char、varchar、text的区别
- MySQL中char、varchar和text的区别
- MySQL中char、varchar和text的区别
- MySQL中char、varchar和text的区别
- mysql中char,varchar,text区别
- mysql中char,varchar,text区别
- mysql char/varchar的区别
- MySQL数据类型char、varchar、text的比较
- mysql char,varchar与text的选择
- MySQl之char,varchar,text
- mysql中char,varchar,text区别个人总结
- css盒子模型part3
- 《C++ primer》英文第五版阅读笔记(十三)——表达式基本知识
- html中常用单位
- 对于自学验证码识别的感想
- 南昌大学软院大神养成计划----第三天编写简易网页
- 【MySQL进阶】--char & varchar & text的区别
- Flume + HDFS Sink采集数据及如何添加第三方JAR
- Qt入门-提示、警告、错误、询问、关于对话框
- python_2
- 集合框架(增加,删除,判断元素以及迭代器)
- java序列化与反序列化
- 银联支付-手机网页支付接口开发
- Oracle 自定义结构(Record) 记录
- UI_容器视图控制器