数据库字段类型的选择

数据类型的选择

数据库数据类型的选择需要平衡,存储空间和执行效率
  1. char类型
    长度在一个固定区间,执行速度快,存储值小于固定长度会造成空间浪费
//编码字节表
1.ASCIIS码
	1个英文字母(不分大小写)= 1个字节的空间
	1个中文汉字 = 2个字节的空间
	1个ASCII码 = 1个字节

2.UTF-8编码
	1个英文字符 = 1个字节
 	英文标点  = 1个字节
  	1个中文(含繁体) = 3个字节**常用***
 	中文标点 = 3个字节

3.Unicode编码
	1个英文字符 = 2个字节
	英文标点  = 2个字节
	1个中文(含繁体) = 2个字节
	中文标点 = 2个字节 
  1. varchar类型
    存储值和值的长度,适用于长度变化明显,执行效率较低
4.0版本以下,varchar(20),指的是20字节,
如果存放UTF8汉字时,只能存6个(每个汉字3字节)

5.0版本以上,varchar(20),指的是20字符,
无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节

Mysql5根据编码不同,存储大小也不同,具体有以下规则:
1. 存储限制
varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用12个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过655352.编码长度限制
字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;
字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。
若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。
  1. int类型
    所有的数据类型中时空复杂度最好,可以进行算数运算或排序,能用尽量用

int2 是2字节 有符号整型,额定16位,符号占1位,余下15位2进制位表示数值 。
int4 是4字节 有符号整型,额定32位, 符号占1位,余下31位2进制位表示数值 。
int8 是8字节 有符号整型,额定64位,符号占1位,余下63位2进制位表示数值 。

  1. float类型/double类型
    对精度要求不高,优先使用float其次是使用double来进存储。

  2. decimal类型
    如果对精度要求比较高,效率低。、

  3. date类型
    时间存储精确到天

  4. datetime类型
    时间存储精确到秒

  5. varchar(10)和char(10)的差别是什么?存储超过时候会发生什么问题呢?这个问题其实也相对经典,我也是整了很久才搞清楚的。在MYSQL5,5以后,varchar(x)x中范其实是存储字段的长度范围,就是一个字符代表一个长度,不管这个字符是汉子还是字符都算是一个长度单位。varchar虽然设置长度值,可是因为varchar是可变的长度类型,也就是当存储的长度小于x时候,其实实际的存储空间不是x而是实际存储的字符长度+一些标示空间。当然如果超过x的长度的话还是会报错的。而char(y)中y的值就是存储空间实际的存储长度,超过这个长度的话就会报错。

编码字节表

  1. ASCIIS码
  • 1个英文字母(不分大小写)= 1个字节的空间
  • 1个中文汉字 = 2个字节的空间
  • 1个ASCII码 = 1个字节
  1. UTF-8编码
  • 1个英文字符 = 1个字节
  • 英文标点 = 1个字节
  • 1个中文(含繁体) = 3个字节
  • 中文标点 = 3个字节
  1. Unicode编码
  • 1个英文字符 = 2个字节
  • 英文标点 = 2个字节
  • 1个中文(含繁体) = 2个字节
  • 中文标点 = 2个字节
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆羽飘扬

如果有用,请支持一下。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值