我有个人资料数据库,我选择了一列int(10)来存储电话号码。因此,当我输入10位数的电话号码时,它会返回警告#1264,表示该值超出范围。
我增加了int(250),但我仍然得到同样的错误。为什么?!
由于
答案 0 :(得分:3)
您将手机存储为整数,具有上限。 32位有符号整数的最大值为2147483647,因此如果您的电话号码大于此值,则会出现超出范围的警告。我建议将您的字段更改为大小为10的VARCHAR,因为整数不是表示电话号码的良好字段类型。
答案 1 :(得分:1)
int字段的最大值是2147483647.将其设置为BIGINT,或者如果需要更大的值,则使用VARCHAR字段。无论如何,对电话号码使用文本字段(varchar)是很常见的。
请参阅:http://dev.mysql.com/doc/refman/5.0/en/integer-types.html
答案 2 :(得分:0)
I increased the int(250) …
不,您没有:对于所有整数类型,该值不会增加字段大小-如果字段还带有ZEROFILL
标志,则只会增加显示宽度。
CREATE TABLE `ints` (
`tinyint1` tinyint(1) unsigned zerofill DEFAULT NULL,
`tinyint4` tinyint(4) unsigned zerofill DEFAULT NULL,
`int11` int(11) unsigned zerofill DEFAULT NULL,
`bigint30` bigint(30) unsigned zerofill DEFAULT NULL
);
INSERT INTO ints VALUES (1, 1, 1, 1);
INSERT INTO ints VALUES (5, 5, 5, 5);
INSERT INTO ints VALUES (10, 10, 10, 10);
INSERT INTO ints VALUES (100, 100, 100, 100);
INSERT INTO ints VALUES (10212072467628961, 10212072467628961, 10212072467628961, 10212072467628961);
ERROR 1264 (22003): Out of range value for column 'tinyint1' at row 1
INSERT INTO ints VALUES (0, 0, 0, 10212072467628961);
SELECT * FROM ints;
+----------+----------+-------------+--------------------------------+
| tinyint1 | tinyint4 | int11 | bigint30 |
+----------+----------+-------------+--------------------------------+
| 1 | 0001 | 00000000001 | 000000000000000000000000000001 |
| 5 | 0005 | 00000000005 | 000000000000000000000000000005 |
| 10 | 0010 | 00000000010 | 000000000000000000000000000010 |
| 100 | 0100 | 00000000100 | 000000000000000000000000000100 |
| 0 | 0000 | 00000000000 | 000000000000010212072467628961 |
+----------+----------+-------------+--------------------------------+
5 rows in set (0.01 sec)
正如其他人所建议的那样,您必须使用其他整数类型:
http://dev.mysql.com/doc/refman/5.0/en/integer-types.html
“增加”有效范围的唯一方法是使用UNSIGNED
标志并忽略所有负值-但从技术上讲,这是范围的平移,而不是增加。从技术上讲。