Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 定义“一个”是否更好;年份“;列的类型是整数还是字符串?_Mysql_Database_Database Design - Fatal编程技术网

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)
  • 由于数学原因,避免转换
  • 当开发人员查询一个自然是数字的数据类型并得到一个字符串时,这会让他们感到困惑/烦恼/沮丧

你可能会发疯,并将其保存为一个文件

这将您限制在1901-2155

如果限制太多,我更喜欢
CHAR(4)
而不是
INT
;MySQL
DATETIME
比较是以类似字符串的方式完成的

你可以这样做

WHERE year < CURDATE()
其中年份

那就不用担心了。

这是一个整数。你为什么不想把它保存为一个呢?有疑问时:按实际类型保存。@Nanne-好建议。@Nanne,它实际上是一个虽然,不是吗。@Nanne但人们并不真的认为年份是整数,这有点像思考电话号码。我认为电话号码是字符串。我理解的整数是“价格”或“金额”等。。还是我错了?谢谢。请始终以最严格的类型存储数据。
YEAR
数据类型是为表示“YEAR”值而定制的。一个问题是如何在客户端库(例如Perl DBI、MySQL JDBC connector等)中处理/表示/转换
YEAR
数据类型。为了澄清这一点,MySQL在内部不将日期时间存储为字符串。DATETIME占用8字节的存储空间,尽管这可能在最近的版本(>5.5)中有所改变。@spencer7593我想它在查询时会以字符串的形式输出,就像DATETIME一样,并且早在文档中就存在了;我相当肯定客户端库会处理它。但是,关于日期时间存储,您是完全正确的。。我已经更新了答案。CHAR(4)允许像
193
这样的值。嗯,这并不是对整数数据类型的改进。