MySQL 中的数据类型介绍

    3.3、ENUM(1)

   
MySql中之ENUM是一个字符串对象,其值来自表创造时当列规定中显式枚举的同样列值。

    可以插入空字符串””和NULL:

  •    
    假使你拿一个不法值插入ENUM(也就是说,允许的值列之外的字符串),将插空字符串因作为特别错误值。该字符串与“普通”空字符串不同,该字符串有数值值0。
  •    
    假如将ENUM列声明也允许NULL,NULL值则为该列的一个行之有效值,并且默认值为NULL。若是ENUM列被声称也NOT
    NULL,其默认值为允许的值列的第1个要素。

    值的目规则如下:

  •     来自列规定的允许的值列中之价由1始发编号。
  •    
    空字符串错误值的索引值是0。所以,可以行使下的SELECT语句来索有分配了非法ENUM值的推行:mysql>
    SELECT * FROM tbl_name WHERE enum_col=0;
  •     NULL值的目是NULL。

    如下例:

    MySQL 1

 
  ENUM最多得有65,535只要素。当创立表时,ENUM成员值的尾部空格将活动为删去。

    使用模式:

  1. CREATE TABLE shirts (
  2. name VARCHAR(40),
  3. size ENUM(‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’)
  4. );

  1. INSERT INTO shirts (name, size) VALUES (‘dress shirt’,’large’),(‘t-shirt’,’medium’),(‘polo
    shirt’,’small’);

  1. SELECT name,
    size FROM shirts WHERE size =
    ‘medium’;

  1. UPDATE shirts SET size = ‘small’ WHERE size
    = ‘large’;

    如果将赶回值设为数值,将重临索引值,比如讲点的查询语句改呢:

  1. SELECT name,
    size+0 FROM
    shirts WHERE size = ‘medium’;

 
  假若拿一个数字保存及ENUM列,数字给视为索引,并且保留的价是该索引对应之枚举成员(这不符合LOAD
DATA,它以具备输入视为字符串)。不提出利用类似数字的枚举值来定义一个ENUM列,因为当时生爱招惹混淆。

 
  ENUM值依照索引编号举办排序)。例如,对于ENUM(‘a’,’b’),’a’排在’b’后边,但于ENUM(‘b’,’a’),’b’排在’a’前边。空字符串排在非空字符串前边,并且NULL值排在备其他枚举值后面。要惦念戒意外的结果,按字母逐一确定ENUM列。还得使用GROUP
BY CAST(col AS CHAR)或GROUP BY
CONCAT(col)来担保本词汇对列进行排序而休是用索引数字。

8、使用此外数据库的SQL语句

 
  为了用啊另外数据库编写的SQL执行代码,MySQL遵照下表所示对列类型举办映射。通过这多少个映射,能够充分容易地从此外数据库引擎将表定义导入到MySQL中:

    MySQL 2

 


   
其实,字段类型相关知识,远不止这一点,还有多。详情请访问官网:http://dev.mysql.com/doc/refman/5.7/en/data-types.html

6、各样类型占用的囤积

    3.1、BINARY和VARBINARY类型(2)

 
  BINARY和VARBINARY类型类似于CHAR和VARCHAR类型,不过不同的凡,它们存储的非是字符字符串,而是二进制串。所以其并未字符集,并且排序和比基于列值字节的数值值。

 
  当保存BINARY值时,在它右侧填充0x00(零字节)值为达成指定长度。取值时未删尾部底字节。相比较常持有字节很重点(因为空格和0x00凡是见仁见智的,0x00<空格),包括ORDER
BY和DISTINCT操作。比如插入’a ‘会变成’a \0’。

 
  对于VARBINARY,插入时未填充字符,选用时莫裁剪字节。相比较常有所字节很要紧。

    当型为BINARY的字段为主键时,应考虑地点介绍的储存方。

    3.1、CHAR和VARCHAR类型(2)

 
  CHAR和VARCHAR类型注脚的长度表示您想要保留之太丰裕字符数。例如,CHAR(30)可以占据30独字符。默认长度都也255。

    CHAR列的长固定为创制表时注明的尺寸。长度可以为从0到255的此外价值。当保存CHAR值时,在它的右侧填充空格以达成指定的长。当找到CHAR值时,尾部底空格被删去掉,所以,我们在储存时字符串左侧无法发出空格,尽管发生,查询出来后为会面给删。在存储或探寻过程被不举行高低写转换。

 
  所以当char类型的字段为唯一值经常,添加的价值是否就是为未含末尾空格(可能有多单空格)的价值确定,相比较常会见于终极补满空格后以及现都是的值相比。

    VARCHAR列中之价值吗可更换长字符串。长度可以指定为0届65,535间的值(实际而指定的最好特别长及编码和其他字段有关,比如,本人MySql使用utf-8编码格式,大小为正规格式大小的2加倍,仅来一个varchar字段时实测最老价值才21844,假如上加一个char(3),则最酷取值收缩3。全体无比特别尺寸是65,532字节)。

   
