MYSQL数据库表字段类型(一)

MySQL支持多种数据类型,主要有数值类型,日期/时间类型和字符串类型。

整数类型
浮点数类型和定点数类型
日期与时间类型

链接
字符串类型
二进制字符串类型

整数类型

数值类型主要用来存储数字,MySQL提供了多种数值数据类型,不同的数据类型提供了不同的取值范围,可以存储的值范围越大,其所需要的存储空间也会越大。

类型名称说明存储需求
TINYINT很小的整数1字节
SMALLINT小的整数2字节
MEDIUMINT中等大小的整数3字节
INT(INTEGER)普通大小的整数4字节
BIGINT大整数8字节

这里补充一个基础知识,TINYINT需要一字节8(bits)来存储,那么它的无符号数的最大值为28 -1=255,有符号数的最大值为27 -1=127。

无符号数最大为255(而无符号数只能表示非负数即>=0),有符号数第一位(图上为7的位置)0和1分别表示正负,所以最大为127,最小为-127。其他类型的整数的取值范围计算方法相同,如果插入的数值不在其范围之中MySQL就会报错。

数据类型有符号无符号
TINYINT-128-1270-255
SMALLINT-32767-327670-65535
MEDIUMINT-8388608-83886070-16777215
INT(INTEGER)-2147483648-21474836470-4294967295
BIGINT-922337203685477508-9223372036854775080-18446744073709551615

浮点数类型和定点数类型

MYSQL中使用浮点数和定点数来表示小数。浮点数类型有两种:单精度浮点类型(FLOAT)和双精度浮点类型(DOUBLE)

类型名称说明存储需求
FLOAT单精度浮点数4字节
DOUBLE双精度浮点数8字节
DECIMAL(M,D),DEC压缩的“严格”定点数M+2字节

DECIAMAL类型不同于FLOAT和DOUBLE,DECIMAL实际以串存放的,可能的最大取值范围与DOUBLE一样,但是其有效的取值范围由M和D的值决定。如果改变M和固定D,则其取值范围将随M的变大而变大。

日期与时间类型

类型名称日期格式日期范围存储需求
YEARYYYY1901-21551字节
TIMEHH:MM:SS-839:59:59~838:59:593字节
DATEYYYY-MM-DD1000-01-01~9999-12-33字节
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00~9999-12-31 23:59:598字节
TIMESTAMPYYYY-MM-DD HH:MM:SS1970-01-01 00:00:01 UTC~ 2038-01-19 03:14:07 UTC4字节
YEAR

YEAR类型是一个单字节类型,用于表示年,在存储时只需要1字节。可以使用各种指定YEAR值,如下所示:

  1. 可以使用4位字符串(数字字符串如’2012’)或4位数字格式表示。插入’2010’或插入2010,插入到数据库的值均为2010。
  2. 以2位字符串格式表示的YEAR,范围位’00’到‘99’。‘00-69’和‘70-99’范围的值分别被转换为2000-2069和1970-1999范围的YEAR值。‘0’与‘00’作用相同。插入超过取值范围的值将被转换为2000。
  3. 以2位数字表示的YEAR,范围为1-99.1-69和70-99范围的值分别转换位2001-2069和1970-1999范围的YEAR值。注意:在这里0值将被转换位0000,而不是2000。
TIME

TIME类型用在只需要时间信息的值,在存储时需要3字节,格式位’HH:MM:SS’。其中,HH表示小时,MM表示分钟,SS表示秒。TIME类型的取值范围位-838:59:59~838:59:59,小时部分会如此大的原因是TIME类型不仅只表示一天的时间,还可能时某个事件过去的时间或两个事件之间的时间间隔。

  1. 'D HH:MM:SS’格式的字符串。可以使用下面任何一种"非严格的"语法:‘HH:MM:SS’,‘HH:MM’,‘D HH:MM’,‘D HH’或‘SS’。这里的D表示日,可以取0-34之间的值。在插入数据库时,D被转换位小时保存,格式位’D*24+HH’。
  2. 'HHMMSS’格式的,没有间隔符的字符串或者HHMMSS格式的数值,假定时有意义的时间。例如:‘101112’被理解位’10:11:12’,但’109712’是不合法的(它有一个没有意义的分钟部分),存储时将变为00:00:00。

