当前位置:  开发笔记 > 数据库 > 正文

SQlite:unix时间戳的列格式; 整数类型

如何解决《SQlite:unix时间戳的列格式;整数类型》经验,为你挑选了2个好方法。

原始问题:unix时间戳的正确列格式是什么?

网络充满了混乱:一些帖子声称SQLite没有无符号类型 - 无论是什么,或者除了64位int类型(但有(反)示例调用UNSIGNED INTEGER).数据类型页面仅在bigint示例中提及它.它还声称有一个6字节的整数,但没有为它命名.似乎我尝试使用INTEGER将4字节签名的签名存储unix时间戳作为负数.我听说有些系统也会返回64位时间戳.OTOH我不太喜欢浪费4个字节来存储1个额外位(时间戳的最高位),即使我必须选择更大的数据格式,我宁愿选择6字节的数据格式.我甚至看过一篇声称SQLite unix时间戳是REAL类型的帖子...

完全问题:有人可以澄清一下这个烂摊子吗?



1> Matthew Flas..:

SQLite 没有无符号类型.这直接来自主要作者以及文档.而且,整数没有固定的列宽; 实际的磁盘宽度是一个实现细节.

SQLite没有日期或时间数据类型.但是,它具有可以在ISO8601字符串(TEXT),Julian天数(REAL)和Unix时间戳(INTEGER)上运行的日期函数.

因此,如果您决定将时间字段设置为Unix时间戳,请知道它可以存储多达 64位的有符号整数,但是现在存储的值实际上应该占用磁盘上的32位,即使源值是64位也是如此time_t.



2> dan04..:

整数的大小

SQLite数据库中的所有列都是内部可变宽度的.的文件格式存储在整数1,2,3,4,6,或8字节,这取决于数多大,加在标题中指示的大小的一个字节.因此,总的来说,存储为整数的Unix日期将占用5个字节,直到2038-01-19和之后的7个字节.

从C API用户的角度来看,所有整数都是64位签名的.

列类型

是否将列声明为INTEGER,UNSIGNED INTEGER,BIGINT或其他任何内容都无关紧要. 任何带有"INT"的东西都具有整数亲和力. 并且,如上所述,所有整数都是64位的符号,但通常不会以这种方式存储.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有