我需要一种数据类型来存储此范围:[0 - 9]
。像这样:
+-----+
| col |
+-----+
| 3 |
| 2 |
| 8 |
| 0 |
| 2 |
| 1 |
+-----+
在这种情况下,哪种数据类型最好?
答案 0 :(得分:7)
尽管有文档记录,我还不清楚DECIMAL(1,0)
的大小是否被"四舍五入"至4个字节或者单个数字是否计为"剩余数字",导致整个数据类型的单个字节宽度。
无论如何,你不能使用比TINYINT
更少的空间,因为a TINYINT
is a single byte wide和一个字节是计算机上最小的数据单元(没有进入bitpacking,而且没有#&}# 39;表格数据似乎有道理!)。
因此,在数字类型中,请使用TINYINT
。其他任何东西都是不必要的混淆。
话虽如此,我是ENUM
的粉丝,这对他们来说似乎是一个完美的案例。 Since your enumeration would have fewer than 255 possible values, like a TINYINT
it would only take a single byte.
ENUM('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')
可悲的是,要写出来有点啰嗦。但至少现在你的价值观具有固有的范围限制。
答案 1 :(得分:2)
您可以使用DECIMAL(1,0)
强制它存储单个数字。
请参阅https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html
答案 2 :(得分:-1)
您可以使用int,bigint,smallint和tinyint取决于要求。
https://msdn.microsoft.com/en-us/library/ms187745.aspx
可以将值存储在枚举中并使用相同的类。
@Shafizadeh我是新来的,我提到在所有答案中首先使用枚举,但我的回答显然是消极的。