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

Chapter 11 Data Types 数据类型
11.1 Data Type Overview 数据类型总览
11.2 Numeric Types   数字类型
11.3 Date and Time Types 日期和时间类型
11.4 String Types  字符串类型
11.5 Spatial Data Types 空间数据类型
11.6 The JSON Data Type JSON数据类型
11.7 Data Type Default Values  数据类型的默认值
11.8 Data Type Storage Requirements 数据类型的存储要求
11.9 Choosing the right Type for a Column 选择正确的类型对列
11.10 Using Data Types from Other Database Engines 使用其它数据库引擎中的数据类型
mysql对数据类型的支持分类:数字类型,日期和时间类型,字符串(字节和字符)类型,空间类型和JSON数据类型。这章提供了一个对这些数据类型的综述,更具体的对每种类型的描述在之后具体的分类中和一个总结关于数据类型存储要求。初始概览是一个简介。更多的详情描述在之后的章节会解释额外的信息关于特别的数据类型,例如对于特别的值的允许格式。
数据类型描述使用这些协议:
>M说明了最大可展示的整形的最大数。对于浮点和定点类型,M是一个数字总数能够存储的。对于字符串类型,M是最大长度,M的具体值依赖于具体的数据类型。
>D应用于浮点和定点类型,声明小数点后面的数字的个数。最大的可能值是30,但是尽量不要大于M-2
>fsp 应用于时间,日期和时间戳类型并且声明了小数秒精度;也就是小数点后面的数位数(秒的小数部分)。fsp可能的值必须是0-6之间的值。0表示无小数部分。如果省略,默认就是0.(这不同于标准SQL,默认是6.)
>方括号([])声明了类型定义的选项部分。
-------------------------------------
11.1 Data Type Overview 数据类型概述
11.1.1 Numeric Type Overview  数字类型的概述
11.1.2 Date and Time Type Overview 时间和日期类型的概述
11.1.3 String Type Overview  字符串类型的概述
---------------------------------------
11.1.1 Numeric Type Overview  数字类型的概述
下面是对数字类型的综述,对于额外的关于属性和存储要求请看11.2的数字类型和11.8的数据类型存储要求。
M声明了整形的最大可用宽带。最大可展示宽度为255.显示的宽度和类型锁包含的值范围无关。具体的描述在11.2的数字类型。对于浮点和定点类型,M是一个数字总数能够被存储的总数。
如果你对数字列说明了ZEROFILL,mysql自动添加无符号属性到列中。
数字数据类型可以是无符号属性,也可以是有符号的。然而,这些数据类型默认被声明,所以有符合属性无影响。
SERIAL 是对BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的别名。
SERIAL DEFAULT VALUE定义的一个整数列是一个别名NOT NULL AUTO_INCREMENT UNIQUE.
注意如果你对两个整数类型做减运算且其中一个是无符号的,结果也是无符号的除非NO_UNSIGNED_SUBTRACTION sql模型是可用的。具体请看12.10的计算函数和操作。
>BIT[(M)]:一个bit-value类型。M声明了每个值的位的数量,从1到64。如果M省略则默认是1.
>TINYINT[(M)] [UNSIGNED] [ZEROFILL]:一个非常小的整数。有符号范围是-128到127.无符号值是0-255.
>BOOL, BOOLEAN:该类型是TINYINT(1)的同义词。0值也就是false,非0值则是true。
mysql> SELECT IF(0, 'true', 'false');
+------------------------+
| IF(0, 'true', 'false') |
+------------------------+
| false                  |
+------------------------+


mysql> SELECT IF(1, 'true', 'false');
+------------------------+
| IF(1, 'true', 'false') |
+------------------------+
| true                   |
+------------------------+


mysql> SELECT IF(2, 'true', 'false');
+------------------------+
| IF(2, 'true', 'false') |
+------------------------+
| true                   |
+------------------------+
然而,TRUE和FALSE也仅仅是1和0的别名,具体展示如下:
mysql> SELECT IF(0 = FALSE, 'true', 'false');
+--------------------------------+
| IF(0 = FALSE, 'true', 'false') |
+--------------------------------+
| true                           |
+--------------------------------+


mysql> SELECT IF(1 = TRUE, 'true', 'false');
+-------------------------------+
| IF(1 = TRUE, 'true', 'false') |
+-------------------------------+
| true                          |
+-------------------------------+


mysql> SELECT IF(2 = TRUE, 'true', 'false');
+-------------------------------+
| IF(2 = TRUE, 'true', 'false') |
+-------------------------------+
| false                         |
+-------------------------------+


