MySQL数据库的基本数据类型


整数类型

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

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

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

创建表tmp1,其中字段x、y、z、m、n数据类型依次为TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,SQL语句如下:

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

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

DESC tmp1;

可以看到,TINGINT占4位(1个字节),SMALLINT占6位,MEDIUMINT占9位,INT占11位,BIGINT占20位

浮点数类型与定点数类型

MySQL使用浮点数和定点数来表示小数。包含的类型有:

浮点类型:FLOAT、DOUBLE。

定点类型:DECIMAL。

测试案例:

创建表tmp2,其中字段x、y、z数据类型依次为FLOAT(5,1)、DOUBLE(5,1)和DECIMAL(5,1),向表中插入数据5.12、5.15和5.123,SQL语句如下:

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);

可以看到在插入数据时,MySQL给出了一个警告信息,使用SHOW WARNINGS;语句查看警告信息:

SHOW WARNINGS;

说‘z’这一列的数据被截断了,使用下面的SQL语句看看刚刚插入的数据:

SELECT * FROM tmp2;

日期与时间类型

MySQL中有多种表示日期的数据类型。它们是:

DATETIME、DATE、TIMESTAMP、TIME和YEAR。

YEAR类型测试案例:

创建数据表tmp3,定义数据类型为YEAR的字段y,向表中插入值2010,’2010’,’2166’,SQL语句如下:

首先创建表tmp3:

CREATE TABLE tmp3( y YEAR );

向表中插入数据:

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

可以知道,YEAR类型的数据在MySQL中是按照字符串格式存储的。查看一下YEAR类型数据所占用的字节空间:

可以看到,MySQL中YEAR类型的数据占用一个字节的数据空间。

再次向表中插入数据:

INSERT INTO tmp3 values (‘2166‘);

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

SHOW WARNINGS;

可以看到,插入的第3个值2166超过了YEAR类型的取值范围,此时不能正常的执行插入操作,查看结果:

SELECT * FROM tmp3;

由结果可以看到,当插入值为数值类型的2010或者字符串类型的’2010’时,都正确的储存到了数据库中;而当插入值’2166’时,由于超出了YEAR类型的取值范围,因此,不能插入值。查看资料得知,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;

由结果可以看到,字符串’0’和’00’的作用相同,分别都转换成了2000年;’77’转换为1977;’10’转换为2010。

向tmp3表中y字段插入2位数字表示表示的YEAR值,分别为0、78和11,SQL语句如下:

首先删除表中的数据:

DELETE FROM tmp3;

向表中插入数据:

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

查看结果:

SELECT * FROM tmp3;

由结果可以看到,0被转换为0000;78被转换为1978;11被转换为2011。

对比两种测试数据,可以发现:对于YEAR数据类型的数据,在进行一些特殊值插入时,以数字形式和以字符串形式进行插入时得到的结果是不一样的。

TIME类型测试案例:

创建数据表tmp4,定义数据类型为TIME的字段t,向表中插入值’10:05:05’,’23:23’,’2 10:10’,’3 02’,’10’,SQL语句如下:

首先创建表tmp4,

CREATE TABLE tmp4( t TIME );

向表中插入数据:

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

查看结果:

SELECT * FROM tmp4;

由结果可以看到,’10:05:05’被转换为10:05:05;’23:23’被转换为23:23:00;’2 10:10’被转换为58:10:00,’3 02’被转换为74:00:00;’10’被转换成00:00:10。

在使用’D HH’格式时,小时一定要使用双位数值,如果是小于10的小时数,应在前面加0。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);

可以看到,在插入数据时,MySQL给出了一个警告提示信息,使用SHOW WARNINGS;查看警告信息,如下所示:

show warnings;

可以看到,第二次在插入记录的时候,数据超出了范围,原因是107010的分钟部分超过了60,分钟部分是不会超过60的,查看结果:

SELECT * FROM tmp4;

由结果可以看到,’101112’被转换为10:11:12;111213被转换为11:12:13;’0’被转换为00:00:00;107010因为是不合法的值,因此插入00:00:00。

也可以使用系统日期函数向TIME字段列插入值。

向tmp4表中插入系统当前时间,SQL语句如下:

首先删除表中的数据:

DELETE FROM tmp4;

向表中插入数据:

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

查看结果:

SELECT * FROM tmp4;

