如何建立mysql时间戳字段

你这问题有点意思啊。
我当年刚搞数据库那会儿,也踩过不少坑呢。

记得有一年,我帮一个朋友搞他们的在线订餐系统。
他们用MySQL,存储订单时间。
一开始,他们直接用 NOW() 插入,结果有时候会发现时间不对。
后来我一看,他们有时候会在凌晨搞活动,数据库时间没跟上,就乱套了。

后来我就跟他们说,如果表结构设计得好,就不需要在插入的时候写 NOW()。
直接让数据库自己填默认值就行。
比如你设计表的时候,时间字段就写成 DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP(),那每次插入新订单,数据库自己就会填上当前的时间,准得很。

你看,比如这样:
sql CREATE TABLE orders ( id INT AUTO_INCREMENT PRIMARY KEY, customer_name VARCHAR(1 00) NOT NULL, order_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP(), total DECIMAL(1 0, 2 ) NOT NULL );
这样,每次你插入一条新订单,不用管 order_time,直接插其他数据,数据库就会自动填上当前的时间。
比如:
sql INSERT INTO orders (customer_name, total) VALUES ('张三', 9 9 .9 9 );
最后查出来,order_time 就是插入那一刻的时间。

当然,这也不是万能的。
有时候你确实需要手动控制时间,比如测试数据,或者有些特殊业务逻辑。
但大多数情况下,让数据库自己管理时间,准没错。

对了,你问时间戳那个,我印象里好像也是类似的道理。
时间戳就是 INT 类型,存储的时间是秒数。
比如:
sql CREATE TABLE logs ( id INT AUTO_INCREMENT PRIMARY KEY, event_time INT NOT NULL DEFAULT CURRENT_TIMESTAMP() );
这个 event_time 就是时间戳,CURRENT_TIMESTAMP() 会把当前时间转换成秒数存进去。
不过时间戳要注意,它跟 DATETIME 最大的区别是,时间戳是固定的,DATETIME 会受时区影响。

好,我讲得乱七八糟的,你自己慢慢琢磨。
你要是还有啥问题,随时问我。

mysql的timestamp到了2038年不能用了怎么办

改用datetime最简单。
直接换就行。

timestamp会随时区变,datetime不会。

整数方案要改代码。
麻烦点。

字符串方案影响效率。
别瞎用。

你先看看自己场景用哪个最合适。

mysql如何将TIMESTAMP设置时间精确到毫秒?

DATETIME加(3 )就能精确到毫秒。
上周刚处理一个项目用这个。

插入时直接加.7 8 9 就行。
查出来就是带毫秒的完整日期。

旧版MySQL没法用。
得想办法单独存毫秒部分。
比如用INT类型存。