sqlite中varchars的表示

sqlite中varchars的表示,sql,database,sqlite,enums,varchar,Sql,Database,Sqlite,Enums,Varchar,我有一个相当大的sqlite数据库,其中一列是varchar,但只接受几个值(基本上是enum)。由于数据库文件已经有几GB并且还在增长,我开始重构该列,以保存另一个表中的ID(基本上是外键),其中包含了几个varchar 我突然想到,也许这种努力是徒劳的;也许sqlite能够智能地处理这种情况,而不是天真地将每个varchar与其他所有varchar一起存储 因此,问题是sqlite如何处理列中重复的varchar值的表示,以及从varchar到ids的转换是否会减少db文件的大小?在中,足够

我有一个相当大的sqlite数据库,其中一列是varchar,但只接受几个值(基本上是enum)。由于数据库文件已经有几GB并且还在增长,我开始重构该列,以保存另一个表中的ID(基本上是外键),其中包含了几个varchar

我突然想到,也许这种努力是徒劳的;也许sqlite能够智能地处理这种情况,而不是天真地将每个varchar与其他所有varchar一起存储

因此,问题是sqlite如何处理列中重复的varchar值的表示,以及从varchar到ids的转换是否会减少db文件的大小?

在中,足够小的数字可以存储在一个字节中。 字符串值不会以任何方式压缩;对于非ASCII字符,五个字符的字符串将始终占用五个字节或更多


如果您的varchar值都是单个ASCII字符,那么用数字替换它们不会增加占用的空间。如果它们更大,它会缩小数据库。

使用ID会缩小数据库吗?可能但唯一真正能找到答案的方法是测试它并找出答案。