我想在 mySQL中存储00
, 01
, 02
,03
等数字。04
哪种数据类型最适合这个?
用于int
存储号码。
不要将值与渲染混淆:如果您希望数字与前导零一起显示,请在数据和用户眼睛之间的一层中处理它;不要将渲染与数据一起存储。
进行格式化的层可以是任何东西,从用于选择数据的 SQL 到显示数据的网页中的 javascript,以及介于两者之间的任何东西。
这些看起来像代码而不是数字,这意味着您没有进行算术运算。如果它们是代码,存储它们的最佳方式是 asvarchar(2)
或char(2)
types。
如果您将它们视为数字(即进行任何算术运算),那么您应该将它们存储为整数(小整数)并在输出中附加前导零。
编辑:
区分数字字符串(包含数字的字符串)和实际数字非常重要。有许多此类字符串的示例,您肯定希望将其存储为字符串。想到的四个是电话号码,美国邮政编码,帐号(我银行的帐号以“057”开头,“0”非常非常非常重要)和(大部分)两部分版本号。
这些与实际数字不同,因为您不对它们执行数字操作。也就是说,您永远不会将它们加在一起。或增加它们。或将值增加 10%。您确实对它们进行排序,搜索特定值(甚至值范围),然后加入这些值。这些是字符串操作以及数字操作。
您的问题没有解释代码的真正含义。因此,根据它们代表的字符串或数字可能是合适的。然而,基于“0”的重要性足以提出一个问题,我绝对倾向于字符表示。
更好地使用数字数据类型本身。特别是smallint(2),因为它最适合您的样本。
在这里查看更多关于MySQL 中的数值类型属性的信息。
还可以使用ZEROFILL将 0 附加到您的数据中。请参阅此SO线程。
不久,varchar
.
虽然我不知道你会对这些“数字”做什么,但如果你想在实际数字后面保留那些“0”,你应该把它们当作字符串类型。