概述
数值
MySQL的数值数据类型包括整数、定点数、浮点数、和位值。除BIT之外的数值类型既可以带正负符号,也可以不带正负符号。
字符类
字符串可以容纳任何东西,包括图像和声音等各种二进制数据。字符串可以彼此比较,而比较操作又分为区分字母大小写和不区分字母大小写两种情况。此外,你还可以对字符串进行模式匹配。(事实上,MySQL的数值类型也允许进行模式匹配,只不过字符串数据类型上的模式匹配操作更多见一些)
日期/时间
CC、YY、MM、DD、hh、mm和ss分别代表世纪、年、月、日、时、分、秒。MySQL提供的时间类列类型有:日期与时间(合并表示或分开表示)、时间戳(一种专门用来记载某数据记录最近一次修改时间的类型)。此外,为了方便不需要完整日期而只需要年份数值的场合,MySQL还准备了一个YEAR类型
空间
这里展现了各种几何值和位置值
详解
数值
MySQL的数值数据类型分为3大类,如下所示。
♢精确值类型,它包括整数类型和DECIMAL。整数类型用来存放没有小数部分的数值,如43、-3、0、-75123等。只要是能够用整数来表示的数据,都可以用一个整数类型的数据列来保存。DECIMAL类型保存的精确值可以有一个小数部分,如3.14159、-.00273、-4.78等。这种数据类型非常适合用来保存财务金额数据。只要有可能,进入数据库的整数和DECIMAL值就会和你录入的完全一样,不存在四舍五入的问题,用它们进行的计算也是精确的。
♢浮点类型,它细分为单精度(FLOAT)和双精度(DOUBLE)。这些类型和DECIMAL类型一样,也可以用来存放有小数部分的数值,但他们容纳的是可能发生四舍五入的近视值,如3.9E+4或-0.1E-100。如果数值精确度的要求不那么严格或是数值大到DECIMAL类型无法表示,浮点类型会是不错的选择。诸如粮食平均亩产、空间距离、失业率之类的数据都很适合用浮点值来保存。
♢BIT类型用来保存位字段值(bit-field value)
取值范围、存储空间要求
M表示整数类型的最大显示宽度、浮点类型和DECIMAL类型的精度(小数点后面的数字)以及BIT类型的位数。对于那些有小数部分的数据类型,D代表数学精确度(小数点后面的数字个数),也称为“小数精度”(scale)。
字符串
字符串可以用来表示任何一种值,从这个意义上讲,它可以说是最常用的类型之一。比如说,你可以用二进制字符串类型来存储二进制数据,如图像、声音、gzip压缩工具的输出结果等。
取值范围、存储空间要求
M代表数据列值的最大长度(二进制字符串以字节为单位,非二进制字符串以字符为单位),L代表某给定值以字节计算的实际长度,w是相关字符集里最“宽”的字符所占用的字节数。BLOB和TEXT类型各有几种变体,它们之间的主要区别在于他们所能容纳的字符串值的最大尺寸。
有些类型用来保存二进制字符串(字节串),其他类型用来保存非二进制字符串。因此,上表里列出的最大尺寸对二进制字符串类型来说是字节数,对非二进制字符串来说是字符数。比如说,BINART(20)容纳20个字节,而CHAR(20)容纳20个字符(由多字节字符构成的字符串长度肯定会超过20个字节)。每一种二进制字符串类型都有一种对应的非二进制字符串类型,如下所示
BINARY和CHAR是固定长度的字符串类型。对于这两种类型的数据列,MySQL讲为每个值分配同样数量的存储空间,如果某个值比数据列的长度短,则在其尾部添加一些零值字节(0x00,BINARY类型)或空格(CHAR类型)以补足之。
日期/时间
取值范围、存储空间要求
在对日期/时间值进行修改时,如果你插入的是一个非法值,MySQL就会把它替换为相应的零值。如下所示各种零值,它们同时也是被声明为有NOT NULL属性的日期/时间数据列的默认值。如果启用了SQL模式,非法值将导致MySQL抛出一个错误并拒绝它们进入数据库
对于日期加时间形式的组合值,可以在日期和时间之间使用字母‘T’来代替空格作为分隔符(例如:’2008-12-3T12:00:00’)。
如果存储毫秒部分,毫秒部分讲被删除。
检索时,可以利用DATA_FORMAT()和TIME_FORMAT()函数以各种各样的格式来显示日期和时间值。
♢TIMESTAMP数据类型
TIMESTAMP数据类型用来保存日期和时间的组合值。
TIMESTAMP类型把即将进入1970年的那一刻作为它的取值范围下限值,上限值对应着4个字节所能表示的Unix时间的极限。
TIMESTAMP值以UTC(世界标准时间)格式存放。当你保存一个TIMESTAMP值的时候,服务器会把它从连接的时区转换为UTC的时间值。当你检索这个值的时候,服务器又会把它从UTC时间值转换回连接的时区,让你看到的时间值和你存储的一样。不过如果另一个客户使用另一个时区去连接服务器并检索这个值,它讲看到按照它自己的时区转换而来的值。
TIMESTAMP类型具备自动初始化和自动更新属性。
空间
见概述
文章内容详见《MySQL技术内幕(第四版)》