【SQLite】设置本地时间戳默认值

使用CURRENT_TIMESTAMP创建,发现在部分运行环境时间不符,考虑用datetime('now', 'localtime')创建语句

复制代码
CREATE TABLE logs (
  id INTEGER PRIMARY KEY,
  event TEXT,
  created_at TEXT DEFAULT CURRENT_TIMESTAMP -- 或 datetime('now', 'localtime')
);

在 SQLite 中,你可以使用 datetime('now', 'localtime') 来获取本地时间并将其设置为默认值。以下是如何编写你的 CREATE TABLE 语句:

sql 复制代码
CREATE TABLE logs (
  id INTEGER PRIMARY KEY,
  event TEXT,
  created_at TEXT DEFAULT (datetime('now', 'localtime'))
);

关键点说明:

  1. datetime('now', 'localtime')

    • datetime('now', 'localtime') 会生成当前系统的本地时间(考虑时区)。
    • 这与 CURRENT_TIMESTAMP 的行为不同,后者是基于 UTC 时间。
  2. 括号的使用

    • 在定义字段的默认值时,datetime('now', 'localtime') 需要被括号包围,即 DEFAULT (datetime('now', 'localtime')),以确保正确解释表达式。

示例:

假设当前本地时间为 2024-10-11 14:30:00,当你插入一条记录到表中时,created_at 字段会自动填充为该时间。

插入数据测试:

sql 复制代码
INSERT INTO logs (event) VALUES ('Test event');

运行上面的命令后,logs 表中会有一条记录:

sql 复制代码
SELECT * FROM logs;

结果可能是:

复制代码
id | event      | created_at
---+------------+-------------------
1  | Test event | 2024-10-11 14:30:00

通过这种方式,created_at 字段会自动记录插入记录的本地时间。

相关推荐
YOU OU4 小时前
Redis基础常识与命令
数据库·redis·缓存
Yana.nice5 小时前
Linux 只保留 30 天内日志(find命令删除日志文件)
linux·运维·chrome
Database_Cool_6 小时前
OLTP 和 OLAP 区别详解:分析型数据库和事务型数据库怎么选(附阿里云 AnalyticDB MySQL 选型指南)
数据库·mysql·阿里云
爱写代码的阿森7 小时前
鸿蒙三方库 | harmony-utils之KvUtil键值型数据库操作详解
数据库·华为·harmonyos·鸿蒙·huawei
Database_Cool_7 小时前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
姜太小白8 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
窝子面8 小时前
手搓最简前后端协作-node
javascript·数据库
吳所畏惧9 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈9 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习