MySQL8.0学习记录04 - 数据类型之字符串类型

字符串类型主要包括 CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM, 和SET。
其中,BINARY,VARBINARY,BLOB等是二进制字符串。

CHAR[(M)]、BINARY[(M)]

定长字符串,在存储时总是用右边的空格填充到指定长度。M代表以字符为单位的列长度。M的范围是0到255。如果省略M,长度为1。

MYSQL可以定义CHAR(0),它可以有两个用途:

  • 依赖列的存在但实际上不使用其值
  • 只允许两个值NULL 和’'(空串)

在检索时CHAR列中的尾部空格会被删除,插入时,长度不够M的会填充空格。

BINARY 同CHAR ,只是数据是二进制字符串

VARCHAR(M)、VARBINARY [M]

边长字符串,M的范围是0到65535。VARCHAR的有效最大长度受最大行大小(65535字节,由所有列共享)和使用的字符集的限制。注意,BLOB和TEXT列对行的大小限制只贡献了9到12个字节。

MySQL将VARCHAR值存储为一个1字节或2字节的长度前缀加上数据。长度前缀表示该值的字节数。如果一个VARCHAR列需要不超过255字节的值,则使用一个长度字节,如果值可能需要超过255字节,则使用两个长度字节。

对于VARCHAR列,无论使用何种SQL模式,超过列长的尾部空间都会在插入前被截断,并产生警告。对于CHAR型列,无论使用何种SQL模式,都会默默地截断插入值中多余的尾部空间。在严格模式下,超长会报错。

VARBINARY同VARCHAR,只是数据是二进制字符串

TINYBLOB、TINYTEXT

TINYBLOB 最大255字节,每个TINYBLOB值都使用一个1字节的长度前缀来存储,表示该值的字节数。

TINYTEXT 最大255字节,如果值包含多字节的字符,有效的最大长度会更小。每个TINYTEXT值都使用一个1字节的长度前缀来存储,表示该值的字节数

BLOB[(M)] 、TEXT

一个BLOB列,最大长度为65,535( 2 16 2^{16} 216-1)字节。每个BLOB值都使用一个2字节的长度前缀来存储,表示该值的字节数;TEXT类似;

TEXT和BLOB插入值时不会填充,查询时也不会剔除空格。但是,如果TEXT被添加索引时,索引条目在会考虑填充或者剔除空格。如果含唯一键的TEXT,两个值只有结尾的空格数量不同,那么会包duplicate-key error。BLOB没有不适用;

BLOB 和TEXT列的索引必须限定长度;

BLOB和TEXT列不能有DEFAULT值;

BLOB和TEXT列最多使用max_sort_length(默认1024)字节进行排序;可以设置session级别的值;

含BLOB或TEXT列的临时表的处理,使用的是磁盘的表数据,而不是内存,因为MEMORY存储引擎不支持这些数据类型。

MEDIUMBLOB、MEDIUMTEXT

MEDIUMBLOB最大长度为16,777,215( 2 24 2^{24} 224-1)字节。每个MEDIUMBLOB值都使用一个3字节的长度前缀来存储,表明该值的字节数。

LONGBLOB、LONGTEXT

最大4GB,LONGBLOB列的有效最大长度取决于客户端/服务器协议中配置的最大数据包大小和可用内存。每个LONGBLOB值都使用一个4字节的长度前缀来存储,表示该值的字节数。

LONGTEXT 相似

ENUM(‘value1’,‘value2’,…) [CHARACTER SET charset_name] [COLLATE collation_name]

字符串对象,只能有一个值,ENUM值在内部被表示为整数。
一个ENUM列最多可以有65,535个不同的元素。

枚举值尽量不要用数字字符串,不然很容易与背后的数字表示混淆;

ENUM的排序是按照索引顺序,而不是字符串的顺序。比如enum(‘b’,‘a’), 'b’会排在’a’前面。索引从1开始,空字符的索引是0;

SET(‘value1’,‘value2’,…) [CHARACTER SET charset_name] [COLLATE collation_name]

一个字符串对象,可以有零个或多个值。SET值在内部表示为整数。
一个SET列最多可以有64个不同的元素。

可以使用FIND_IN_SET或LIKE来检索SET

注意事项

  • 对于非二进制字符串(CHAR、VARCHAR和TEXT值),collation 的PAD属性决定了在比较中对字符串末尾的尾部空格的处理。NO PAD在比较中把尾部空格视为重要的,就像任何其他字符一样。PAD SPACE校对在比较中把尾部空格视为无关紧要的, 比较时不会考虑空格。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值