我在某些表中有一些字段,这些字段只能包含0 to 9
中的值,而另一些字段可以包含0 or 1
。
根据您的经验,最好将其与TINYINT
或VARCHAR(1)
一起存储吗?
作为内存使用量,加快识别它们的速度,依此类推...
取决于您将如何使用值:作为字符串还是数字。如果要将它们用作数字,则TINYINT(1)
绝对更好,因为mysql不需要进行不必要的转换。对于1个字符的字符串,可以使用CHAR(1)
。
尽管我会选择CHAR(1)
而不是varchar,但这并不重要。
如果将值用作数字,即要添加或减去它们,请使用TinyInt。
否则,请尝试向前看。有机会出现新的价值吗?那范围是多少?
如果可以使用TINYINT(1)
,则最好使用它,因为VARCHAR(1)
每行占用的空间量是原来的两倍; TINYINT(1)
每行仅使用1个字节,而VARCHAR(1)
使用1个字节作为长度,然后使用另一个字节作为实际数据。这会使查询中使用的数据量以及所有关联的索引等增加一倍。