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

向GridDB容器插入数据时遭遇'Unacceptable timestamp string specified'错误

GridDB插入数据时"Unacceptable timestamp string specified"错误解决

环境与问题描述

在Windows 11 WSL的Ubuntu环境中运行GridDB 5.5.0-40191 CE版本,使用gs_sh CLI工具向DimEmployee表插入数据时触发错误,提示Unacceptable timestamp string specified。

表结构

CREATE TABLE DimEmployee (
    EmployeeKey INTEGER NOT NULL PRIMARY KEY ,
    ParentEmployeeKey INTEGER NULL,
    EmployeeNationalIDAlternateKey STRING NULL,
    ParentEmployeeNationalIDAlternateKey STRING NULL,
    SalesTerritoryKey INTEGER NULL,
    FirstName STRING NOT NULL,
    LastName STRING NOT NULL,
    MiddleName STRING NULL,
    NameStyle BOOL NOT NULL,
    Title STRING NULL,
    HireDate TIMESTAMP NULL,
    BirthDate TIMESTAMP NULL,
    LoginID STRING NULL,
    EmailAddress STRING NULL,
    Phone STRING NULL,
    MaritalStatus STRING NULL,
    EmergencyContactName STRING NULL,
    EmergencyContactPhone STRING NULL,
    SalariedFlag BOOL NULL,
    Gender STRING NULL,
    PayFrequency BYTE NULL,
    BaseRate float NULL,
    VacationHours SHORT NULL,
    SickLeaveHours SHORT NULL,
    CurrentFlag BOOL NOT NULL,
    SalesPersonFlag BOOL NOT NULL,
    DepartmentName STRING NULL,
    StartDate TIMESTAMP NULL,
    EndDate TIMESTAMP NULL,
    Status STRING NULL,
    EmployeePhoto BLOB NULL );

报错的INSERT语句

INSERT INTO DimEmployee VALUES (6,267,'480168528',NULL,11,'Thierry','D''Hers','B',false,'Tool Designer',TIMESTAMP('2007-07-11T00:00:00.000Z'),TIMESTAMP('1959-02-26T00:00:00.000Z'),'motor-works\thierry0','thierry0@motor-works.com','168-555-0183','M','Thierry D''Hers','168-555-0183',false,'M',2,25.00,9,24,true,false,'Tool Design',TIMESTAMP('2007-07-11T00:00:00.000Z'),NULL,'Current',NULL);

完整错误信息(中文翻译)

D20332: 执行SQL时发生意外错误。:
msg=[[305005:SQL_PROC_VALUE_SYNTAX_ERROR] 无法计算常量表达式(原因:指定了不可接受的时间戳字符串
(value=1959-02-26T00:00:00.000Z)(原因:内部错误,工具出现意外问题(原因:时间字段超出范围)))在更新操作时
(sql="insert INTO DimEmployee VALUES
(6,267,'480168528',NULL,11,'Thierry','D''Hers','B',false,'Tool
Designer',TIMESTAMP('2007-07-11T00:00:00.000Z'),TIMESTAMP('1959-02-26T00:00:00.000Z'),'motor-worksthierry0','thierry0@motor-works.com','168-555-0183','M','Thierry D''Hers','168-555-0183',false,'M',2,25.00,9,24,true,false,'Tool
Design',TIMESTAMP('2007-07-11T00:00:00.000Z'),NULL,'Current',NULL)")
(db='public') (user='admin') (appName='gs_sh')
(clientId='9ee7a962-e2cd-47ed-a5b9-d0867d9389db:91')
(source={clientId=5, address=127.0.0.1:38326})
(address=127.0.0.1:20001, partitionId=1084)]

问题原因

GridDB 5.5.0 CE版本的TIMESTAMP类型基于Unix时间戳实现,仅支持1970-01-01 00:00:00 UTC及以后的时间。插入语句中的1959-02-26T00:00:00.000Z早于该起始时间,导致触发"时间字段超出范围"的内部错误。

解决方案

方案1:升级GridDB版本

GridDB较新版本(如5.6及以上)扩展了TIMESTAMP的时间范围支持,可覆盖1970年之前的日期。升级到对应版本后,无需修改数据即可正常插入。

方案2:调整字段类型存储日期

若无法升级,可将BirthDate等需要存储早于1970年日期的字段类型改为STRING,插入时直接存储日期字符串,查询时再按需转换格式。

  • 修改表结构:
ALTER TABLE DimEmployee ALTER COLUMN BirthDate STRING NULL;
  • 调整INSERT语句(去掉TIMESTAMP函数,直接传入字符串):
INSERT INTO DimEmployee VALUES (6,267,'480168528',NULL,11,'Thierry','D''Hers','B',false,'Tool Designer',TIMESTAMP('2007-07-11T00:00:00.000Z'),'1959-02-26T00:00:00.000Z','motor-works\thierry0','thierry0@motor-works.com','168-555-0183','M','Thierry D''Hers','168-555-0183',false,'M',2,25.00,9,24,true,false,'Tool Design',TIMESTAMP('2007-07-11T00:00:00.000Z'),NULL,'Current',NULL);

方案3:转换时间为支持范围内的等效值(仅临时应急)

若业务允许,可将早于1970年的日期替换为1970-01-01或其他符合范围的时间,但此方法会丢失原始数据准确性,仅适合非关键场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:04:53