来自 IT技术新闻 2018-12-17 09:32 的文章

MySQL数据库的基本数据类型,mysql数据类型

MySQL数据库的基本数据类型,mysql数据类型


整数类型

数值型数据类型主要用来存储数字,包含的类型有:

TINYINT、SMALLINT、MEDIUMINT、 INT(INTEGER)、 BIGINT。

下面通过一个例子来查看各种类型的所占有的数据空间,注意,我使用的版本是mysql5.6.28,可以通过下面的命令来查看:

CREATE TABLE tmp1 ( x TINYINT, y SMALLINT, z MEDIUMINT, m INT, n BIGINT );

执行成功之后,便用DESC查看表结构,结果如下:

DESC tmp1;

CREATE TABLE tmp2 ( x FLOAT(5,1), y DOUBLE(5,1), z DECIMAL(5,1) );

向表中插入数据:

INSERT INTO tmp2 VALUES(5.12, 5.15, 5.123);

SHOW WARNINGS;

SELECT * FROM tmp2;

CREATE TABLE tmp3( y YEAR );

向表中插入数据:

INSERT INTO tmp3 values(2010),('2010');

INSERT INTO tmp3 values ('2166');

语句执行之后,MySQL给出了一条警告提示,使用SHOW查看错误信息:

SHOW WARNINGS;

SELECT * FROM tmp3;

MySQL中YEAR类型的数据的取值范围是1901~2155.这里的YEAR是指的YEAR(4),此外,还有YEAR(2)。对于YEAR(2),其显示年份的范围为1970~2070。在YEAR(2)的设置下,00~69代表2000~2069年。

向tmp3表中y字段插入2位字符串表示的YEAR值,分别为’0’、’00’、’77’和’10’,SQL语句如下:

首先删除表中的数据:

DELETE FROM tmp3;

向表中插入数据:

INSERT INTO tmp3 values('0'),('00'),('77'),('10');

查看结果:

SELECT * FROM tmp3;

DELETE FROM tmp3;

向表中插入数据:

INSERT INTO tmp3 values(0),(78),(11);

查看结果:

SELECT * FROM tmp3;

CREATE TABLE tmp4( t TIME );

向表中插入数据:

INSERT INTO tmp4 values('10:05:05 '), ('23:23'), ('2 10:10'), ('3 02'),('10');

查看结果:

SELECT * FROM tmp4;

TIME类型占用3字节,显示的范围为“-838:59:59”~“838:59:59”。有人会奇怪为什么TIME类型的时间可以大于23。因为TIME类型不仅可以用来保存一天中的时间,也可以用来保存时间间隔,同时这也解释了为什么TIME类型也可以存在负值。和DATETIME类型一样,TIME类型同样可以显示微秒时间,但是在插入时,数据库同样会进行截断操作

向表tmp4中插入值’101112’,111213,’0’,107010,SQL语句如下:

首先删除表中的数据:

DELETE FROM tmp4;

向表中插入数据:

INSERT INTO tmp4 values('101112'),(111213),( '0');

再向表中插入数据:

INSERT INTO tmp4 values ( 107010);

show warnings;

SELECT * FROM tmp4;

DELETE FROM tmp4;

向表中插入数据:

INSERT INTO tmp4 values (CURRENT_TIME) ,(NOW());

查看结果:

SELECT * FROM tmp4;

CREATE TABLE tmp5(d DATE);

向表中插入“YYYY-MM-DD”和“YYYYMMDD”格式日期:

INSERT INTO tmp5 values('1998-08-08'),('19980808'),('20101010');

查看插入结果:

SELECT * FROM tmp5;

DATE占用3字节,可显示的日期范围为“1000-01-01”到“9999-12-31”。

向tmp5表中插入“YY-MM-DD”和“YYMMDD”字符串格式日期,SQL语句如下:

首先删除表中的数据:

DELETE FROM tmp5;

向表中插入“YY-MM-DD”和“YYMMDD”格式日期:

INSERT INTO tmp5 values ('99-09-09'),( '990909'), ('000101') ,('111111');

查看插入结果:

SELECT * FROM tmp5;

如果没有特别的条件和要求,还是在输入时按照标准的“YYYY-MM-DD HH:MM:SS”格式来进行。

向tmp5表中插入YY-MM-DD和YYMMDD数字格式日期,SQL语句如下:

首先删除表中的数据:

DELETE FROM tmp5;

向表中插入YY-MM-DD和YYMMDD数字格式日期:

INSERT INTO tmp5 values (99-09-09),(990909), ( 000101) ,( 111111);

查看插入结果:

SELECT * FROM tmp5;

DELETE FROM tmp5;

向表中插入系统当前日期:

INSERT INTO tmp5 values( CURRENT_DATE() ),( NOW() );

查看插入结果:

SELECT * FROM tmp5;

CREATE TABLE tmp6( dt DATETIME );