mysql> SELECT IF(2 = FALSE, 'true', 'false');
+--------------------------------+
| IF(2 = FALSE, 'true', 'false') |
+--------------------------------+
| false                          |
+--------------------------------+
最后两个语句的结果说明了2既不等于1也不等于0.
>SMALLINT[(M)] [UNSIGNED] [ZEROFILL]:一个小整数,有符号范围是-32768到32767,无符号范围是0到65535
>MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]:一个中间大小的整数,有符号范围是-8388608到8388607,无符号范围是0到16777215
>INT[(M)] [UNSIGNED] [ZEROFILL]:一个正常大小的整数,有符号范围是-2147483648到2147483647,无符号范围是0到4294967295.
>INTEGER[(M)] [UNSIGNED] [ZEROFILL]:该类型是INT的同义类型。
>BIGINT[(M)] [UNSIGNED] [ZEROFILL]:一个大整数,有符号范围-9223372036854775808 to 9223372036854775807. 无符号范围 0 to 18446744073709551615.
SERIAL 是对BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的别名。
对于BIGINT列你需要知道的一些事情:
1)所有的算法都是使用有符号的BIGINT或者DOUBLE值来完成,所以你不应该使用无符号大整数超过9223372036854775807(63位)除非使用位函数。如果你这么做了,结果的后几位也许是错误的因为范围错了当转变一个BIGINT值到DOUBLE时。
MYSQL能够处理BIGINT在下列情形:
》使用integers来存储无符号值到BIGINT列
》在MIN(col_name)或者MAX(col_name),其中col_name引用了BIGINT列
》当使用操作(+,-,*等)其中两边的操作数都是integers.
2) 你总是可以存储一个精确的integer值在BIGINT列通过存储它使用一个字符串。在这种情况下,mysql完成一个字符串到数字的转换,涉及到无中介双精度表示。
3)对于使用两个整个操作-,+,*等操作使用BIGINT算法。这意味着如果你用两个大整数相乘,你也许得到的并不是你想要的值当值大于9223372036854775807。
>DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]:一个固定点位的数字。M是精确度的总数,而D是小数点后的位数。小数点和符号不计算在M中,如果D是0,值没有小数部分。M的最大是65位,小数点后的位数最大是30.默认是0,M默认是10位
无符号,如果设置了则不允许出现负值。所有计算关于DECIMAL列都完成在65位以内。
>DEC[(M[,D])] [UNSIGNED] [ZEROFILL], NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL], FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]: 这些类型好DECIMAL是同义。FIXED同义可以用于其他数据库系统。
>FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]: 一个小浮点数。允许的值的范围是-3.402823466E+38 到 -1.175494351E-38, 0, 和 1.175494351E-38 到 3.402823466E+38. 这些是理论上的限制,基于IEEE标准。实际上可能更小依赖于你的硬件和操作系统。
M是数字总数,D是小数点位后的数字。如果M和D都不写,那么值被存储限制来自硬件。一个单精度浮点数计算大概需要7个decimal的地方。
UNSIGNED,如果设置的话,不允许出现负值。使用FLOAT也许给你一些未预期的问题,因为所有的计算在MYSQL都是双精度。看B5.4.7通过不匹配行来解决问题。
>DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]:一个正常大小(双精度)的浮点数。允许的值的范围-1.7976931348623157E+308 到 -2.2250738585072014E-308, 0, 和 2.2250738585072014E-308 到 1.7976931348623157E+308.这些也是理论上的限制,基于IEEE标准。实际上的值可能稍微小一点,依赖于你硬件和操作系统。
M是数字总数,D是小数点后的位数,如果M和D忽略不写,那么实际限制来自硬件。一个双精度的浮点数计算大约15个decimal位置。
UNSIGNED,如果设置了,则不允许出现负数。
>DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED] [ZEROFILL]:这些类型是DOUBLE的同义。如果REAL_AS_FLOAT的SQL模型可用。REAL是一个FLOAT的同义,而不是DOUBLE的同义。
>FLOAT(p) [UNSIGNED] [ZEROFILL]:一个浮点数,p表示了精度位数,但是mysql使用这个值仅仅决定是否使用FLOAT或者DOUBLE对于结果类型。如果p是0到24,数据类型为FLOAT,没有M或者D值,如果p是25到53,数据类型为DOUBLE,没有M或者D的值。结果列的大小是和单精度的FLOAT或者双精度的DOUBLE数据类型描述的一样。
FLOAT(P)是同义被提供在ODBC部分。
-------------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值