MySQL数据类型

MySQL数据类型

简介:
MySQL数据类型大体分为整数类型、实数类型、字符串类型、日期和时间类型、位数类型、JSON类型

一、 整数类型
整数类型有:
1、 TINYNT类型 占据大小1个字节,有符号的取值范围为-128127,无符号的取值范围为0255
2、 SMALLNT类型 占据大小2个字节,有符号的取值范围为-3276832767,无符号的取值范围为065535
3、 MEDIUMINT类型 占据大小3个字节,有符号的取值范围为-8386088388607,无符号的取值范围为016777215
4、 INT类型 占据大小4个字节,有符号的取值范围为-2147483648~2147483647 无符号的取值范围为0~4294967295
5、 BIGNT类型 占据大小8个字节,有符号的取值范围为-92233720368547758089223372036854775807,无符号的取值范围为018445744073709551615

小结:
整数类型有可选的unsigned属性,表示不允许负值,这可以使正数的上限提高一倍(还多1)有符号和无符号类型使用相同的存储空间,并具有相同的性能,因此可以根据实际情况选择合适的类型
MySQL可以为整数类型指定宽度,例如INT(11)对大多数应用来说这是没有意义的,它不会限制合法范围,只是规定了MySQL的一些交互工具(例如mysql命令行客户端)用来显示字符的个数,对与存储和计算来说,INT(1)和INT(20)是相同的

二、 实数类型
实数类型有
1、 FLOAT类型,占据大小4个字节,有符号的取值范围为-3.402823466E+38~-1.175494351E-38或者0 and 1.175494351E-38~3.402823466E+38,无符号的取值范围为0 and 1.175494351E-38~3.402823466E+38
2、 DOUBLE类型 占据大小8个字节 有符号的取值范围为-1.797693148623157E+308~-2.2250738585072014E-308或者0 and 2.2250738585072014E-308~1.797693148623157E+308,无符号的取值范围为0 and 2.2250738585072014E-308~1.797693148623157E+308
3、 DECMAL类型 占据大小未知,有符号的取值范围为 根据M和D的值 无符号的取值范围为 根据M和D的值

小结
DECMAL类型最多允许65个数字,表示为DECMAL(M,D)的格式。例如DECMAL(5,2)表示最多保存5个数字,其中2个是小数,表示的范围在-999.99到999.99之间,如果小数位D为0,则DECMAL值不包含小数点或小数部分。
FLOAT和DOUBLE类型只能使用标准的浮点运算进行近似运算,如果需要精确运算,例如金额计算,则需要使用DECMAL类型
因为cpu不支持对DECMAL的直接计算,所以在mysql5.0以上的版本中,mysql服务器自身实现了DECMAL的高精度计算。相对而言,cpu直接支持原生的浮点计算,所以浮点计算明显更快
涉及到金额计算,在数据量比较大的时候,可以考虑用BIGINT代替DECMAL。例如金额单位精确到分99.99可以用9999表示,以分为单位存储在BIGINT字段里,这样可以同时避免浮点数计算的不精确和DECMAL精确计算代价高的问题

注:FLOA和DOUBLE可表示的范围不是完全连续的浮点数,由于精度的限制,有些极小的小数是表示不了的

三、 字符串类型
字符串类型有:

  1. CHAR类型 占据大小为0~255字节 用途:定长字符串
  2. VARCHAR类型 占据大小为0~65535字节 用途:变长字符串
  3. BINARY类型 占据大小为0~255字节 用途:定长二进制
  4. VARBINARY类型 占据大小0~65535字节 用途:变长二进制
  5. TINYBLOB类型 占据大小0~255z字节 用途:变长二进制
  6. BLOB类型 占据大小0~65535字节 用途:变长二进制
  7. MEDIUMBLOB类型 占据大小0~16777215字节 用途:变长二进制
  8. LONGBLOB类型 占据大小0~4294967295或4GB(232-1)字节 用途:变长二进制
  9. TINYTEXT类型 占据大小0~255字节 用途:变长字符串
  10. TEXT类型 占据大小0~65535字节 用途:变长字符串
  11. MEDIUMTEXT类型 占据大小0~16777215字节 用途:变长字符串
  12. LONGTEXT类型 占据大小0~4294967295或4GB(232-1)字节 用途:变长字符串

四、 日期和时间类型
日期和时间类型有:

  1. DATE类型 占据大小3个字节 取值范围1000-01-01~9999-12-31格式:YYYY-MM-DD 用途:日期值
  2. TIME类型 占据大小3个字节 取值范围-838:59:59~838:59:59 格式:hh:mm:ss 用途:时间值
  3. YEAR类型 占据大小1个字节 取值范围1901~2155 格式:YYYY 用途:年份值
  4. DATETIME类型 占据大小8个字节 取值范围1000-01-01 00:00:00~9999-12-31 23:59:59 格式:YYYY-MM-DD hh:mm:ss 用途:日期和时间值
  5. TIMESTAM类型 占据大个四个字符 取值范围 1070-01:00:00UTC~2038-01-19 03:14:07UTC 格式:YYYY-MM-DD hh:mm:aa 用途:日期和时间

小结:
DATETIME使用8个字节的存储空间,和时区无关
TIMESTAMP使用4个字节的存储空间,显示的时间依赖时区,保存了从1970年1月1日午夜(格林尼治标准时间)以来的秒数,它和unix的时间戳相同。TIMESTAMP只能表示从1970年到2038年
如果插入和更新新数据时没有指定TIMESTAM的值,MySQL会默认的更新TIMESTAMP系统

五、 位数类型
位数类型有:
BIT类型 取值范围为1~64位
小结:
BIT(1)定义一个包含1个位数的数据集,BIT(2)包含2个位。以此类推,最大长度为64个位
Mqsql把BIT当做字符串类型,而不是数字类型,当检查BIT的值时,结果时对应的二进制表示符ASCI码转换后的字符,然而在数字上下文场景中检查的时候,会使用二进制表示的数字
例如,如果存储一个值b’00111001’(十进制的值为57)到BIT的列并检索它们时,得到的结果为9(9的ASCI码是57),如果对该字段进行加减。则返回的价格为57。

六、 JOSN类型
MySQL8支持直接存储json格式字符串,对应的是json数据类型
Json数据列会自动验证json的数据格式 如果格式不正确会报错
最优化存储格式。Json数据类型会把json格式的字符串转换成内部各式,能够快速的读取其中的元素

总结:
	MySQL设计表的数据类型的时候,下面几个简单的原则有助于设计出好的数据类型
	更小的更好
选择你认为不会超过范围的最小类型,更小的数据类型通常更快,因为它们占用更小的磁盘、内存和CPU缓存,并且处理时需要的CPU周期更少
简单就好
	简单的数据类型操作通常更快。例如整形的操作比字符串更快,因为字符串有字符集和校对规则(排序规则)比整形更复杂
尽量避免null
	如果字段可以不存储null值,尽量把字段设置成not null因为可以为null的列使得索引、索引统计和值比较更复杂,可为null的列会使用更多的存储空间,在mysql里也需要特殊处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值