TIMESTAMP列的显示格式与DATETIME列相同 。显示宽度固定在19字符,并且格式为YYYY-MM-DD HH:MM:SS 。
不同点:
TIMESTAMP
- 4个字节储存,时间范围:1970-01-01 08:00:01 ~ 2038-01-19 11:14:07 值以UTC格式保存,涉及时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区 。
- datetime 8个字节储存,时间范围:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
- 实际格式储存,与时区无关
- 如何使用TIMESTAMP的自动赋值属性?
可以将1和2结合起来:ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 。
- 如何使用INT UNSIGNED存储ip?
- 如无备注,所有字段都设置NOT NULL,并设置默认值;
- 禁止在数据库中存储明文密码
- 如无备注,所有的布尔值字段,如is_hot、is_deleted,都必须设置一个默认值,并设为0;
- 如无备注,排序字段order_id在程序中默认使用降序排列;
- 整形定义中不添加长度,比如使用INT,而不是INT[4]
注意数值类型括号后面的数字只是表示宽度而跟存储范围没有关系 。很多人他们认为INT(4)和INT(10)其取值范围分别是 (-9999到9999)和(-9999999999到9999999999),这种理解是错误的 。其实对整型中的 M值与 ZEROFILL 属性结合使用时可以实现列值等宽 。不管INT[M]中M值是多少,其取值范围还是 (-2147483648到2147483647 有符号时),(0到4294967295无符号时) 。
显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示 。当结合可选扩展属性ZEROFILL使用时默认补充的空格用零代替 。例如:对于声明为INT(5) ZEROFILL的列,值4检索为00004 。请注意如果在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度,如果为一个数值列指定ZEROFILL, MySQL自动为该列添加UNSIGNED属性 。
- 使用VARBINARY存储大小写敏感的变长字符串
CHAR和VARCHAR类型类似,但它们保存和检索的方式不同 。它们的最大长度和是否尾部空格被保留等方面也不同 。CHAR和VARCHAR类型声明的长度表示你想要保存的最大字符数 。例如,CHAR(30)可以占用30个字符 。
CHAR列的长度固定为创建表时声明的长度 。长度可以为从0到255的任何值 。当保存CHAR值时,在它们的右边填充空格以达到指定的长度 。当检索到CHAR值时,尾部的空格被删除掉 。在存储或检索过程中不进行大小写转换 。
VARCHAR列中的值为可变长字符串 。长度可以指定为0到65,535之间的值 。(VARCHAR的最大有效长度由最大行大小和使用的字符集确定 。整体最大长度是65,532字节) 。同CHAR对比,VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节) 。VARCHAR值保存时不进行填充 。当值保存和检索时尾部的空格仍保留,符合标准SQL 。
char适合存储用户密码的MD5哈希值,它的长度总是一样的 。对于经常改变的值,char也好于varchar,因为固定长度的行不容易产生碎片,对于很短的列,char的效率也高于varchar 。char(1)字符串对于单字节字符集只会占用一个字节,但是varchar(1)则会占用2个字节,因为1个字节用来存储长度信息 。
推荐阅读
- 靠接外包的程序员,能生活的下去吗
- 「PHP编程」为什么使用composer下载的包,不需要再include?
- 下雪的季节 注意事项
- 淘宝卖家动态评分为什么会自动下降 淘宝动态评分一直下降
- |玩和田玉的人最好不要有这种心理,你知道原因吗?一起来探讨下
- 高端茶价格纷纷下挫,礼品茶难销平民茶走俏
- RSS|在流量大厂的围攻下 有人希望20多岁老掉牙的技术复活
- 男性春季养生调养身体的方法
- 淘宝拍下付款后怎么取消订单 淘宝拍卖可以取消订单吗
- 电力公司桌游玩法简介