SQLite3 TIMESTAMP类型存储数据比实际时间多8小时

SQLite默认时区时UTC,不支持修改

解决办法

一、应用层处理,查询结果加8小时

二、改为LONG类型

### SQLite3 数据类型及其用法 SQLite3 虽然允许忽略数据类型,但在 `CREATE TABLE` 语句中指定数据类型有助于提高程序的可读性和维护性[^1]。SQLite 支持种常用的数据类型,并通过亲和关系(Affinity)来指导数据存储方式[^2]。 #### 常见数据类型 以下是 SQLite 中常见且推荐使用的数据类型: - **INTEGER**: 存储整数值。 ```sql CREATE TABLE example ( id INTEGER PRIMARY KEY, value INT NOT NULL ); ``` - **REAL (FLOAT)**: 存储浮点数。 ```sql CREATE TABLE measurements ( measurement_id INTEGER PRIMARY KEY, temperature REAL ); ``` - **TEXT**: 存储字符串或文本数据。 ```sql CREATE TABLE users ( user_id INTEGER PRIMARY KEY, username TEXT UNIQUE NOT NULL ); ``` - **BLOB**: 存储二进制大对象,适合保存图片或其他二进制文件。 ```sql CREATE TABLE images ( image_id INTEGER PRIMARY KEY, data BLOB ); ``` - **NULL**: 表示缺失值,在字段定义时不常显式声明。 - **BOOLEAN**: 实际上并不存在布尔类型的独立实现;通常使用 INTEGER 来模拟布尔逻辑,其中 0 表示假而任何非零值表示真。 ```sql CREATE TABLE settings ( setting_name TEXT PRIMARY KEY, is_enabled INTEGER CHECK(is_enabled IN (0, 1)) ); ``` 对于时间戳和其他日期/时间信息,尽管 SQL92 标准中有相应的类型SQLite 并不直接支持特定的时间类型[TIMESTAMP],而是可以通过 TEXT、REAL 或 INTEGER 类型配合函数处理日期时间时间间隔。 #### 创建表格实例 下面是一个综合运用上述几种基本类型的例子: ```sql -- 连接到名为 'example.db' 的 SQLite 数据库 conn = sqlite3.connect('example.db') -- 定义一个新的表结构 CREATE TABLE IF NOT EXISTS employees ( employee_id INTEGER PRIMARY KEY AUTOINCREMENT, first_name TEXT NOT NULL, last_name TEXT NOT NULL, hire_date DATE, -- 使用 TEXT 类型存储 ISO8601 字符串形式的日期 salary REAL, department_id INTEGER REFERENCES departments(department_id), photo BLOB ); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值