mysql中10位手机无数据是什么问题?
我制作了一个表来存储我网站用户的联系记录。它还包含一个 10 位数字的手机号码。
表结构是这样的:
CREATE TABLE contact_user
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
contact INT(10)
)
现在的问题是,如果我使用 phpmyadmin 在联系人字段中插入 10 个手机号码(例如9595891256),它将插入一些随机值并显示警告“数据超出列范围”
但是如果我插入简单的 10 位数字编号(例如 4561327894),则它可以正常工作并且不会显示任何警告。
所以请告诉我在此栏中插入手机号码有什么问题?
我在 ubuntu 11.04 上使用 mysql 5.1,还使用 phpmyadmin。
I made a table for storing contact record of user of my website. It also contains a 10 digit mobile no.
Table structure is like this:
CREATE TABLE contact_user
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
contact INT(10)
)
Now the problem is that if I insert a 10 mobile no.(e.g.9595891256) using phpmyadmin into contact field it will insert some random value and shows a warning saying "data out of column range"
But if I insert a simple 10 digit no (e.g.4561327894) then it works well and no warning is shown.
SO please tell me what is the issue in inserting a mobile no in this column?
I am using mysql 5.1 on ubuntu 11.04 and also using phpmyadmin.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
INT(10)并不是指10位数字,而是指显示宽度为10位的整数。无论您放置 INT(2) 还是 INT(10),MySQL 仍然只存储一个(在本例中为无符号)INT,其最大值为 4294967295。
您可以使用 BIGINT 而不是 INT 将其存储为数字。但是,我不建议这样做,因为它不允许国际号码。如果您确定您的应用程序将只使用美国数字,那么使用 BIGINT 将比 VARCHAR(10) 每行节省 3 个字节——如果您担心这种情况。
由于它是一个电话号码(因此您不会对其进行数值计算),请尝试使用 VARCHAR(20)。这使您能够在需要时正确存储国际电话号码。
INT(10) does not mean a 10-digit number, it means an integer with a display width of 10 digits. Whether you put INT(2) or INT(10), MySQL still only stores an (unsigned, in this case) INT which has a maximum value of 4294967295.
You can use a BIGINT instead of INT to store it as a numeric. I wouldn't recommend this, however, because it won't allow for international numbers. If you are certain your application will only use US numbers, using BIGINT will save you 3 bytes per row over VARCHAR(10) -- if that sort of thing concerns you.
Since it is a phone number (and therefore you won't be doing numeric calculations against it), try using a VARCHAR(20). This allows you the ability to store international phone numbers properly, should that need arise.
根据 MySQL 文档。如果您的值超过此限制,您的整数将溢出,因此不是随机值。
此外,INT 并不是存储电话号码的最佳解决方案。如果它们是一个或多个,您可能会丢失前导零。此外,国际电话号码以
+
符号开头。考虑使用 VARCHAR。这最终将使用数据库中的更多空间,但会提供更高的一致性。The maximum value for an INT in MySQL is 2147483647 (or 4294967295 if unsigned), according to the MySQL documentation. If your value exceeds this limit, you integer will overflow, hence the not-that-random value.
Also, INT is not the best solution to store phone numbers. You might lose leading zeros if they are one or more. Also, international phone numbers start with a
+
sign. Consider using a VARCHAR. This will end up using more space in the database, but will provide more consistency.这是因为 INT 类型的最大大小,您需要使用不同的类型来保存这么大的数字。尝试使用 BIGINT。
It is because of the max size of type INT you need to use a different type to hold a number that large. Try using BIGINT.