Mysql 定义“一个”是否更好;年份“;列的类型是整数还是字符串?
我确实意识到,如果必须对一列进行数学计算,那么它最好是一个整数 我可能需要对“年份”栏进行数学计算,但计算量最少。那么,将其存储为字符串或整数会更好吗Mysql 定义“一个”是否更好;年份“;列的类型是整数还是字符串?,mysql,database,database-design,Mysql,Database,Database Design,我确实意识到,如果必须对一列进行数学计算,那么它最好是一个整数 我可能需要对“年份”栏进行数学计算,但计算量最少。那么,将其存储为字符串或整数会更好吗 谢谢。如果您不希望年份变量包含非数字值,那么您应该将其存储为数字 我不会将其存储为INT,因为我怀疑年份是否会达到INT必须提供的限制。我会将它另存为SMALLINT或甚至TINYINT,两者都应该是unsigned SMALLINT UNSIGNED为您提供了65535的最大值,除非您存储的年份超过了年份65535,这就足够了。将其保存为整数
谢谢。如果您不希望
年份
变量包含非数字值,那么您应该将其存储为数字
我不会将其存储为INT
,因为我怀疑年份是否会达到INT
必须提供的限制。我会将它另存为SMALLINT
或甚至TINYINT
,两者都应该是unsigned
SMALLINT UNSIGNED
为您提供了65535
的最大值,除非您存储的年份超过了年份65535
,这就足够了。将其保存为整数
虽然在某些应用程序中,您可能会频繁地读取和提供这些数据,以至于int->string转换是一个问题。。。这将是一个边缘案例
在另一边
- 在数据存储中,整数提供的选项比字符串小(如TINYINT)
- 由于数学原因,避免转换
- 当开发人员查询一个自然是数字的数据类型并得到一个字符串时,这会让他们感到困惑/烦恼/沮丧
CHAR(4)
而不是INT
;MySQLDATETIME
比较是以类似字符串的方式完成的
你可以这样做
WHERE year < CURDATE()
其中年份
那就不用担心了。这是一个整数。你为什么不想把它保存为一个呢?有疑问时:按实际类型保存。@Nanne-好建议。@Nanne,它实际上是一个虽然,不是吗。@Nanne但人们并不真的认为年份是整数,这有点像思考电话号码。我认为电话号码是字符串。我理解的整数是“价格”或“金额”等。。还是我错了?谢谢。请始终以最严格的类型存储数据。
YEAR
数据类型是为表示“YEAR”值而定制的。一个问题是如何在客户端库(例如Perl DBI、MySQL JDBC connector等)中处理/表示/转换YEAR
数据类型。为了澄清这一点,MySQL在内部不将日期时间存储为字符串。DATETIME占用8字节的存储空间,尽管这可能在最近的版本(>5.5)中有所改变。@spencer7593我想它在查询时会以字符串的形式输出,就像DATETIME一样,并且早在文档中就存在了;我相当肯定客户端库会处理它。但是,关于日期时间存储,您是完全正确的。。我已经更新了答案。CHAR(4)允许像193
这样的值。嗯,这并不是对整数数据类型的改进。