同CHAR相比较,VARCHAR值保存时唯有保留要的字符数,另加一个字节来记录长度(倘若列评释的长度逾255,则应用简单只字节)。

   
VARCHAR值保存时无开展填空。当值保存及寻找时尾部的空格仍保存,符合标准SQL。

   
假设分配受CHAR或VARCHAR列的价值超越列的万分酷尺寸,则对值举行裁剪以要其入。假若让淘汰掉的字符不是空格,则会发出相同长长的警告。要是裁剪非空格字符,则会招错误(而未是告诫)并因而行使严俊SQL形式禁用值的插。

    上边显示了将各样字符串值保存及CHAR(4)和VARCHAR(4)列后底结果:

    MySQL 3

 
  表中最后一行的值仅适用于未采用严苛格局时;假若MySQL运行使用严酷形式,领先列长的值不保留,并且会产出谬误。

   
因为空格的因由,相同之价存入到长都丰硕的varvhar和char中,取出或相会不同,比如”a”和”a
 “。

5、几哪个地方类型(8)

    几何类型层次结构如下:

    MySQL 4

    到用之时再说吧。

   
官方文档:http://dev.mysql.com/doc/refman/5.7/en/opengis-geometry-model.html

 

    6.1、数值类

    MySQL 5

    定点数的比较独特,而且和实际版本为闹关系,此处单独解释:

 
  使用二进制格式将9独十进制(基于10)数裁减也4个字节来代表DECIMAL列值。每个值的整数和分有的贮存分别规定。每个9各项数的倍数需要4个字节,并且“剩余的”位需要4单字节的同等片。下表给起了逾位数的存储需求:

    MySQL 6

    6.3、字符串

    MySQL 7

 

    2.4、BIT(1)

 
  BIT数据类型可用来保存位配段值。BIT(M)类型允许存储M位值。M范围为1~64,默认为1。

    BIT其实就是存入二进制的价,类似010110。

    假若存入一个BIT类型的价,位数片M值,则左补0.

   
如若存入一个BIT类型的价,位数多于M值,MySQL的操作取决于此时有效之SQL格局:

  •    
    如若形式不安装,MySQL将值裁剪到范围的呼应端点,并保留缩小好之价。
  •    
    假诺模式设置也traditional(“严厉情势”),超出范围的价值将受拒绝并指示错误,并且按照SQL标准插入会败北。

    下面是官示例:

  1. mysql>
    CREATE TABLE t (b BIT(8));
  2. mysql>
    INSERT INTO t SET b = b’11111111′;
  3. mysql>
    INSERT INTO t SET b = b’1010′;
  4. mysql>
    INSERT INTO t SET b = b’0101′;

  1. mysql>
    SELECT b+0, BIN(b+0), OCT(b+0), HEX(b+0) FROM t;
  2. +——+———-+———-+———-+
  3. | b+0 | BIN(b+0) | OCT(b+0) | HEX(b+0) |
  4. +——+———-+———-+———-+
  5. | 255 | 11111111 | 377 | FF |
  6. | 10 | 1010 | 12 | A |
  7. | 5 | 101 | 5 | 5 |
  8. +——+———-+———-+———-+

 

4、时间日期类型(5)

    他们的“0”值如下:

    MySQL 8

3、字符串类型(14)

 
  字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

    2.3、浮点数(3)

    浮点数是为此来代表实数的一致栽方法,它之所以 M(最后多少个) * B(
基数)的E(指数)次方来表示实数,相对于定点数来说,在长一定的动静下,具有象征数据范围大之性状。但以为存误差问题。

    假如要保证值相比准,推荐使用定点数数据类型。

    MySql中的浮点类型有float,double和real。他们定义模式也:FLOAT(M,D)
