数据的检索效率是:char > varchar > text
一、text:mysql中的text对应oracle中的clob,text列不能有默认值
又分为TINYTEXT, TEXT, MEDIUMTEXT,LONGTEXT, 都是表示数据长度类型的一种。
语法:[ UNSIGNED --无符号的] mediumtext
TINYTEXT: 256 bytes
TEXT: 65,535 bytes(2^16-1字符) => ~64kb
MEDIUMTEXT: 16,777,215 bytes(2^24-1字符) => ~16MB
LONGTEXT: 4,294,967,295 bytes(2^32-1字符) => ~4GB
以utf8编码计算的话
LONGTEXT:4294967295/3=1431655765个汉字,14亿,存储空间占用:4294967295/1024/1024/1024=4G的数据;
MEDIUMTEXT:16777215/3=5592405个汉字,560万,存储空间占用:16777215/1024/1024=16M的数据;
TEXT:65535/3=21845个汉字,约20000,存储空间占用:65535/1024=64K的数据;
二、char:存储定长数据很方便,CHAR字段上的索引效率级高,必须在括号里定义长度,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填充),且在检索的时候后面的空格会隐藏掉,所以检索出来的数据需要记得用什么trim之类的函数去过滤空格。
三、varchar:存储变长数据,但存储效率没有CHAR高,必须在括号里定义长度,可以有默认值。保存数据的时候,不进行空格自动填充,而且如果数据存在空格时,当值保存和检索时尾部的空格仍会保留。另外,varchar类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。
mysql的varchar与oracle的varchar2是不一样的,前者是用字符做单位的,后者是用字节做单位的。
所以:
oracle 中varchar2(10) 既10个字节3个汉字
mysql 中varchar(10) 既10个字符10个汉字
- 经常变化的字段用varchar;
- 知道固定长度的用char;
- 尽量用varchar;
- 超过255字节的只能用varchar或者text;
- 能用varchar的地方不用text;
- 能够用数字类型的字段尽量选择数字类型而不用字符串类型的(电话号码),这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了
四、日期时间
| 类型 | 范围 | 说明 |
| Date | 日期(yyyy-mm-dd) | |
| Time | 时间(hh:mm:ss) | |
| DateTime | 日期与时间組合(yyyy-mm-dd hh:mm:ss) | |
| TimeStamp | yyyymmddhhmmss | |
| Year | 年份yyyy |
本文深入解析MySQL中的数据类型,包括char、varchar、text及其各自的适用场景,对比它们的存储效率和检索性能,同时涵盖日期时间类型的具体应用。
1312

被折叠的 条评论
为什么被折叠?



