mysql5.7官网直译数据类型--综述2

11.1.2 Date and Time Type Overview
时间数据类型的摘要如下,关于时间类型的属性和存储要求的额外信息,请看11.3的日期和时间类型,11.8的数据类型存储要求。对于操作时间函数的描述请看12.7的日期和时间函数。
对于DATE和DATETIME范围描述。"支持"意味着虽然更早的值也有效,但是不做保证。
MYSQL允许小数秒对于TIME,DATETIME和TIMESTAMP值,可以达到微妙(6位数字)的保证。为了定义一列包含小数秒部分,使用语法type_name(fsp),其中type_name是TIME,DATETIME,TIMESTAMP,fsp是小数秒保证。例如:
CREATE TABLE t1 (t TIME(3), dt DATETIME(6));
如果fsp的值设置的话,必须在0到6之间。而0则意味着没有小数部分。如果省略,默认值就是0.这不同于标准SQL默认是6,和以前的MYSQL版本对比。
任何TIMESTAMP或者DATETIME列在表中能够自动初始化和更新属性。
>DATE
一个日期,支持的范围是'1000-01-01' 到 '9999-12-31'。MYSQL展示的DATE值格式是'YYYY-MM-DD',但是允许你设计值在DATE列使用字符串或者数字。
>DATETIME[(fsp)]
一个日期和时间的结合。支持的范围是'1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999'。MYSQL展示的DATETIME值的格式为:'YYYY-MM-DD HH:MM:SS[.fraction]' ,但是允许你设计值通过使用字符串或者数字。
关于fsp选项的值的范围是0-6是对小数部分的精确度。0表示没有小数部分,默认值是0.
对于DATETIME列自动初始化和更新当前日期和时间可以被设置使用DEFAULT和ON UPDATE 列定义条件,具体描述在11.3.5自动初始化和更新TIMESTAMP和DATETIME.
>TIMESTAMP[(fsp)]
一个时间戳,范围是'1970-01-01 00:00:01.000000' UTC 到 '2038-01-19 03:14:07.999999' UTC。TIMESTAMP值被存储作为从开始('1970-01-01 00:00:00' UTC)到当前日期的秒数。一个TIMESTAMP不能够表示值是'1970-01-01 00:00:00'因为这个值等价于0秒和开始值比较。并且值0保留为表示'0000-00-00 00:00:00',"zero"TIMESTAMP值
fsp值是小数部分的精确度可选范围0-6.0表示没有小数部分默认是0。
处理TIMESTAMP定义的方法依赖于explicit_defaults_for_timestamp系统变量值。
如果explicit_defaults_for_timestamp是可以用,也没有设置DEFAULT CURRENT_TIMESTAMP或者ON UPDATE CURRENT_TIMESTAMP属性在任何TIMESTAMP列。他们必须包含明确的列定义。任何TIMESTAMP没有明确定义NOT NULL,则允许为NULL值。
如果explicit_defaults_for_timestamp不可用。服务处理TIMESTAMP如下:
除非特别定义否则,在表中的第一个TIMESTAMP列被定义为自动设置为日期和时间最近修改的如果没有明确的定义一个值。这使得TIMESTAMP可以用对于记录时间戳在INSERT或者UPDATE操作。
你也可以设置任何TIMESTAMP列为当前日期和时间被设置为NULL值,除非它已经被定义为NULL属性并允许为NULL值。
自动初始化和更新当前日期和时间能够被设置使用DEFAULT CURRENT_TIMESTAMP 和 UPDATE CURRENT_TIMESTAMP列定义条件。默认情况下,第一个TIMESTAMP列有这些属性,正如前面所指出的。然而,任何表中的TIMESTAMP列能够被定义有这些属性。
>TIME[(fsp)]
一个时间,范围为'-838:59:59.000000' 到 '838:59:59.000000'.MYSQL展示的TIME值格式为:'HH:MM:SS[.fraction]',但可以通过字符串或数字来设置TIME列的格式。
选项fsp定义了小数部分,可以选择0-6之间的值。0表示没有小数部分,默认值也是0
>YEAR[(4)]
4位数字格式的年,MYSQL展示YEAR值格式为YYYY,但允许你使用字符串或者数字来设置YEAR列。
值展示1901到2155,和0000.
注意YEAR(2)数据类型不被提倡,而且已经在MYSQL5.7.5中移除了。转变YEAR(2)到YEAR(4).请看11.3.4的YEAR(2)限制和迁移到YEAR(4).
关于额外的信息关于YEAR展示格式和输入值的解释,请看11.3.3年的类型
SUM()和AVG()聚合函数对时间值没有用。他们转变值到数字,在第一个非数字字符后失去了所有。)为了解决这个问题,转变为数字单元,完成聚合操作,然后再转变回时间值。例如:
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;
注意
MYSQL服务能够运行MAXDBSQL模式。在这种情况下,TIMESTAMP通过DATETIME来定义。如果这模式在表创建时可以用,TIMESTAMP列被创建作为DATETIME列。结果,这样的列使用DATETIME来展示格式,有相同的范围值,并且不会自动初始化和更行当前日期和时间。情看5.1.8的服务SQL模式。
-------------------------------------------
11.1.3 String Type Overview 字符串类型的摘要
字符串类型的摘要如下。对于额外的信息请看11.4的字符串类型和11.8节的数据类型存储要求。
在一些情况下,MYSQL能够改变一个字符串列到一个不同于创建和修改表语句中的类型。看13.1.18.7 "Silent Column Specification Changes" 静默列规范变更。
MySQL解释长度以character为单位。CHAR,VARCHAR和TEXT类型都是。对于大多数字符数据类型列定义能够包含属性,也就是character set或者是列的排序。这些属性应用到CHAR,VARCHAR,TEXT类型,ENUM,和SET数据类型:
>CHARACTER SET属性指定字符集,而COLLATE属性为字符集自定排序规则。例如:
CREATE TABLE t
(
    c1 VARCHAR(20) CHARACTER SET utf8,
    c2 TEXT CHARACTER SET latin1 COLLATE latin1_general_cs
);
表中定义创建了一个列名为c1,字符集为utf8默认排序字符集,而列名为c2的字符集为latin1并且区分大小写排序。
设计字符集和排序规则当CHARACTER SET和COLLATE属性缺少一个或者两个的描述在10.1.3.5中列字符集和排序
CHARSET是CHARACTER SET的同义词。
>指定CHARACTER SET binary属性到一个字符串数据类型使得列被创建组委一个二进制字符数据类型:CHAR 变为BINARY,VARCHAR变为VARBINARY,并且TEXT变成BLOB.对于ENUM和SET数据类型,这不会发生;他们可以根据声明中一样被创建。假设你使用如下的表定义来设计表:
CREATE TABLE t
(
  c1 VARCHAR(10) CHARACTER SET binary,
  c2 TEXT CHARACTER SET binary,
  c3 ENUM('a','b','c') CHARACTER SET binary
);
结果表的定义实际上是:
CREATE TABLE t
(
  c1 VARBINARY(10),
  c2 BLOB,
  c3 ENUM('a','b','c') CHARACTER SET binary
);
>二进制属性是对设计表默认字符集和二进制排序字符集的缩写。在这种情况下,比较和排序都是基于字符的数字值。
>ASCII属性是对CHARACTER SET latin1的缩写
>UNICODE属性是对CHARACTER SET ucs2的缩写
字符列的对比和排序都是基于列的排序设计。对于CHAR,VARCHAR,TEXT,ENUM,SET数据类型,你能够声明一个列为二进制排序或者BINARY属性来对比和排序。使用字符集码值,而不是词汇排序。
对于更多使用字符集在MYSQL,请看10.1中的字符集支持。
>[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
一个固定长度的字符串在存储时会向右填充空格到指定长度。M表示列长度在字符集中。范围是0到255如果M不写,则长度为1.
注意:
    当CHAR值被取回时结尾的空白会被去掉,除非PAD_CHAR_TO_FULL_LENGTHSQL模型是开启的。
CHAR是CHARACTER的缩写。NATIONAL CHAR(或者缩写格式NCHAR)是标准SQL方法来定义,其中一个CHAR 列应该使用一些前缀定义字符集。MYSQL使用utf8作为这个预定义字符集。请看10.1.3.7The National Character Set.
CHAR BYTE数据类型是BINARY数据类型的一个别名.这是可以互换的。
mysql允许你创建CHAR(0)这样类型的列。这十分有用当你不得不支持老应用,其中依赖存在的列但是实际上不使用它的值。CHAR(0)十分适用当你需要一个列只取两个值。一个被定义为CHAR(0)的列当值为NULL只会占用一位。可以存放NULL和‘’(空串)。
>[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]
一个变长度的字符串。M表示字符集的最大列长度。M是0到65535.一个字符串的最大有效长度是一个列的最大长度(65535bytes,所有列都一样),字符集设置为可用。例如utf8字符集能够要求超过3btyes对每个字符,所以一个VARCHAR列使用utf8字符集存储的话最多声明为21844个字符。请看C.10.4限制表中列的数量和行大小。
MYSQL存储VARCHAR值比原数据多1-byte或2-byte的前缀长度。这个前缀长度说明了bytes的数量。如果一个值的存储没有超过255个字符那么一个varchar列使用一个长度的字符。如果超过了255则是两个长度的字符。
注意
  MYSQL遵从标准SQL语法,并且不移除VARCHAR值的末尾空格。
VARCHAR是对CHARACTER VARYING的缩写。NATIONAL VARCHAR是定义个varchar列的标准SQL写法。Mysql同样使用UTF8作为预定义字符集。10.1.3.7National Character Set.
NVarchar 是对NATIONAL VARCHAR的缩写。
>BINARY[(M)]
BINARY类型和char类型类似,但存储二进制类型字符而不是非二进制字符。可选项长度M表示了列长度。默认值为1.
>VARBINARY(M)
BLOB列最大长度为255bytes。每一个TINYBLOB值被存储使用一个1-byte长度的前缀说明值的数字大小。
>TINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name]
一个TEXT列最大长度255个字符。如果值中包含了多字节字符则有效长度会更少。每一个TINTEXT值存储使用一个1-byte长度固定前缀来说明值的数量。
>BLOB[(M)]
一个BLOB列最大长度为65535bytes.每一个BLOB值存储使用2-byte长度的前缀来说明智的bytes数量。
可选项M能够给出这种类型。如果这么做了,MySQL创建能够容纳值M长度字节的最小BLOB长度的列。
>TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
一个TEXT列最大长度65535字符。有效的最大长度可能会因为值中包含了多个字符而变少。每一个TEXT值被存储使用一个2-byte长度的前缀说明值的byte个数。
选项M能够给出对这种类型。如果你这么做了,Mysql会创建一个能够包含M字符长度的最小TEXT类型的列。
>MEDIUMBLOB
TEXT 列的最大长度为 16,777,215 (224 − 1) characters.如果值中包含了多字符可能会比这个少一些。每一个 MEDIUMTEXT 值使用一个3-byte 长度的前缀来说明值中的byte个数。


