MySQL数据类型详解

MySQL中定义数据字段的类型对你数据库的优化是非常有意义的。
MySQL支持多种类型,大致可以分为三类:数值、日期(时间)和字符(字符串)类型。
一、数值类型
1、整数类型(精确值)
MySQL支持SQL标准整数类型 INTEGER(或INT)和 SMALLINT。作为一个可扩展标准,MySQL也支持整数类型 TINYINTMEDIUMINTBIGINT
整数类型的存储范围如下图:
整数类型

2、定点类型(精确值)
DECIMALNUMERIC 类型用来存储精确的数值数据。如:货币类数据精度要求非常重要,常使用 DECIMAL。在MySQL中,NUMERIC被实现为DECIMAL,所以DECIMAL的用法同样适用于 NUMERIC

DECIMAL声明列的精度和标度通常是指定的,例如:

salary DECIMAL(5,2)

如上,5是精度, 2是规模。精度代表的被存储为值显著数字的数目,标度表示的可以存储小数点后面的位数。MySQL的默认精度为10,默认刻度为0。

标准SQL要求,DECIMAL(5,2)能够存储任何一个五位数和两位小数,所以值可以存储在salary 列范围-999.99至 999.99。

3、浮点数类型(近似值)
FLOATDOUBLE类型代表近似数字数据值。
FLOAT:单精度(四个字节)、DOUBLE:双精度值(四个字节)

4、位值类型
BIT数据类型可用来保存位字段值。BIT(M)类型允许存储M位值。M范围为1~64,默认为1。BIT其实就是存入二进制的值,类似010110。

如果存入一个BIT类型的值,位数少于M值,则左补0.
如果存入一个BIT类型的值,位数多于M值,MySQL的操作取决于此时有效的SQL模式: 溢出处理

  • 如果模式未设置,MySQL将值裁剪到范围的相应端点,并保存裁减好的值。
  • 如果模式设置为traditional(“严格模式”),超出范围的值将被拒绝并提示错误,并且根据SQL标准插入会失败。

二、日期类型
日期和时间类型有:date、time、year、datetime、timestamp。如图:
日期类型
datetime与timestamp两种类型的区别:

  • 如图,datetime占8个字节,timestamp占4个字节;
  • 由于大小的区别,datetime与timestamp能存储的时间范围也不同,datetime的存储范围为1000-01-01 00:00:00——9999-12-31 23:59:59,timestamp存储的时间范围为19700101080001——20380119111407
  • datetime默认值为空,当插入的值为null时,该列的值就是null;timestamp默认值不为空,当插入的值为null的时候,mysql会取当前时间
  • datetime存储的时间与时区无关,timestamp存储的时间及显示的时间都依赖于当前时区。

三、字符串类型
字符串类型有:CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM 和 SET
1、CHAR 和 VARCHAR

  • char是固定长度字符串,其长度范围为0~255且与编码方式无关,无论字符实际长度是多少,都会按照指定长度存储,不够的用空格补足;varchar为可变长度字符串,在utf8编码的数据库中其长度范围为0~21844
  • char实际占用的字节数即存储的字符所占用的字节数,varchar实际占用的字节数为存储的字符+1或+2或+3
  • MySQL处理char类型数据时会将结尾的所有空格处理掉而varchar类型数据则不会

2、BLOB和TEXT类型
BLOB,二进制大对象,二进制字符串(字节字符串)。用于存储图片、音频、视屏等二进制数据。
四个BLOB 类型:TINYBLOB,BLOB, MEDIUMBLOB,和LONGBLOB。区别在于他们能够保存的值的最大长度。
TEXT,非二进制字符串(字符串)。
四个TEXT类型: TINYTEXT,TEXT, MEDIUMTEXT,和LONGTEXT。它们和对应的BLOB具有相同的长度和存储需求。
text和varchar的区别和联系
联系在于当varchar(M)的M大于某些数值时,varchar会自动转为text:

  • M>255时转为tinytext
  • M>500时转为text
  • M>20000时转为mediumtext

所以过大的内容varchar和text没有区别,varchar(M)和text的区别在于:

单行64K即65535字节的空间,varchar只能用63352/65533个字节,但是text可以65535个字节全部用起来。
text可以指定text(M),但是M无论等于多少都没有影响;text不允许有默认值,varchar允许有默认值。

varchar和text,建议使用是能用varchar就用varchar而不用text(存储效率高),varchar(M)的M有长度限制,如果大于限制,可以使用mediumtext(16M)或者longtext(4G)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值