、 REAL(M,D) 、 DOUBLE PRECISION(M,D)。

 
  REAL就是DOUBLE ,假设SQL服务器形式包括REAL_AS_FLOAT选项,REAL是FLOAT的同义词而非是DOUBLE的同义词。

   
“(M,D)”表示该值一共展示M位整数,其中D位位于小数点后。例如,定义也FLOAT(7,4)的一个排好来得为-999.9999。MySQL保存值时展开四放任五抱,因而而当FLOAT(7,4)列内插入999.00009,近似结果是999.0001。

   
FLOAT和DOUBLE中的M和D的取值默认都也0,即除最要命最小价,不限定位数。允许的值理论上是-1.7976931348623157E+308~-2.2250738585072014E-308、0和2.2250738585072014E-308~1.7976931348623157E+308。M、D范围如下(MySql5.7实测,与IEEE标准统计的实际上是见仁见智的,下边介绍):

  •    
    M取值范围吗0~255。FLOAT只包6各中数字的准确性,所以FLOAT(M,D)中,M<=6时,数字平常是准确的。倘若M和D都起分明概念,其超出范围后的拍卖及decimal。
  •    
    D取值范围为0~30,同时要<=M。double只保证16位中数字之准头,所以DOUBLE(M,D)中,M<=16时,数字平时是标准之。假诺M和D都有拨云见日定义,其超出范围后的拍卖以及decimal。

   
FLOAT和DOUBLE中,若M的定义分别超7以及17,则多生之灵光数字有的,取值是匪肯定的,平时数值及会发误。因为浮点数是未标准的,所以咱们只要避使“=”来判断两单数是否当。

    MySql中之浮点数坚守IEEE 754正式。

    内存中,FLOAT占4-byte(1位标记位 8员代表指数
23位表示最后几个),DOUBLE占8-byte(1位记位 11号代表指数
52各种表示倒数)。IEEE754标准还针对倒数的格式做了业内:d.dddddd…,小数沾左面只来1个都非可知啊零星,总计机中是二进制,因而,倒数小数触及左面部分总是1。显然,这一个1好节省,以加强最后多少个的精度。由达到会,单精度浮点数的最后多少个是为此24bit代表的,双精度浮点数的最后多少个是因而53bit意味着的。所以即使能算是有取值范围及精确的有效位数了,但MySql中其实略有不同。

标签: mysql数据类型mysql全体数据类型mysql字段类型mysql数据存储mysql

MySQL 9 分类:

服务器和软件———MySQL数据库(4) MySQL 10

目录(?)[+]

 

   
据我总计,MySQL协助39栽(按可采纳的种字段总括,即同义词也作多单)数据类型。下边的牵线可能于这么些古老的MySQL本被不适用。

   
转载请注解出处:http://blog.csdn.net/anxpp/article/details/51284106。谢谢!

    文本重要参考了合法文档:http://dev.mysql.com/doc/refman/5.7/en/

1、概述

   
要询问一个数据库,大家吧非得通晓该绷的数据类型。

 
  mysql支撑所有正式的SQL数据类型,首要分3类:

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

    另一样看似是几乎何数据类型,用的莫多,也未尝多介绍。   
下边大、小题目后括号内之数组表示其包含的色个数。上面有结论都由此我以MySql
Workbench编写SQL验证了或者来官网。

 

    2.1、整数类型(6)

    一张图虽能分解清楚了:

    MySQL 11

    INTEGER同INT。

