日期:2014-05-16  浏览次数:20438 次

手机字段存储报错 :Warning Code : 1264 Out of range value for column 'buyer_tpl' at row 1

企鹅上朋友问我: 我这明明是11位的int 为啥还说超出范围了呢,然后发来报警截图





我看到是 buyer_tpl int(13)  unsigned NOT NULL,就知道是怎么回事了,打开dev.mysql.com/doc,找到int的章节,截图发给他




手机号码作为数字的话,已经超过了unsigned的峰值4294967296了,给他2个建议

1  将int类型换成bigint

2 将int类型换成varchar(11)的。


他问我 :“ bigint  和 varchar 存数字哪个好? 就11位手机这种。“

我说:“一般用int主要是考虑运算计算以及状态值之类的,很少把包含具体业务意义的字段设置成int,时间戳这种,一般用datetime的,也可以设置成bigint,因为时间戳有涉及到计算的,手机字段一般用varchar居多的。”