我有一些表中的字段只能包含0到9
的值,而其他字段则可以包含0或1
。
根据您的经验,使用TINYINT
还是VARCHAR(1)
更好呢?
考虑到内存使用、识别速度等方面...
这取决于你将如何使用这些值:作为字符串或数字。如果你将它们用作数字,TINYINT(1)
明显更好,因为 MySQL 不需要进行不必要的转换。对于一个字符的字符串,可以使用 CHAR(1)
。
这并不是非常重要,但我会选择使用CHAR(1)
而不是varchar。
如果您将该值用作数字,例如要进行加法或减法运算,请使用TinyInt。
否则,请试着预测一下。是否有可能会有新的值出现?那么范围是多少?
TINYINT(1)
,最好使用它,因为每行使用 VARCHAR(1)
占用的空间是它的两倍;TINYINT(1)
每行只使用 1 字节,而 VARCHAR(1)
则使用一个字节表示长度,再使用另一个字节表示实际数据。这会使查询时使用的数据量翻倍,并且还会影响相关索引等内容。