我有一个bigint
字段,例如在输入'05555555555'
这样的数字时,0被删除,只插入'5555555555'
。
我应该使用哪种数据类型来阻止这种情况?
答案 0 :(得分:4)
你做不到。整数列(bigint)不存储前导零(即以可视化表示形式)
不是尝试存储前导零(通过使用varchar字段),而是使用视图(或其他)将整数格式化为您需要的格式的字符串。
如果您需要在域模型中存储实际上是字符串的内容(例如电话号码),请使用字符串而不是整数类型字段。
答案 1 :(得分:2)
BIGINT
和其他整数列不存储数字的可视表示形式,只有二进制形式的数字本身(BIGINT
为8字节)。 5555555555存储为:
00000000 00000000 00000000 00000001 01001011 00100011 00001100 11100011
如果前面的零对数据的完整性很重要,那么您应该使用VARCHAR
或CHAR
而不是整数类型。数值数据类型只应用于数值数据。美国邮政编码和电话号码不是数字数据。
答案 2 :(得分:1)
bigint
将数据存储为数字,05555555555
和5555555555
的数字相同。您需要一个字符串类型来保留前导零,例如varchar
具有合适的最大长度。
答案 3 :(得分:-2)
问题是,如果你有一个拥有数十万行的大数据库,那么bigint比VARHAR字段要快得多。我在产品数据库中遇到了类似的问题,其中包含欧洲商品编号(EAN)。其中一些代码以前导0开头当我将其更改为VARCHAR时,加载某些搜索EAN代码的页面需要8秒钟,当我更改时它到BIGINT它变成2秒。 速度差异确实很大。
答案 4 :(得分:-3)
您可能会考虑更改字段以使用UNSIGNED ZEROFILL。这应该允许您存储带前导零的数字。