MySQL警告#1264超出范围

时间:2013-06-15 02:26:30

标签: mysql

我有个人资料数据库,我选择了一列int(10)来存储电话号码。因此,当我输入10位数的电话号码时,它会返回警告#1264,表示该值超出范围。

我增加了int(250),但我仍然得到同样的错误。为什么?!

由于

3 个答案:

答案 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标志并忽略所有负值-但从技术上讲,这是范围的平移,而不是增加。从技术上讲。