由结果可以看到,获取系统当前的日期时间插入到TIME类型列,都是系统当前的日期时间值。

DATE类型数据测试案例:

创建数据表tmp5,定义数据类型为DATE的字段d,向表中插入“YYYY-MM-DD”和“YYYYMMDD”字符串格式日期,SQL语句如下:

首先创建表tmp5:

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;

对于插入的最后一个值,为什么不是1911-11-11或者2111-11-11之类的值呢?可以看到数据库将其视为离现在最近的一个年份,这可能不是一个非常好的习惯。如果没有特别的条件和要求,还是在输入时按照标准的“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;

可以看到,插入的第一条数据有一个警告,但是插入成功,插入的值变为了0000-00-00

向tmp5表中插入系统当前日期,SQL语句如下:

首先删除表中的数据:

DELETE FROM tmp5;

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

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

查看插入结果:

SELECT * FROM tmp5;

CURRENT_DATE只返回当前日期值,不包括时间部分;NOW()函数返回日期和时间值,在保存到数据库时,只保留了其日期部分。

MySQL允许“不严格”语法:任何标点符号都可以用作日期部分之间的间隔符。例如,’98-11-31’、’98.11.31’、’98/11/31’和’[email protected]@31’是等价的,这些值也可以正确的插入到数据库。

DATETIME数据类型测试案例:

创建数据表tmp6,定义数据类型为DATETIME的字段dt,向表中插入"YYYY-MM-DD HH:MM:SS”和"YYYYMMDDHHMMSS”字符串格式日期和时间值,SQL语句如下:

首先创建表tmp6:

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来提取日期中的微秒值

向tmp6表中插入“YY-MM-DD HH:MM:SS”和“YYMMDDHHMMSS”字符串格式日期和时间值,SQL语句如下:

首先删除表中的数据:

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;

向tmp6表中插入YYYYMMDDHHMMSS 和YYMMDDHHMMSS数字格式日期和时间值,SQL语句如下:

首先删除表中的数据:

DELETE FROM tmp6;

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

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

查看插入结果:

SELECT * FROM tmp6;

向tmp6表中插入系统当前日期和时间值,SQL语句如下:

首先删除表中的数据:

DELETE FROM tmp6;

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

INSERT INTO tmp6 values( NOW() );

查看插入结果:

SELECT * FROM tmp6;

TIMESTAMP数据类型测试案例:

创建数据表tmp7,定义数据类型为TIMESTAMP的字段ts,向表中插入值’19950101010101’,’950505050505’,’1996-02-02 02:02:02’,’[email protected]@03 [email protected]@03’,121212121212,NOW(),SQL语句如下:

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;

由结果可以看到,’19950101010101’被转换为1995-01-01 01:01:01;’950505050505’被转换为1995-05-05 05:05:05;’1996-02-02 02:02:02’被转换为1996-02-02 02:02:02;’[email protected]@03 [email protected]@03’被转换为1997-03-03 03:03:03;121212121212被转换为2012-12-12 12:12:12;NOW()被转换为系统当前日期时间2013-03-24 09:17:49。

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

向tmp7表中插入当前日期,查看插入值,更改时区为东10区,再次查看插入值,SQL语句如下:

首先删除表中的数据:

DELETE FROM tmp7;

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

INSERT INTO tmp7 values( NOW() );

查看当前时区下日期值:

查询结果为插入时的日期值,读者所在时区一般为东8区,下面修改当前时区为东10区,SQL语句如下:

set time_zone=‘+10:00‘;

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

SELECT * FROM tmp7;

然而从MySQL 5.6.4版本开始,MySQL增加了对秒的小数部分(fractional second)的支持,具体语法为:

type_name(fsp)

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

字符串类型

字符串类型用于存储字符串数据,除了可以存储字符串数据外,还可以存储声音和图片的二进制数据,但是一般情况下,声音和图片是不会存在数据库中的。

字符串有如下几种类型:

CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

将不同字符串保存到CHAR(4)和VARCHAR(4)列,说明CHAR和VARCHAR之间的差别,如表5.6所示:

对比结果可以看到,CHAR(4) 定义了固定长度为4的列,不管存入的数据长度为多少,所占用的空间均为4个字节。VARCHAR(4) 定义的列所占的字节数为实际长度加1。

