数据库中每个字段都有适当的数据类型,用于限制或允许该字段中存储的数据。
MySQL中支持三种数据类型:数值型、字符串型、日期和时间型。
不同的数据类型提供不同的取值范围,可以存储的值范围越大,所需的存储空间也会越大。因此应根据实际需要选择最合适的类型,这样有利于提高查询的效率和节省存储空间。
数值型
数值型分为整数型和小数型。整数型中TINYINT占用存储空间最小,为1字节(8bit),BIGINT占用存储空间最大,为8字节(64bit)。
小数型分为浮点数和定点数。浮点数有单精度浮点数FLOAT和双精度浮点数DOUBLE,定点数只有一种DECIMAL。浮点类型和定点类型都可以用(M, D)来表示,其中M称为精度,表示总位数;D称为标度,表示小数的位数。
浮点数类型的取值范围为 M(1~255)和 D(1~30,且不能大于 M-2),分别表示显示宽度和小数位数。M 和 D 在 FLOAT 和DOUBLE 中是可选的,默认为硬件所支持的最大精度。DECIMAL 的默认 D 值为 0、M 值为 10。
不论是定点还是浮点类型,如果用户指定的精度超出精度范围,则会四舍五入处理。
定点数以字符串形式存储,在对精度要求比较高的时候(如货币、科学数据),使用 DECIMAL 的类型比较好。两个浮点数进行减法和比较运算时也容易出问题,所以在使用浮点数时需要注意,并尽量避免做浮点数比较。
字符串型
字符串类型用来存储字符串数据,还可以存储图片和声音的二进制数据。char存储定长字符串,可以指定字符长度,如char(10),不论存储数据是否达到10个字节,都会占用10个字节的空间(自动用空格填充),如’abc ',提取数据时需要用trim()去掉多余的空格。因为长度固定,方便程序的存储和查找,存取效率比较高。
varchar存储可变长度字符串,可以指定字符长度,如varchar(10),占用实际字符长度的存储空间,如’abc’。
知道固定长度的用char,经常变化的字段用varchar。
日期和时间型
year以 4 位字符串或者 4 位数字格式表示 ‘YYYY’ 或者 YYYY,如输入 ‘2010’ 或 2010,插入数据库的值均为 2010。
以 2 位字符串格式表示’00’~’69’ 和 ‘70’~’99’ 范围的值分别被转换为 2000~2069 和 1970~1999 范围的 year 值。‘0’ 与 ‘00’ 的作用相同。插入超过取值范围的值将被转换为 2000。
以 2 位数字表示1~99 和 70~99 范围的值分别被转换为 2001~2069 和 1970~1999 范围的 year 值。 0 值将被转换为 0000,而不是 2000。
time‘D HH:MM:SS’ 格式的字符串。还可以使用这些“非严格”的语法:‘HH:MM:SS’、‘HH:MM’、‘D HH’ 或 ‘SS’。这里的 D 表示日,可以取 0~34 之间的值。在插入数据库时,D 被转换为小时保存,格式为 “D*24+HH”。
‘HHMMSS’ 格式、没有间隔符的字符串或者 HHMMSS 格式的数值,假定是有意义的时间。例如,‘101112’ 被理解为’10:11:12’,但是 ‘106112’ 是不合法的(它有一个没有意义的分钟部分),在存储时将变为 00:00:00。
如果没有冒号,MySQL 解释值时,假定最右边的两位表示秒。如 ‘1112’ 和 1112 表示00:11:12, ‘12’ 和 12 表示00:00:12。TIME 值中如果使用冒号则肯定被看作当天的时间,如’11:12’ 表示 11:12:00。
date以 ‘YYYY-MM-DD’ 或者 ‘YYYYMMDD’ 字符中格式表示的日期,如输入 ‘2015-12-31’ 或者 ‘20151231’,插入数据库的日期为2015-12-31。
以 ‘YY-MM-DD’ 或者 ‘YYMMDD’ 字符串格式表示日期,‘00~69’ 范围的年值转换为 ‘2000 ~ 2069’,‘70~99’ 范围的年值转换为 ‘1970~1999’。如输入 ‘15-12-31’,插入数据库的日期为 2015-12-31;输入 ‘991231’,插入数据库的日期为 1999-12-31。
以 YYMMDD 数字格式表示的日期,00~69 范围的年值转换为 2000~2069,80~99 范围的年值转换为 1980~1999。如输入 151231,插入数据库的日期为 2015-12-31,输入 991231,插入数据库的日期为 1999-12-31。
MySQL 允许“不严格”语法:任何标点符号都可以用作日期部分之间的间隔符。例如,‘98-11-31’、‘98.11.31’、‘98/11/31’和’98@11@31’ 是等价的,这些值也可以正确地插入数据库。
datetime以 ‘YYYY-MM-DD HH:MM:SS’ 或者 ‘YYYYMMDDHHMMSS’ 字符串格式表示的日期,如输入 ‘2014-12-31 05:05:05’ 或者 '20141231050505’,插入数据库的 DATETIME 值都为 2014-12-31 05:05:05。
以 ‘YY-MM-DD HH:MM:SS’ 或者 ‘YYMMDDHHMMSS’ 字符串格式表示的日期,‘00~79’ 范围的年值转换为 ‘2000~2079’,‘80~99’ 范围的年值转换为 ‘1980~1999’。如输入 ‘14-12-31 05:05:05’,插入数据库的 DATETIME 为 2014-12-31 05:05:05;输入 141231050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05。
以 YYYYMMDDHHMMSS 或者 YYMMDDHHMMSS 数字格式表示的日期和时间。如输入 20141231050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05;输入 140505050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05。
MySQL 允许“不严格”语法:任何标点符号都可用作日期部分或时间部分之间的间隔符。例如,‘98-12-31 11:30:45’、‘98.12.31 11+30+35’、‘98/12/31 113045’ 和 ‘98@12@31 113045’ 是等价的,这些值都可以正确地插入数据库。