【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 字段会自动记录插入记录的本地时间。

相关推荐
刘一说1 天前
深入理解 Spring Boot 中的数据库迁移:Flyway 与 Liquibase 实战指南
数据库·spring boot·oracle
敲代码的瓦龙1 天前
操作系统?进程!!!
linux·c++·操作系统
August_._1 天前
【MySQL】SQL语法详细总结
java·数据库·后端·sql·mysql·oracle
打不了嗝 ᥬ᭄1 天前
数据链路层
linux·网络·网络协议·http
piaoxue8201 天前
MFA MACOS 安装流程
linux·运维·服务器
升鲜宝供应链及收银系统源代码服务1 天前
升鲜宝生鲜配送供应链管理系统---PMS--商品品牌多语言存储与 Redis 缓存同步实现
java·开发语言·数据库·redis·缓存·开源·供应链系统
苦学编程的谢1 天前
Redis_8_List
数据库·redis·缓存
鱼干~1 天前
electron基础
linux·javascript·electron
apocelipes1 天前
POSIX兼容系统上read和write系统调用的行为总结
linux·c语言·c++·python·golang·linux编程
曹天骄1 天前
阿里云 DCDN → CDN 无缝切换教程(以 example.com 为例)
数据库·阿里云·云计算