0-255依靠的凡十进制数
盖一字节是八各个 即能存放00000000-11111111
次前进制数11111111=256(D)

    4.3、YEAR类型(1)

    YEAR类型是一个单字节类型用于表示年。

    MySQL以YYYY格式检索和展现YEAR值。范围是1901交2155。

    可以指定各个格式的YEAR值:

  •     四位字符串,范围也’1901’到’2155’。
  •     四各项数字,范围也1901交2155。
  •    
    两员字符串,范围吗’00’到’99’。’00’到’69’和’70’到’99’范围之价为换为2000届2069及1970交1999克之YEAR值。
  •    
    两号整数,范围也1届99。1届69及70届99限量的价为移为2001到2069和1970到1999限的YEAR值。请留意少员整数范围与个别员字符串范围稍有不同,因为你无可以平昔以零散点名为数字并将她讲啊2000。你不可以不以其指定为一个字符串’0’或’00’或其为演讲吗0000。
  •     函数再次回到的结果,其值适合YEAR上下文,例如NOW()。

    非法YEAR值被转换为0000。

 

    3.2、BLOB和TEXT类型(8)

 
  BLOB是一个亚向前制大对象,可以包容可转移多少的多寡。有4种植BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最特别长不同。

 
  有4栽TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这多少个针对诺4种BLOB类型,有同等的极其酷长以及仓储需求。

    BLOB列让视为二上制字符串。TEXT列被视为字符字符串,类似CHAR和BINARY。

    在TEXT或BLOB列的仓储或探寻过程被,不有大小写转换。

 
  未运行于严酷格局时,如若您为BLOB或TEXT列分配一个跨该列类型的太特别尺寸的值,值为截取以保险符合。如果截掉的字符不是空格,将会面时有暴发相同长条警告。使用严俊SQL情势,会发生错误,并且值将给拒而休是截取并为起警示。

    在大多数端,可以拿BLOB列视为可以充足好之VARBINARY列。同样,可以以TEXT列视为VARCHAR列。

    BLOB和TEXT在以下多少个点不比为VARBINARY和VARCHAR:

  •    
    当保存依然检索BLOB和TEXT列的价时莫去尾部空格。(这和VARBINARY和VARCHAR列相同)。 
  •    
    相比较时将据此空格对TEXT举行扩大以契合比较的目的,正使CHAR和VARCHAR。
  •    
    对于BLOB和TEXT列的目录,必须指定索引前缀的长。对于CHAR和VARCHAR,前缀长度是可选的。
  •     BLOB和TEXT列非可以起默认值。

    MySQL
Connector/ODBC将BLOB值定义为LONGVARBINARY,将TEXT值定义为LONGVARCHAR。

   
BLOB或TEXT对象的可是要命尺寸由该连串确定,但当客户端和服务器之间实际得传递的无限老价值由可用内存数量与通信缓存区大小确定。你得通过反max_allowed_packet变量的价更改信息缓存区的尺寸,但得同时修改服务器和客户端程序。

    每个BLOB或TEXT值分别由里分配的靶子表示。

    它们(TEXT和BLOB同)的长度:

  •     Tiny:最充足尺寸255单字符(2^8-1)
  •     BLOB或TEXT:最老长65535独字符(2^16-1)
  •     Medium:最酷长16777215只字符(2^24-1)
  •     LongText 最要命尺寸4294967295个字符(2^32-1)

    实际尺寸以及编码有关,比如utf-8的汇合减半。

    2.2、定点数(2)

   
DECIMAL和NUMERIC类型在MySQL中即等同之品类。它们用于保存要为妥精度之值。

    使用办法如下:

  1. salary DECIMAL(5,2)

    下边的牵线将因上边这多少个例子。

   
我们看来中有有限个参数,即DECIMAL(M,D),其中M表示十进制数字到底的个数,D表示小数点前边数字的位数,上例被之取值范围也-999.99~999.99。

   
假使存储时,整数片段盖了限制(如下面的例子中,添加数值为1000.01),MySql就会报错,不容许蓄这么的价值。

    要是存储时,小数点有要超出范围,就分开以下情状:

  •    
    若四丢弃五抱后,整数部分无超出范围,则光警告,但亦可得逞操作并四放任五顺应去多余的有点数位后保存。如999.994其实为保留也999.99。
  •    
    若四丢弃五相符后,整数有些超出范围,则MySql报错,并拒绝处理。如999.995跟-999.995且碰面报错。

   
M的默认取值为10,D默认取值为0。假使创造表时,某字段定义也decimal类型不带其他参数,等同于decimal(10,0)。带一个参数时,D取默认值。

  •     M的取值范围为1~65,取0时汇合于如为默认值,超出范围会报错。
  •     D的取值范围吗0~30,而且要<=M,超出范围会报错。

    所以,很分明,当M=65,D=0时,可以得到最要命与最好小价。

    已经讲很详细了,如还未知道,请复。

2、数值类(12)

    4.2、TIME类型(1)

 
  MySQL以’HH:MM:SS’格式检索和出示TIME值(或对老之小时值接纳’HHH:MM:SS’格式)。

   
