MySQL从整数列中剥离前导零

时间:2011-01-29 04:00:44

标签: mysql

我有一个bigint字段,例如在输入'05555555555'这样的数字时,0被删除,只插入'5555555555'

我应该使用哪种数据类型来阻止这种情况?

5 个答案:

答案 0 :(得分:4)

你做不到。整数列(bigint)不存储前导零(即以可视化表示形式)

不是尝试存储前导零(通过使用varchar字段),而是使用视图(或其他)将整数格式化为您需要的格式的字符串。

如果您需要在域模型中存储实际上是字符串的内容(例如电话号码),请使用字符串而不是整数类型字段。

答案 1 :(得分:2)

BIGINT和其他整数列不存储数字的可视表示形式,只有二进制形式的数字本身(BIGINT为8字节)。 5555555555存储为:

  

00000000 00000000 00000000 00000001 01001011 00100011 00001100 11100011

如果前面的零对数据的完整性很重要,那么您应该使用VARCHARCHAR而不是整数类型。数值数据类型只应用于数值数据。美国邮政编码和电话号码不是数字数据。

答案 2 :(得分:1)

bigint将数据存储为数字,055555555555555555555的数字相同。您需要一个字符串类型来保留前导零,例如varchar具有合适的最大长度。

答案 3 :(得分:-2)

问题是,如果你有一个拥有数十万行的大数据库,那么bigint比VARHAR字段要快得多。我在产品数据库中遇到了类似的问题,其中包含欧洲商品编号(EAN)。其中一些代码以前导0开头当我将其更改为VARCHAR时,加载某些搜索EAN代码的页面需要8秒钟,当我更改时它到BIGINT它变成2秒。 速度差异确实很大。

答案 4 :(得分:-3)

您可能会考虑更改字段以使用UNSIGNED ZEROFILL。这应该允许您存储带前导零的数字。