>LONGBLOB


BLOB 列的最大长度 4,294,967,295 或者 4GB (232 − 1) bytes.LONGBLOB 列的最大有效长度依赖于配置的包的最大尺寸在客户端/服务器端和可用的内存. Each LONGBLOB 值使用一个 4-byte 长度的前缀来说明值中byte的个数。
>LONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]


TEXT列的最大长度为 4,294,967,295 或者 4GB (232 − 1) 字符. 如果值中包含了多个字符的值则实际有效最大值会稍微小一点。 LONGTEXT 列的最大有效长度也依赖于客户端和服务端通信协议配置的包大小和可用内存大小. 每一个值都使用4-byte前缀来说明值中的byte个数.


>ENUM('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]


一个枚举值. 一个字符串对象只能存储一个值, 从list集合中选择一个 'value1', 'value2', ..., NULL 或者是错误值'' . ENUM 值在内部表示为整数。


一个 ENUM column 最多可以有 65,535 不同的元素. (实际上限制少于3000.) 一张表中可以有不超过255个不同元素在集合中通过它的枚举或集合列考虑分组。对于更多的限制可以看 C.10.5, “Limits Imposed by .frm File Structure”.


>SET('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]


一个 set. 一个字符串对象可以有0或多个值, 其中的每一个个必须来自列表 'value1', 'value2', ... 集合中的值在内部表示为整数.


一个集合列能够有的最大不同值是64个。一张表能有不超过255个不同元素列表定义通过它的枚举和集合列被考虑为分组。更多信息请看 C.10.5, “Limits Imposed by .frm File Structure”.
到此关于数据类型综述就结束了,接下来我们将会详细介绍各种数据类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值