MySQL数据类型
- 数值型
- 字符串型
- 日期和时间类型
如图所示:
支持在类型名称后面的小括号内指定显示宽度。int(5)表示当数值小于5位的时候在数字前面填满宽度。如果不指定,默认是int(11)
==zerofill==就是用0填充的意思,数字位数不够的空间用字符0填满。
可以用来存放多位二进制数,范围从 1~ 64,如果不写则默认为 1 位。对于位字段,用bin()或者 hex()函数进行读取。
当保存 BINARY 值时,在值的最后通过填充“0x00” (零字节)以达到指定的字段定义长度。对于一个 BINARY(3)列,当插入时’a’变为’a\0\0’。
它的值范围需要在创建表时通过枚举方式显式指定, 对 1~ 255 个成员的枚举需要 1 个字节存储;对于 255~65535 个成员,需要 2 个字节存储。最多允许有 65535 个成员。
ENUM 类型只允许从值集合中选取单个值,而不能一次取多个值
Set 和 ENUM 类型非常类似,也是一个字符串对象。除了存储之外,最主要的区别在于 Set 类型一次可以选取多个成员,而 ENUM则只能选一个。
timestamp的取值范围是19700101080001到2038年的某一天,因此不适合存放比较久远的日期
MySQL 以 YYYY 格式检索和显示 YEAR 值,范围是 1901~2155。当使用两位字符串表示 年份时,其范围为“00”到“99”。
- “00”到“69”范围的值被转换为 2000~2069 范围的 YEAR 值
- “70”到“99”范围的值被转换为 1970~1999 范围的 YEAR 值。
==到底什么样的格式才能够正确地插入到对应的日期字段中呢?== 面以 DATETIME 为例
1. ==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” 是等价的。对于包括日期部分间割符的字符串值,如果日和月的值小于10,不需要指定两位数。“1979-6-9”与“1979-06-09”是相同的。同样,对于包括时间部分69间割符的字符串值,如果时、分和秒的值小于 10,不需要指定两位数。“1979-10-30 1:2:3”与“1979-10-30 01:02:03”相同。
1. ==YYYYMMDDHHMMSS 或 YYMMDDHHMMSS== 格式的没有间割符的字符串,假定字符串对于日期类型是有意义的。例如,“19970523091528” 和 “970523091528” 被解释为 “1997-05-23 09:15:28” ,但“971122129015”是不合法的(它有一个没有意义的分钟部分) ,将变为“0000-00-00 00:00:00” 。
1. ==YYYYMMDDHHMMSS 或 YYMMDDHHMMSS 格式的数字==,假定数字对于日期类型是有意义的。 例如, 19830905132800和 830905132800被解释为 “1983-09-05 13:28:00” 。数字值应为 6、8、12 或者 14 位长。如果一个数值是 8 或 14 位长,则假定为YYYYMMDD 或 YYYYMMDDHHMMSS 格式,前 4 位数表示年。如果数字 是 6 或 12位长,则假定为 YYMMDD 或 YYMMDDHHMMSS 格式,前 2 位数表示年。其他数字被解释为仿佛用零填充到了最近的长度。
1. ==函数返回的结果==,其值适合 DATETIME、DATE 或者 TIMESTAMP 上下文,例如 NOW()或 CURRENT_DATE。