TIME值的限定可以由’-838:59:59’到’838:59:59’。小时部分会由此好的原故是TIME类型不仅可用来表示无异天的工夫(必须低于24时辰),还可能也某事件过去的光阴如故少数独事件之间的时光间隔(可以超过24钟头,或者甚至为乘)。

    你得就此各个格式指定TIME值:

  •     ‘D
    HH:MM:SS.fraction’格式的字符串。仍可以够使用下任何一样种“非严俊”语法:’HH:MM:SS.fraction’、’HH:MM:SS’、’HH:MM’、’D
    HH:MM:SS’、’D HH:MM’、’D
    HH’或’SS’。这里D表示日,可以取0到34里边的值。请留心MySQL还非保留分数。
  •    
    ‘HHMMSS’格式的没内部割符的字符串,假定是有含义的时。例如,’101112’被精通为’10:11:12’,但’109712’是勿合法的(它来一个并未意思之分钟有),将改为’00:00:00’。
  •    
    HHMMSS格式的数值,假定是有意义之时光。例如,101112给清楚啊’10:11:12’。下边格式为可领略:SS、MMSS、HHMMSS、HHMMSS.fraction。请留意MySQL还免保留分数。
  •     函数重返的结果,其值适合TIME上下文,例如CURRENT_TIME。

   
对于指定为连时间有些内割符的字符串的TIME值,如若平常、分要秒值小于10,则未需指定两位数。’8:3:2’暨’08:03:02’相同。

   
为TIME列分配简写值时应小心。没有冒号,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’。

   
超出TIME范围可官方的价为裁为范围最相仿的端点。例如,’-850:00:00’和’850:00:00’被撤换为’-838:59:59’和’838:59:59’。

   
无效TIME值被撤换为’00:00:00’。请小心由于’00:00:00’本身是一个官方TIME值,只于表内保存之一个’00:00:00’值还无克说出原本的价是
’00:00:00’依然匪合法的价值。

    3.4、SET类型(1)

 
  SET是一个字符串对象,可以有细碎或五只价,其值来自表创建时规定的兴的同一列值。指定包括六个SET成员的SET列值时每成员间用逗号(‘,’)间隔开。例如,指定为SET(‘one’,
‘two’) NOT NULL的排好起下的旁价值:

  •     ”
  •     ‘one’
  •     ‘two’
  •     ‘one,two’

   
SET最多得装64单价值。创建表时,SET成员值的尾空格将活动为删去。检索时,保存在SET列的值使用列定义中所接纳的高低写来展现。

 
  MySQL用数字保存SET值,所保存值的低位阶位对应第1只SET成员。即使以数值上下文中找一个SET值,检索的价的各样设置相应组成列值的SET成员。

    例如,能够这么打一个SET列检索数值值:

  1. mysql>
    SELECT set_col+0 FROM tbl_name;

 
  假诺拿一个数字保存到SET列着,数字之二进制的1之职确定了列值中之SET成员。对于指定为SET(‘a’,’b’,’c’,’d’)的排,成员有下边的十进制和亚进制值:

    MySQL 12

 
  如若您也该列分配一个值9,其二进制格局吗1001,由此第1只同第4只SET值成员’a’和’d’被挑,结果值吗
‘a,d’。

   
对于富含多单SET元素的值,当插入值时元素所列的各种并无重大。在值备受一个加的素列了稍稍坏啊不首要。当未来检索该值时,值备受的每个元素出现同等不良,按照说明创造时指定的相继排列有元素。例如,假定某个列指定为SET(‘a’,’b’,’c’,’d’):

  1. CREATE TABLE myset (col SET(‘a’, ‘b’, ‘c’, ‘d’));
  2. INSERT INTO myset (col) VALUES (‘a,d’), (‘d,a’), (‘a,d,a’), (‘a,d,d’), (‘d,a,d’);
  3. SELECT *,col+0 FROM myset;
  4. SELECT *,col+0 FROM myset where
    col=’a,b’;

    结果:

  1. a,d 9
  2. a,d 9
  3. a,d 9
  4. a,d 9
  5. a,d 9

    SET值依照数字顺序排序。NULL值排在非NULL SET值的眼前。

    平时状态,可以拔取FIND_IN_SET()函数或LIKE操作符搜索SET值:

    mysql> SELECT * FROM tbl_name WHERE
FIND_IN_SET(‘value’,set_col)>0;

    mysql> SELECT * FROM tbl_name WHERE set_col LIKE ‘%value%’;

    第1独报告句找来SET_col包含value