当查询时CHAR(4) 和VARCHAR(4) 的值并不一定相同

CHAR和VARCHAR类型测试案例:

创建tmp8表,定义字段ch和vch数据类型依次为CHAR(4)、VARCHAR(4)向表中插入数据“ab ”,SQL语句如下:

创建表tmp8:

CREATE TABLE tmp8(

ch CHAR(4), vch VARCHAR(4)

);

输入数据:

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

查询结果:

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

从查询结果可以看到,ch在保存“ab ”时将末尾的两个空格删除了,而vch字段保留了末尾的两个空格。

ENUM类型测试案例:

创建表tmp9,定义ENUM类型的列enm(‘first‘,‘second‘,‘third‘),查看列成员的索引值,SQL语句如下:

首先,创建tmp9表:

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

插入各个列值:

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

查看索引值:

SELECT enm, enm+0 FROM tmp9;

可以看到,这里的索引值和前面所述的相同。

ENUM列总有一个默认值。如果将ENUM列声明为NULL,NULL值则为该列的一个有效值,并且默认值为NULL。如果ENUM列被声明为NOT NULL,其默认值为允许的值列表的第1个元素。

创建表tmp10,定义INT类型的soc字段,ENUM类型的字段level,列表值为(‘excellent‘,‘good‘, ‘bad‘),向表tmp10中插入数据’good’,1,2,3,’best’,SQL语句如下:

首先,创建数据表:

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;

由结果可以看到,因为ENUM列表中的值在MySQL中都是以编号序列存储的,因此,插入列表中的值“good”或者插入其对应序号’2’的结果是相同的;

SET类型测试案例:

创建表tmp11,定义SET类型的字段s,取值列表为(‘a‘, ‘b‘, ‘c‘, ‘d‘),插入数据(‘a‘),(‘a,b,a‘),(‘c,a,d‘),(‘a,x,b,y‘),SQL语句如下:

首先创建表tmp11:

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;

从结果可以看到,对于SET来说如果插入的值为重复的,则只取一个,例如“a,b,a”,则结果为“a,b”;如果插入了不按顺序排列值,则自动按顺序插入,例如“c,a,d”,结果为“a,c,d”;如果插入了不完全值,该值将被选取插入,例如插入值“a,b”;如果插入了错误值,该值被替换成NULL

二进制类型

MySQL中存储二进制数据的数据类型有:

BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB

BIT类型测试案例:

创建表tmp12,定义BIT(4)类型的字段b,向表中插入数据2、9、15、16。

首先创建表tmp12,SQL语句如下:

CREATE TABLE tmp12( b BIT(4) );

插入数据:

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

查询插入结果:

SELECT BIN(b+0) FROM tmp12;

b+0表示将二进制的结果转换为对应的数字的值,BIN() 函数将数字转换为二进制。从结果可以看到,成功的将3个数插入到表中。

BINARY类型测试案例:

创建表tmp13,定义BINARY(3)类型的字段b和VARBINARY(3)类型的字段vb,并向表中插入数据’5’,比较两个字段的存储空间。

首先创建表tmp13,输入SQL语句如下:

CREATE TABLE tmp13(

b binary(3), vb varbinary(30)

);

插入数据:

INSERT INTO tmp13 VALUES(5,5);

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

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

可以看到,b字段的值数据长度为3,而vb字段的数据长度仅为插入的一个字符的长度1。

如果想要进一步确认’5’在两个字段中不同的存储方式,输入如下语句:

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

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

参考:

时间: 2024-08-01 16:58:15

MySQL数据库的基本数据类型的相关文章

Mysql数据库理论基础之三 --- 数据类型及SQL结构化查询语句使用

一.简介 由MySQL AB公司开发,是最流行的开放源码SQL数据库管理系统,主要特点: 1.是一种数据库管理系统 2.是一种关联数据库管理系统 3.是一种开放源码软件,且有大量可用的共享MySQL软件 4.MySQL数据库服务器具有快速.可靠和易于使用的特点 5.MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中 InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建.这样,表的大小就能超过单独文件的最大容量.表空间可包括原始磁盘分区,从而使得很大的表成为可能

MySQL数据库篇之数据类型

