为何CREATE TABLE语句报“Near '(': syntax error”?需生成数值时间戳
问题解决:CREATE TABLE语法错误与时间戳数值存储实现
错误原因
触发Near "(": syntax error的核心原因是current_timestamp()的写法错误——多数SQL数据库(比如SQLite)中,CURRENT_TIMESTAMP是内置时间常量,并非需要调用的函数,因此不能加括号。
修正方案(同时满足数值时间戳需求)
若要存储Unix时间戳(数值形式,如1671613200),需调整字段类型并使用对应数据库的时间戳生成函数作为默认值:
SQLite适配语句
CREATE TABLE IF NOT EXISTS tickets ( numero INTEGER PRIMARY KEY AUTOINCREMENT, identifier VARCHAR(4) NOT NULL, subject VARCHAR(150) NOT NULL, concerned_staff TEXT NULL, author_id VARCHAR(22) NOT NULL, created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')), is_archived BOOLEAN NOT NULL DEFAULT false, ticket_channel_id VARCHAR(24) NOT NULL );
- 用
strftime('%s', 'now')生成当前时间的秒级Unix时间戳,括号用于包裹表达式,符合SQLite语法要求; - 将
created_at字段类型改为INTEGER,匹配数值型时间戳的存储需求。
其他数据库适配参考
- MySQL/MariaDB:使用
UNIX_TIMESTAMP()函数,字段类型设为INTEGERcreated_at INTEGER NOT NULL DEFAULT UNIX_TIMESTAMP(), - PostgreSQL:使用
EXTRACT(EPOCH FROM NOW())转换为时间戳,字段类型设为INTEGERcreated_at INTEGER NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW())::INTEGER,
内容的提问来源于stack exchange,提问作者V E L Δ
相关产品推荐
相关产品推荐