set成员的行。第2独八九不离十,但有所不同:它以此外地点找来set_col包含value的执行,甚至是当旁一个SET成员的子字符串中。

    下边的言语为是法定的:

    mysql> SELECT * FROM tbl_name WHERE set_col & 1;

    mysql> SELECT * FROM tbl_name WHERE set_col = ‘val1,val2’;

   
第1只报告词寻找包含第1独set成员的价。第2个报告句寻找一个非凡匹配的值。应注意第2近乎的比。将set值和’val1,val2’比较重临的结果跟跟’val2,val1’相比较再次回到的结果不同。指定值时之一一应与于列定义中所列的各个相同。

    假若想要也SET列确定有或的价值,使用SHOW COLUMNS FROM tbl_name
LIKE set_col并分析输出中第2列的SET定义。

    暴发什么实际应用也?

   
比如大家设定用户之权限控制,一个用户或会师暴发强权力,大家选用具有权限成立一个SET类型的字段,大家不欲因而同样层层int来定义各类权力了,直接拔取一个SET字段即可:

  1. /*
  2. 用户权限permission表
  3. */
  4. create table user_permission(
  5. id int
    UNSIGNED not null auto_increment,
  6. user_id int
    not null ,
  7. permission set(‘阅读’,’评论’,’发帖’) not null,
  8. primary key(id),
  9. unique (user_id)
  10. );
  11. desc user_permission;
  12. insert into
    user_permission values (0,1,’阅读’),(0,2,’阅读’),(0,3,’阅读,评论’);
  13. insert into
    user_permission values (0,4,’阅读,评论,发帖’);
  14. select *,permission+0 from user_permission;
  15. select permission from user_permission where user_id=1;
  16. select * from
    user_permission where
    permission & 10;
  17. SELECT * FROM
    user_permission WHERE FIND_IN_SET(‘评论’,permission)>0;

 

7、类型的选项

    为了优化存储,在旁动静下都允诺运用最规范的类型。

    例如,假使列的价的限量也从1至99999,若采取整数,则MEDIUMINT
UNSIGNED是好之类。在有着可以象征该列值的路中,该型应用的储存最少。

    用精度也65个十上制数(基于10)对DECIMAL
列进行具有骨干统计(+、-、*、/)。

   
使用对精度操作对DECIMAL值进行总计。即使准确度不是极端重大还是只要速度吗高优先级,DOUBLE类型即丰盛了。为了达成高精度,可以换到保存在BIGINT中的稳定类型。这样可以就此64各整数举行具有统计,按照需要用结果转换回浮点值。

 

    6.2、时间日期

    MySQL 13

   
从本5.6.4开,存储需求便持有转,依据精度而肯定。不确定部分需之贮存如下:

    MySQL 14

    比如,TIME(0), TIME(2), TIME(4), 和TIME(6) 分别使用3, 4, 5, 6
bytes。

    4.1、DATE, DATETIME, 和TIMESTAMP类型(3)

    这三者其实是关联的,都用于表示日期或时间。

    当你用以富含日期以及时音信之价值平日虽运用DATETIME类型。MySQL以’YYYY-MM-DD
HH:MM:SS’格式检索和出示DATETIME值。帮忙的克吗’1000-01-01 00:00:00’到’9999-12-31
23:59:59’。

    当您才待日期值而无需要时间部分平时许下DATE类型。MySQL用’YYYY-MM-DD’格式检索和出示DATE值。补助的界定是’1000-01-01’到 ‘9999-12-31’。

