MySQL数据类型

2016/05/06 数据库

MySQL支持的数据类型

  • 数值类型
  • 日期和时间类型
  • 字符串类型
  • ENUM类型
  • SET类型

数值类型

整数类型

整数类型 字节 最小值 最大值
TINYINT 1 有符号 -128 无符号 0 有符号 127 无符号 255
SMALLINT 2 有符号 -32768 无符号 0 有符号 32767 无符号 65535
MEDIUMINT 3 有符号 -8388608 无符号 0 有符号 8388607 无符号 16777215
INT/INTEGRER 4 有符号 -2147483648 无符号 0 有符号 2147483647 无符号 4294967295
BIGINT 8 有符号 -9223372036854775808 无符号 0 有符号 9223372036854775807 无符号 18446744073709551615
  • zerofill
    1. 整形数据类型名称后可以指定显示宽度,如int(5)表示当数值宽度小于5时,在左侧填满宽度,一般配合zerofill使用。若不指定,默认是int(11)。
    2. 如果一列指定了zerofill,则MySQL自动添加UNSIGNED属性
  • auto_increment
    1. 整数型数据还有一个属性:AUTO_INCREMENT。从1开始,每行增加1。
    2. 一个表中只能有一个AUTO_INCREMENT
    3. AUTO_INCREMENT列应该定义为NOT NULL,并定义为PRIMARY KEY或UNIQUE
        CREATE TABLE tablename (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY);    
      
        CREATE TABLE tablename (id INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(id));    
      
        CREATE TABLE tablename (id INT AUTO_INCREMENT NOT NULL, UNIQUE(id));    
      

浮点数和定点数类型

浮点数类型 字节 最小值 最大值
FLOAT 4 +-1.175494351E-38 +-3.402823466E+38
DOUBLE 8 +-2.2250738585072014E-308 +-1.79769313486231757E+308
定点数类型 字节 最小值 最大值
DEC(M,D) M+2 有效取值范围由M,D决定  
DECIMAL(M,D) M+2 有效取值范围由M,D决定  
  • 定点数在MySQL内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。
  • (M,D)表示该值一共显示M为数字(整数位+小数位),其中D位位于小数点后边。M和D又称为精度和标度。
  • 顶点数decimal在不指定MD时,默认M=10,D=0

位类型

位类型 字节 最小值 最大值
BIT(M) 1~8 BIT(1) BIT(64)
  • BIT(M)中M的范围为1~64
  • 直接使用select无法看到BIT位的内容,需要用bin()和hex()函数进行读取。

日期和时间类型

日期和时间类型 字节 最小值 最大值
DATE 4 1000-01-01 9999-12-31
DATETIME 8 1000-01-01 00:00:00 9999-12-31 23:59:59
TIMESTAMP 4 19700101080001 2038年的某个时刻
TIME 3 -838:59:59 838:59:59
YEAR 1 1901 2155
  • 如果需要经常插入或者更新日期为当前系统时间,则通常使用TIMESTAMP来表示。TIMESTAMP值返回后显示为“YYYY-MM-DD HH:MM:SS”格式的字符串,显示宽度固定为19个字符。如果想要获得数字值,应在TIMESTAMP列添加“+0”。
  • MySQL只给表中的第一个TIMESTAMP字段设置默认值为系统日期,如果有第二个TIMESTAMP类型,则默认值设置为零值。
  • TIMESTAMP的插入和查询,会转化为本地时区,所以有其他系统时区转换的问题。
  • 表中第一个TIMESTAMP列自动设置为当前的日期和时间。在插入或更新一行但不明确给TIMESTAMP列赋值时也会自动设置该列的值为当前的日期和时间,当插入的值超出取值范围时,MySQL认为该值溢出,使用“0000-00-00 00:00:00”进行填补,没有warning。

字符串类型

字符串类型 字节 描述及存储需求
CHAR(M) M M为0~255之间数
VARCHAR(M)   M为0~65535之间数,值得长度+1个字节
TINYBLOB   允许长度为0~255字节,值得长度+1个字节
BLOB   允许长度为0~65535字节,值得长度+2个字节
MEDIUMBLOB   允许长度为0~167772150字节,值得长度+3个字节
LONGBLOB   允许长度为0~4294967295字节,值得长度+4个字节
TINYTEXT   允许长度为0~255字节,值得长度+2个字节
TEXT   允许长度为0~65535字节,值得长度+2个字节
MEDIUMTEXT   允许长度为0~167772150字节,值得长度+3个字节
LONGTEXT   允许长度为0~4294967295字节,值得长度+4个字节
BINARY(M) M 允许长度为0~M个字节的变长字节字符串,值得长度+1个字节
VARBINARY(M)   允许长度0~M个字节的定长字节字符串
  • CHAR和VARCHAR
    1. CHAR的长度固定为创建表时生命的长度,而VARCHAR为可变长字符串
    2. 检索时,CHAR删除了尾部的空格,而VARCHAR会保留这些空格。
  • BINARY和VARBINARY
    1. 类似VAR和VARCHAR,不同的是存储的是二进制字符串
    2. 当保存BINARY值时,在值得最后通过填充0x00(零字节)以达到指定的字段定义长度。如BINARY(3)中插入’a’,变为”a\0\0”

ENUM类型

  1. 值得范围在创建表时通过枚举方式显示指定。 create table t(gender enum('M', 'F'));
  2. 不区分大小写。
  3. 当插入不在ENUM指定范围内的值时,并没有警告,而是插入ENUM中的第一个值。

SET类型

  1. SET和ENUM类似,最主要的区别是SET类型一次可以选取多个成员,而ENUM只能选择一个。
  2. 对于超出允许值范围的值,SET不允许插入;而对于包含重复成员的集合,则只取一次。

Search

    Post Directory