向表中插入“YYYY-MM-DD HH:MM:SS”和“YYYYMMDDHHMMSS”格式日期:

INSERT INTO tmp6 values('1998-08-08 08:08:08'),('19980808080808'),('20101010101010');

查看插入结果:

SELECT * FROM tmp6;

DATETIME占用8字节,是占用空间最多的一种日期类型。它既显示了日期,同时也显示了时间。其可以表达的日期范围为“1000-01-01 00:00:00”到“9999-12-31 23:59:59”。

在MySQL 5.5版本之前(包括5.5版本),数据库的日期类型不能精确到微秒级别,任何的微秒数值都会被数据库截断。

不过MySQL数据库提供了函数MICROSECOND来提取日期中的微秒值

DELETE FROM tmp6;

向表中插入“YY-MM-DD HH:MM:SS”和“YYMMDDHHMMSS”格式日期:

INSERT INTO tmp6 values('99-09-09 09:09:09'),('990909090909'),('101010101010');

查看插入结果:

SELECT * FROM tmp6;

DELETE FROM tmp6;

向表中插入YYYYMMDDHHMMSS和YYMMDDHHMMSS数字格式日期和时间:

INSERT INTO tmp6 values(19990909090909), (101010101010);

查看插入结果:

SELECT * FROM tmp6;

DELETE FROM tmp6;

向表中插入系统当前日期:

INSERT INTO tmp6 values( NOW() );

查看插入结果:

SELECT * FROM tmp6;

CREATE TABLE tmp7( ts TIMESTAMP);

向表中插入数据:

INSERT INTO tmp7 values ('19950101010101'),

('950505050505'),

('1996-02-02 02:02:02'),

('[email protected]@03 [email protected]@03'),

(121212121212),

( NOW() );

查看插入结果:

SELECT * FROM tmp7;

DELETE FROM tmp7;

向表中插入系统当前日期:

INSERT INTO tmp7 values( NOW() );

查看当前时区下日期值:

set time_zone='+10:00';

再次查看插入时的日期值:

SELECT * FROM tmp7;

type_name(fsp)

其中,type_name的类型可以是TIME、DATETIME和TIMESTAMP。fsp表示支持秒的小数部分的精度,最大为6,表示微秒(microseconds);默认为0,表示没有小数部分,同时也是为了兼容之前版本中的TIME、DATETIME和TIMESTAMP类型。对于时间函数,如CURTIME()、SYSDATE()和UTC_TIMESTAMP()也增加了对fsp的支持,例如:

CREATE TABLE tmp8( ch CHAR(4), vch VARCHAR(4) );

输入数据:

INSERT INTO tmp8 VALUES('ab ', 'ab ');

查询结果:

SELECT concat('(', ch, ')'), concat('(',vch,')') FROM tmp8;

CREATE TABLE tmp9( enm ENUM('first','second','third') );

插入各个列值:

INSERT INTO tmp9 values('first'),('second') ,('third') , (NULL);

查看索引值:

SELECT enm, enm+0 FROM tmp9;

CREATE TABLE tmp10 (soc INT, level enum('excellent', 'good','bad') );

插入数据:

INSERT INTO tmp10 values(70,'good'), (90,1),(75,2),(50,3);

再次插入数据:

INSERT INTO tmp10 values (100,'best');

SELECT * FROM tmp10;

CREATE TABLE tmp11 ( s SET('a', 'b', 'c', 'd'));

插入数据:

INSERT INTO tmp11 values('a'),( 'a,b,a'),('c,a,d');

INSERT INTO tmp11 values ('a,x,b,y');

由于插入了SET列不支持的值,因此MySQL给出警告提示。

SELECT * FROM tmp11;

CREATE TABLE tmp12( b BIT(4) );

插入数据:

INSERT INTO tmp12 VALUES(2), (9), (15);

查询插入结果:

SELECT BIN(b+0) FROM tmp12;

CREATE TABLE tmp13( b binary(3), vb varbinary(30) );

插入数据:

INSERT INTO tmp13 VALUES(5,5);

查看两个字段存储数据的长度:

SELECT length(b), length(vb) FROM tmp13;

SELECT b,vb,b = '5', b='5\0\0',vb='5',vb = '5\0\0' FROM tmp13;

由执行结果可以看出,b字段和vb字段的长度是截然不同的,因为b字段不足的空间填充了’\0’,而vb字段则没有填充。

参考:
  • MySQL日期数据类型、时间类型使用总结
  • MySQL技术内幕:时间和日期数据类型

http://www.bkjia.com/Mysql/1114905.htmlwww.bkjia.comtruehttp://www.bkjia.com/Mysql/1114905.htmlTechArticleMySQL数据库的基本数据类型,mysql数据类型 整数类型 数值型数据类型主要用来存储数字,包含的类型有: TINYINT、SMALLINT、MEDIUMINT、 INT(INT...

本文源自: AG88平台