关于MySQL,你了解多少?_数据类型

来源:互联网 发布:方正字体排查软件 编辑:程序博客网 时间:2024/05/24 15:37

MySQL支持的数据类型

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

数值类型

整数类型 字节 最小值 最大值 TINYINT 1 有符号-128 /无符号0 有符号127 /无符号255 SMALLINT 2 有符号-32768 /无符号0 有符号32767 /无符号65535 MEDIUMINT 3 有符号-8388608 /无符号0 有符号8388607 /无符号1677215 INT、INTEGER 4 有符号-2147483648 /无符号0 有符号2147483647 /无符号4294967295 BIGINT 8 有符号-9223372036854775808 /无符号0 有符号9223372036854775807 /无符号18446744073709551615 浮点数类型 字节 最小值 最大值 FLOAT 4 ±1.175494351E-38 ±3.402823466E+38 DOUBLE 8 ±2.2250738585072014E-308 ±1.7976931348623157E+308 定点数类型 字节 描述 DEC(M,D) /DECIMAL(M,D) M+2 最大取值范围与DOUBLE相同,给定DECIMAL的有效取值范围由M和D决定 位类型 字节 最小值 最大值 BIT(M) 1~8 BIT(1) BIT(64)

**注意:**INT是INTEGER的同名词,DEC是DECIMAL的同名词

关于整数的可选属性:

UNSIGNED:如果需要在字段里面保存非负数或者较大的上限值时,可以用此选项,它的取值范围是正常值的下限取0,上限值取原上限值的2倍

AUTO_INCREMENT:在需要产生唯一标识符或顺序值时,可用此属性,AUTO_INCREMENT从1开始,每行增加1,在插入NULL到一个AUTO_INCREMENT列时,MySQL插入一个比该列中当前最大值大1的值。一个表中只能有一个AUTO_INCREMENT列。对于任何想要使用AUTO_INCREMENT的列,应该定义为NOT NULL,并定义为PRIMAERY KEY或定义为UNIQUE键,例如,可按下列任何一种方式定义AUTO_INCREMENT列:

create table ai(id int not null auto_increment primary key);create table ai(id int not null auto_increment, primary key(id));create table ai(id int not null auto_increment, unique(id));

关于小数的表示:

  1. 对于小数的表示,MySQL分为两种方式:浮点数和定点数。浮点数包括float(单精度)和double(双精度),而定点数则只有decimal一种表示。定点数在MySQL内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度要求高的数据。
  2. 浮点数和定点数都可以用类型名称后加“(M,D)”的方式来进行表示,表示该值一共显示M位数字(整数位+小数位),其中D表示位于小数点后面的位数,M和D又称为精度和标度。

例如,定义float(7,4)的一个列可以显示为-999.9999,MySQL保存值时进行四舍五入,因此,如果在float(7,4)列内插入999.00009,近似结果为999.0001。值得注意的是,浮点数后面跟“(M,D)”的用法是非标准用法,如果要用于数据库的迁移,则最好不要这么使用,float和double在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统决定)来显示,而decimal在不指定精度时,默认的整位为10,默认的小数位为0。

日期时间类型

日期和时间类型

日期和时间类型 字节 最小值 最大值 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

日期和时间类型的零值表示

数据类型 零值表示 DATE 0000-00-00 DATETIME 0000-00-00 00:00:00 TIMESTAMP 00000000000000 TIME 00:00:00 YEAR 0000

注意:每种日期时间类型都有一个有效值范围,如果超出这个范围,在默认的SQLMode下,系统会进行错误提示,并将以零值来进行存储。

DATE、TIME、DATETIME是最常用的3种日期类型,TIMESTAMP和DATETIME的表示方法非常类似,区别主要有以下几点:

  1. timestamp支持的时间范围较小,datetime范围更大。
  2. 表中的第一个timestamp列自动设置为系统时间,如果在一个timestamp列中插入NULL,则该值将自动设置为当前的日期和时间。在插入和更新一行但不明确给timestamp列赋值时也会自动设置该列的值为当前的日期和时间,当插入的值超出取值范围时,MySQL认为该值溢出,使用“0000-00-00 00:00:00”进行填补。
  3. timestamp的插入和查询都受当地时区的影响,更能反映出实际的日期。而datetime只能反应出插入时当地的时区,其他时区的人查看数据必然会有误差。

函数返回的结果,其值适合DATETIME、DATE或TIMESTAMP,例如NOW()或CURRENT_DATE。

字符串类型

常规字符串类型

字符串类型 字节 描述及存储需求 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个字节 VARBINARY(M) 允许长度0-M个字节的变长字节字符串,值的长度+1个字节 BINARY(M) M 允许长度0-M个字节的定长字节字符串

特殊字符串类型

  • ENUM

    中文名称叫枚举类型,它的值范围需要在创建表时通过枚举方式显式指定,对1~255个成员的枚举需要1个字节存储;对于255~65535个成员的枚举需要2个字节存储。最多允许有65535个成员。

这里写图片描述
插入数据:
这里写图片描述
可以看出ENUM类型是忽略大小写的,在存储”M”,”f”时将它们都转成了大写,还可以看出对于插入不在ENUM指定范围内的值时,并没有返回警告,而是插入了enum(“M”,”F”)的第一个值”M”。

  • SET

    SET和ENUM非常类似,也是一个字符串对象,里面可以包含0~64个成员。根据成员的不同,存储上也有所不同。

    • 1~8成员的集合,占1个字节。
    • 17~24成员的集合,占3个字节。
    • 25~32成员的集合,占4个字节。
    • 33~64成员的集合,占8个字节。

这里写图片描述
这里写图片描述
SET和ENUM除了存储之外,最主要的区别在于SET类型一次可以选取多个成员,而ENUM则只能选一个。
这里写图片描述
但是需要注意的是:
这里写图片描述
对于超出允许值范围的值将不允许注入,而对于包含重复成员的集合将只取一次。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 三国战无双 三国之志2 放置三国 老版三国 三国7 三国记 霸业三国 三国页游 三国恋 三国恋歌词 三国乱恋 三国恋搞笑版 无双三国恋 三国恋歌词下载 恋三国 三国恋下载 三国恋战记 三国恋战记结局 听三国恋 三国恋 瑜策 三国狂战 三国之无双三国 三国战纪119 三国战记街机版 街机三国战记手机版 神将三国 董卓 神将三国董卓 街机三国将星录 三国之全面战争 三国战纪秘籍 三国战纪2007攻略 三国战纪网游 全面战争三国攻略大全 三国战纪群雄逐鹿 三国战争攻略大全 三国群英战纪 三国全面战争网游 三国群英传三 三国战争武将选择 单机版三国战记 全面战争三国秘籍