如果没有冒号,MYSQL解释值时,假定最右边的两位表示秒。(MySQL解释TIME值为过去的时间而不是当天的时间。)例如,读者可能认为’1112’和1112表示11:12:00(11点12分),但MYSQL将它们解释为00:11:12(11分12秒)。同样’12’和12被解释为00:00:12。相反,TIME值中如果使用冒号则肯定被看作当天的时间,也就是说,'11:12’表示11:12:00,而不是00:11:12。

DATE

DATE类型用在仅需要日期值时,没有时间部分,在存储时需要3字节。日期格式为’YYYY-MM-DD’。其中,YYYY表示年,MM表示月,DD表示日。在给DATE类型的字段赋值时,可以使用字符串类型或数字类型的数据插入,只要符合DATE的日期格式即可。

  1. 以’YYYY-MM-DD’或者’YYYYMMDD’字符串格式表示的日期,取值范围为’1000-01-01’-‘9999-12-3’。例如,输入’2012-12-31’或者’20121231’,插入数据库的日期都为2012-12-31。
  2. 以’YY-MM-DD’或者’YYMMDD’表示的日期,在这里YY表示两位的年值。包含两位年值的日期会令人模糊,因为不知道世纪。MySQL使用以下规则解释两位年值:‘00-69’范围的年值转换为’2000-2069’;‘70-99’范围的年值转换为’1970-1999’。例如,输入‘12-12-31’,插入数据库的日期为2012-12-31;输入’981231’,插入数据的日期为1998-12-31。
  3. 以YY-MM-DD或者YYMMDD数字格式表示的日期,与前面相似,00-69范围的年值转换为2000-2069,70-99范围的年值转换为1970-1999。例如,输入12-12-31插入数据库的日期为2012-12-31;输入981231,插入数据的日期为1998-12-31。
  4. 使用CURRENT_DATE或者NOW(),插入当前系统日期。
DATETIME

DATETIME类型用于需要同时包含日期和时间信息的值,在存储时需要8字节。日期格式为’YYYY-MM-DD HH:MM:SS’。其中,YYYY表示年,MM表示年,DD表示日,HH表示小时,MM表示分钟,SS表示秒。在给DATETIME类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合DATETIME的日期格式即可。

  1. 以’YYYY-MM-DD HH:MM:SS’或者’YYYYMMDDHHMMSS’字符串表示的值,取值范围为’1000-01-01 00:00:00’~‘9999-12-3 23:59:59’。输入’2012-12-31 05:05:05’或者’20121231050505’,插入数据库的DATETIME值都为2012-12-31 05:05:05。
  2. 以’YY-MM-DD HH:MM:SS’或者’YYMMDDHHMMSS’字符串格式表示的日期,在这里YY表示两位的年值。与前面相同。'00-69’和’70-99’范围的年值和上面转换方式相同。
  3. 以YYYYMMDDHHMMSS或者YYMMDDHHMMSS数字格式表示的日期和时间。例如,输入20121231050505,插入数据库的DATETIME为2012-12-31 05:05:05;输入981231050505,插入数据的DATETIME为1998-12-31 05:05:05。
TIMESTAMP

TIMESTAMP的显示格式与DATETIME相同,显示宽度固定在19个字符,日期格式为YYYY-MM-DD HH:MM:SS,在存储时需要4字节。TIMESTAMP列的取值范围小于DATETIME的取值范围,为’1970-01-01 00:00:01’UTC- '2038-01-19 03:14:07’UTC。其中,UTC~ '2038-01-19 03:14:07’UTC。其中,UTC为世界标准时间,因此在插入数据时,要保证在合法的取值范围内。

TIMESTAMP和DATATIME除了存储字节和支持的范围不同外,还有一个最大的区别就是:DATETIME在存储日期数据时,按实际输入的格式存储,即输入什么就存储什么,与时区无关;而TIMESTAMP值的存储时以UTC(世界标准时间)格式保存的,存储时对当前时区进行转换,检索时在在转换回当前时区。查询时,不同时区显示的值是不同的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值