You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite中CURRENT_TIMESTAMP被识别为字符串字面量的问题排查

问题原因及解决方案

核心问题:字段类型不匹配

SQLite对CURRENT_TIMESTAMP这类时间默认值的识别有严格的字段类型要求:只有字段类型为TIMESTAMP、DATETIME或INTEGER时,才会将CURRENT_TIMESTAMP解析为函数调用,自动生成时间戳。你将created_at设为text类型,SQLite会直接把CURRENT_TIMESTAMP当作普通字符串存储,不会执行函数计算。

同理,datetime()、strftime()这类函数作为默认值时,若字段类型为text,也会被当作字符串字面量处理,无法触发函数执行。

修复方案

方案1:使用时间专用字段类型(推荐)

将created_at的类型改为TIMESTAMP,SQLite会自动处理时间戳的生成与存储:

CREATE TABLE `table` (
    `id` text PRIMARY KEY,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
);

方案2:显式用函数调用(适合必须用text类型的场景)

如果需要保持text类型,必须用括号包裹函数调用,明确告知SQLite这是函数执行而非字符串:

CREATE TABLE `table` (
    `id` text PRIMARY KEY,
    `created_at` text DEFAULT (datetime('now')) NOT NULL
);

Turso(基于libsql)遵循SQLite的语法规则,所以以上方案在Turso和SQLite在线环境中都能生效。

内容的提问来源于stack exchange,提问作者Pramus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 02:43:10