7- mysql数据类型一:字符类型

1、字符串主要有下面类型:
char(len) varchar(len) 这里的len是字符个数
tinytext 、text 、mediumtext、longtext
binary 、 varbinary 、
tinyblob、blob、mediumblob、longblob、
enum 、set

2、 char和 varchar
字符型数据可以使用定长或变长的字符串来实现
char和varchar区别:
 1> 固定长度的字符串使用空格向右填充,以保证占用相同的字节数;
  变长字符串不需要向右填充,并且所有字节数可变。
  当定义一个字符串列时,必须指定该列所能存放字符串的最大长度。
  例如,存储最大长度不超过20个字符的字符串,使用下面的定义方式:
  char(20) /fixed-length/
  varchar(20) /variable-length/

 2> char列可以设置的最大长度为255个字符,而varchar列最多可以存放65535个字节。
  如果需要存储更长的字符串,则需要使用文本类型(mediumtext和longtext)。


对char最大长度为255个字符说明:
在这里插入图片描述


对char(len) 和 varchar(len) 中的len是字符个数的验证:
表 tmp2的字符集为 UTF8
在这里插入图片描述


对char存储255个字节,varchar存储65535个字节,len为字符说明:

1> 和编码有关
编码不同,varchar(L)里的最大值L是不同的。
utf8中,一个字符占3个字节,所以L = 65533/3 = 21844
gbk编码中一个字符占2个字节,所以L = 65533 / 2 = 32766
2> varchar的len最大只能是 21845
在这里插入图片描述
在这里插入图片描述


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

3、 文本数据 tinytex text mediumtext longtext
如果需要存储的数据超过64kb(varchar列所能容许的上限),就需要使用文本类型,下表显示了可用的文本类型及它们的最大长度:
在这里插入图片描述
当使用文本类型时,应注意下列事项:

  • 如果被装载到文本列中的数据超出了该类型的最大长度,数据将会被截断
  • 在向文本列装载数据时,不会消除数据的尾部空格
  • 当使用文本列排序或分组时,只会使用前1024个字节,在需要时可以放宽这个限制

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4、binary 和 varbinary
  binary 和 varbinary存储二进制串而非字符串,所以他们没有字符集

5、tinyblob、blob、mediumblob、longblob
  BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6、emum 枚举类型
  enum是一个字符串对象,是一个枚举类型,枚举列可以把一些不重复的字符串存储为一个预定义的集合,MySQL在存储枚举值时非常紧凑,会根据列表值的数量压缩到一个或者两个字节中。MySQL在内部会将每个值在列表中的位置保存为整数,并且在表的.frm文件中保存“数字-字符串”映射关系的“查找表

  枚举值在表创建时规定,enum是单选的,例如 sex enum(“男”,“女”)
字段的值只能是 男 或 女,否则会报错
在这里插入图片描述
可以看到实际存储为整数,存储整数为每个值在枚举列表中的位置,
1> 枚举类型在创建表时必须指明枚举值,不建议使用数字来作为枚举值,可能导致实际存储值和枚举值混淆
2> 枚举值不能重复
在这里插入图片描述
3> 向枚举类型插入数据时,只能是枚举值中的一项,否则会报错。在存储时实际为整数,这个整数是枚举值在列表中的位置,而不是字符串,可以通过数字上下文环境检索到这个属性
在这里插入图片描述
4> 在用枚举字段排序时,使用枚举值在列表中的位置进行排序,而非枚举值排序
在这里插入图片描述

那么如何才能正常按照枚举值来排序呢,解决方法是 在定义枚举值时,按照自然顺序列举枚举值。

枚举类型的缺点:字符串列表是固定的,添加或删除字符串必须使用ALTER TABLE。对于一些列未来可能会改变的字符串,使用枚举不是一个好主意,除非能接受只在列表末尾添加元素,这样在MySQL5.1中就可以不用重建整个表来完成修改。
由于MySQL把每个枚举值保存为整数,使用索引查找,并且必须进行查找才能转换为字符串,所以枚举列有一些开销。通常枚举的列表都比较小,所以开销还可以控制,但也不能保证一直如此。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
7、set 集合类型
  set集合类型,多选类型
  例如一个人的爱好,可能会有多个

  1> set在创建表时必须指明集合值,set最多可以设置64个值

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
8、mysql字符集:
对于拉丁系语言,比如英语,包含了一系列字母,每个字母只需要1个字节来存储。
其他一些语言(如日语和韩语)则包含了大量字符,每个字符的存储需要多个字节,因此这里字符集称为 多字符集
mysql中可以使用各种字符集来存储数据,包括单字符集和多字符集,使用
show character set;;
查看服务器支持的字符集,如果maxlen大于1,则该字符集为多字符集
在安装mysql服务器时,latin1字符集将会被字段选择为默认字符集
可以为数据库中的每个字符列选择不同的字符集,甚至可以在同一个数据表内存储不同的字符集数据。
为数据列指定非默认的字符集,只需要在类型定义后加上系统支持的字符集名称,如
varchar(20) character set utf8

在mysql中,可以改变整个数据库的默认字符集:
create database foreign character set utf8;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值