tinyint还是varchar(1)?

8

我有一些表中的字段只能包含0到9的值,而其他字段则可以包含0或1

根据您的经验,使用TINYINT还是VARCHAR(1)更好呢?

考虑到内存使用、识别速度等方面...


1
无符号的tinyint可能是什么? - Jon Black
3个回答

11

这取决于你将如何使用这些值:作为字符串或数字。如果你将它们用作数字,TINYINT(1) 明显更好,因为 MySQL 不需要进行不必要的转换。对于一个字符的字符串,可以使用 CHAR(1)


是的,它们将只是整数。所以用Tinyint吧 ;) - markzzz
在MySQL之外,所有的东西都会被视为字符串,对吗?这只适用于像“ORDER BY”等MySQL操作,对吗? - oldboy

3

这并不是非常重要,但我会选择使用CHAR(1)而不是varchar。

如果您将该值用作数字,例如要进行加法或减法运算,请使用TinyInt。

否则,请试着预测一下。是否有可能会有新的值出现?那么范围是多少?


不,它们是由 PHP 脚本过滤的,并且只能是数字。Tinyint 是 1 字节,而且并不是很高 :) 我考虑过像 BOOLEAN 这样的东西来存储 1 或 0 的字段,但我认为没有这样的东西 :) - markzzz

1
如果您可以使用 TINYINT(1),最好使用它,因为每行使用 VARCHAR(1) 占用的空间是它的两倍;TINYINT(1) 每行只使用 1 字节,而 VARCHAR(1) 则使用一个字节表示长度,再使用另一个字节表示实际数据。这会使查询时使用的数据量翻倍,并且还会影响相关索引等内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接