正如我SET
在MySQL的表中这样显示cust_fax:
cust_fax integer(10) NOT NULL,
然后我插入这样的值:
INSERT INTO database values ('3172978990');
但是然后说
“错误1264”列的值不足
我想知道错误在哪里?我的套装?或其他?
任何答案将不胜感激!
正如我SET
在MySQL的表中这样显示cust_fax:
cust_fax integer(10) NOT NULL,
然后我插入这样的值:
INSERT INTO database values ('3172978990');
但是然后说
“错误1264”列的值不足
我想知道错误在哪里?我的套装?或其他?
任何答案将不胜感激!
'3172978990'
是一个字符串,3172978990
是一个数字。顺便说一句。将10
在int(10)
不没有定义任何数据类型约束。它只是一个客户端显示提示。
Answers:
AUTO_INCREMENT
为什么在具有较少行数的表中变得很大而导致的。所以我需要ALTER TABLE table_name AUTO_INCREMENT=103;
(如果目前有102行)。
int
电话号码,因为我通过删除所有非数字来清理用户输入。
int
电话号码。如果有人输入国际格式为0044 ....,您将丢失00。将代码中的电话号码清理掉,然后再发送给查询。
VARCHAR
是的。我在美国从事开发工作,我做的大部分工作都在我的家乡本地,但从第一天起,我仍然应该牢记可访问性进行编码。
您也可以将数据类型更改为bigInt,这将解决您的问题,除非需要,否则将整数保留为字符串不是一个好习惯。:)
ALTER TABLE T_PERSON MODIFY mobile_no BIGINT;
VARCHAR
您超出了int数据类型的长度。您可以使用UNSIGNED属性来支持该值。
SIGNED INT可以支持到2147483647,而UNSIGNED INT则可以支持两倍于此。之后,您仍然要保存数据,而不是使用长度为10的CHAR或VARCHAR
确保您AUTO_INCREMENT
没有超出范围。在这种情况下,请使用以下命令为其设置一个新值:
ALTER TABLE table_name AUTO_INCREMENT=100 -- Change 100 to the desired number
AUTO_INCREMENT
可以包含一个大于数据类型允许的最大值的数字。如果您填写了随后清空的表,但AUTO_INCREMENT
保持不变,则可能会发生这种情况,但是可能还有不同的原因。在这种情况下,新条目的ID将超出范围。
如果这是导致问题的原因,则可以通过将其设置AUTO_INCREMENT
为比最新行的ID大一个来解决此问题。因此,如果最新行的ID为100,则:
ALTER TABLE table_name AUTO_INCREMENT=101
如果您想检查AUTO_INCREMENT
的当前值,请使用以下命令:
SELECT `AUTO_INCREMENT`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND TABLE_NAME = 'TableName';
使用:
ALTER TABLE `table` CHANGE `cust_fax` `cust_fax` VARCHAR(60) NULL DEFAULT NULL;