MySQL数据类型char、varchar、text的比较

char(n)定义的列的长度为固定的,长度为0~255之间。
当保存char值时,在它们的右边填充空格以达到指定的长度。
当检索到char值时,尾部的空格被删除掉。
注意:char最大长度是255字符,字符数和字符集没关系。

varchar(n)定义的列的长度为可变长的。
该类型在5.0以下的版本中的最大长度限制为255字节,
而在5.0及以上的版本中,varchar数据类型的长度支持到了65535字节(注意是字节而不是字符)。
(varchar的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65532字节)。
同char对比,varchar值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。
注意:对于5.0以上的版本
1.一个汉字占多少长度与编码有关:
    UTF-8:一个汉字=3个字节
    GBK:一个汉字=2个字节
2.varchar(n)表示n个字符,无论汉字和英文,MySQL都能存入n个字符,仅是实际字节长度有所区别
若一个表只有一个varchar类型,如定义为:
create table test(test varchar(n)) charset=utf8;
则此处n的最大值为(65535-1-2)/3 = 21844。
减1的原因是实际行存储从第二个字节开始';
减2的原因是varchar头部的2个字节表示长度;
除3的原因是字符编码是utf8。

text和varchar基本相同。text会忽略指定的大小这和varchar有所不同,text不能有默认值。
text使用额外的2个字节来存储数据的大小,varchar根据存储数据的大小选择用几个字节来存储。
text的65535字节全部用来存储数据,varchar则会占用1-3个字节去存储数据大小。
TINYTEXT     256 bytes    
TEXT         65,535 bytes          ~64kb
MEDIUMTEXT   16,777,215 bytes      ~16MB
LONGTEXT     4,294,967,295 bytes  ~4GB

MyISAM tables in MySQL have a maximum size of a row of 65,535 bytes,
so all the data in a row must fit within that limit.
However, the TEXT types are stored outside the table itself and only contribute 9 to 12 bytes towards that limit.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值