MySQL,    TIMESTAMP类型同样富含日期以及时空,范围由’1970-01-01
00:00:01′ UTC 到’2038-01-19 03:14:07′ UTC。

    能够选用外常见格式指定DATETIME、DATE和TIMESTAMP值:

  •     ‘YYYY-MM-DD HH:MM:SS’或’YY-MM-DD
    HH:MM:SS’格式的字符串。允许“不严加”语法:任何标点符都可以为此做日期部分依旧时刻有些内的间割符。例如,’98-12-31
    11:30:45’、’98.12.31 11+30+45’、’98/12/31 11*30*45’和’98@12@31
    11^30^45’是当价格的。
  •    
    ‘YYYY-MM-DD’或’YY-MM-DD’格式的字符串。这里吧同意下“不严苛的”语法。例如,’98-12-31’、’98.12.31’、’98/12/31’和’98@12@31’是齐价格的。
  •    
    YYYYMMDDHHMMSS’或’YYMMDDHHMMSS’格式的没中割符的字符串,假定字符串对于日期类型是出义的。例如,’19970523091528’和’970523091528’被说啊’1997-05-23
    09:15:28’,但’971122129015’是休合法的(它来一个无意义的秒钟有),将成为’0000-00-00
    00:00:00’。
  •    
    ‘YYYYMMDD’或’YYMMDD’格式的尚未中间割符的字符串,假定字符串对于日期类型是爆发义的。例如,’19970523’和’970523’被解释为
    ‘1997-05-23’,但’971332’是未合法的(它起一个不曾意义的月度跟天有),将改成’0000-00-00’。
  •    
    YYYYMMDDHHMMSS或YYMMDDHHMMSS格式的数字,假定数字对日期类型是发出意义之。例如,19830905132800暨830905132800吃讲演吗
    ‘1983-09-05 13:28:00’。
  •    
    YYYYMMDD或YYMMDD格式的数字,假定数字对日期类型是发生意义的。例如,19830905暨830905叫分解也’1983-09-05’。
  •    
    函数再次来到的结果,其值适合DATETIME、DATE或者TIMESTAMP上下文,例如NOW()或CURRENT_DATE。

 
  对于包括日期有中割符的字符串值,如若日与月的值小于10,不待指定两号数。’1979-6-9’与’1979-06-09’是一律之。同样,对于包括时间有内割符的字符串值,如若平日、分与秒的价稍差于10,不需指定两员数。’1979-10-30
1:2:3’跟’1979-10-30 01:02:03’相同。

 
  数字值应为6、8、12要14位长。倘使一个数值是8或者14号长,则只要为YYYYMMDD或YYYYMMDDHHMMSS格式,前4各个数表示年。如若数字
是6还是12位长,则只要为YYMMDD或YYMMDDHHMMSS格式,前2个数表示年。另外数字给解释也接近用零填充到了不久前底长度。

 
  指定为非限定符字符串的值使用给定的尺寸举行表达。若是字符串为8依旧14配符长,前4个数表示年。否则,前2员数表示年。从左望右边解释字符串内冒出的各级组成部分,以发现年、月、日、刻钟、分与秒值。这表达非应允使用有限6字符的字符串。例如,假如您指定’9903’,认为它表示1999年四月,MySQL将在公的表内插入一个“零”日期值。这是坐年和月值是99及03,但日部分完全不见,由此该值不是一个法定的日子。可是,可以肯定指定一个零值来表示紧缺的月度要天有。例如,可以使用’990300’来插入值’1999-03-00’。

   
可以以一个日子类型的值分配为一个差的日期类型。不过,值可能会面变动或者少一些消息:

  •    
    假设您吗一个DATETIME或TIMESTAMP对象分配一个DATE值,结果值的年华有些为设置为’00:00:00’,因为DATE值未含时间音信。
  •    
    假若你吗一个DATE对象分配一个DATETIME或TIMESTAMP值,结果值的时空有受删去,因为DATE值未含时间信息。
  •    
    记住即便可以接纳相同之格式指定DATETIME、DATE和TIMESTAMP值,不同类型的值的限也不比。例如,TIMESTAMP值不能早让1970或者晚于2037。这表明一个日期,例如’1968-01-01’,固然对于DATETIME或DATE值是可行之,但于TIMESTAMP值却不行,假若分配受这么一个靶将吃更换为0。

    当指定日期值时请留意某些缺陷:

  •    
    指定为字符串的值允许的非严厉格式或会面蒙。例如,值’10:11:12’由于‘:’间割符看上去可能象时价值,但假使用于日期前后文值则吃说啊年’2010-11-12’。值’10:45:15’被换为’0000-00-00’因为’45’不是官方月。
  •    
    在非严厉格局,MySQL服务器就针对日期的合法性进行着力检查:年、月和日的限制分别是1000至9999、00至12同00至31。任何含超越那一个限制之部分的日子为撤换成为’0000-00-00’。请小心仍允许而保存非法日期,例如’2002-04-31’。要怀念保无应用严苛情势时日期中,应检查应用程序。
    在严谨形式,非法日期无叫奉,并且不移。
  •    
    包含两各年值的日子会令人歪曲,因为世纪不知情。MySQL使用以下规则讲两位年值:
    o 00-69限量的年值转换为2000-2069。 o
    70-99限之年值转换为1970-1999。

    各个有关操作:

网站地图xml地图