主要内容: 一.数值类型 二.日期类型 三.字符串类型 四.枚举类型与集合类型 1?? 数值类型 1.整数类型:tinyint  smallint  mediumint  int  bigint 作用:存储年龄,等级,id,各种号码等. tinyint tinyint[(m)] [unsigned] [zerofill] 小整数,数据类型用于保存一些范围的整数数值范围: 有符号: -128 - 127 无符号: 0 - 255 PS: MySQL中无布尔值,使用tinyint(1)构造. int

百万年薪python之路 -- MySQL数据库之 常用数据类型

MySQL常用数据类型 一. 常用数据类型概览 # 1. 数字: 整型: tinyint int bigint 小数: float: 在位数比较短的情况下不精确 double: 在位数比较长的情况下不精确 0.000001230123123123 存成: 0.000001230000 decimal: (如果用小数,则推荐使用decimal) 精准 内部原理是以字符串形式去存 # 2. 字符串: char(10): 简单粗暴,浪费空间,存取速度快. root存成root000000 varcha

EF6 Codefirst+MySql 数据库迁移

简介 项目使用MSSql作为数据库,但是因为SQL服务器贵那么一点,并发连接差那么一点,要把数据迁移到MySQL,顺带迁移过程以及问题. 环境 · Visual Studio 2013 · MySQL 5.7 · Entity Framework 6.1.3 正文 迁移过程 1. 安装MySQL,顺带安装 MySQL for Visual Studio.MySQL Connector Net 2. 在Entity Framework 项目和 WebSite项目中添加Nuget包,MySql.Da

mysql数据库从删库到跑路之mysql数据类型

一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob.com/mysql/mysql-data-types.html http://dev.mysql.com/doc/refman/5.7/en/data-type-overview.html mysql数据类型概览 1 数字(默认都是有符号,宽度指的是显示宽度,与存储无关) tinyint int bigint:个数,年龄,id,qq号,手

MySQL数据库之数据类型BOOL/BOOLEAN与TINYINT测试总结

From: http://database.51cto.com/art/201203/323863.htm 网络上很多人咨询mysql是否提供布尔类型?MySQL数据库确实提供布尔类型,此数据类型的关键字可以写成:布尔类型BOOL或布尔类型BOOLEAN,但是MySQL数据库数据类型的布尔类型是否也像其他数据库产品一样呢?本文揭开mysql布尔类型的真实面目. AD:51CTO 网+ 第十二期沙龙:大话数据之美_如何用数据驱动用户体验 [导读] 网络上很多人咨询mysql是否提供布尔类型?MyS

Mysql 登陆&退出、创建&删除&选择数据库、基本数据类型、创建&删除表格

登陆数据库使用登陆命令: shell>mysql [-h host] -u user -p [-D database] Enter password: -h指定的是远程主机,登陆本地数据库可以不用,-D 用于指定登陆之后选择的数据库,如果没有指定数据库,则不进行数据库选择.进入数据库之后,每一条命令之前会有 mysql> 的提示符.mysql中的命令都严格以分号(;)作为命令结束.如果在一条命令没输入完之前换行,会出现 -> 的提示符. 退出数据库的命令: mysql>exit 或

MySQL数据库:SQL语句基础、库操作、表操作、数据类型、约束条件、表之间的关系

数据库相关概念: 1. 数据库服务器:运行数据库管理软件的计算机 2. 数据库管理软件:MySQL.Oracle.db2.slqserver 3. 库:文件夹,用来组织文件/表 4. 表:文件(类似于excel),用来存放多行内容/多条记录 5. 记录:事物一系列典型的特征 6. 数据:描述事物特征的符号 MySQL数据库就是一个套接字软件,用来管理其他机器上的数据文件 MySQL介绍: MySQL是一个关系型数据库管理系统:就是一个基于socket编写的C/S架构胡软件 客户端软件 mysql

MYSQL数据库数据类型

07.14自我总结 MYSQL数据库数据类型 一.整数类型和浮点数典型 1.有符号/没符号 对于整数和负整数来说,默认情况下是有符号范围的 默认是有符号 有符号和没符号其实就是有没有包括负数,有符号是包括负数的 设置成无符号: alter table 表名 变量名 数据类型 unsigned; 严格模式 非严格模式 有符号 (-,+) 超出范围会报错 (-,+) 超出范围取极值 无符号 (0,+) 超出范围会报错 (0,+) 超出范围取极值 2.严选/非严选 我们不推荐使用非严格模式下建立tab