web-dev-qa-db-ja.com

MySQLエラー1264:列の範囲外の値

次のようなMySQLのテーブルでSET cust_faxとして:

cust_fax integer(10) NOT NULL,

そして、私はこのような値を挿入します:

INSERT INTO database values ('3172978990');

しかし、それは言う

列の値が「エラー1264」です

そして、私はエラーがどこにあるのか知りたいですか?私のセット?または他の?

どんな答えでも大歓迎です!

57
Cin

3172978990の値は2147483647(INTの最大値)より大きいため、エラーです。 MySQL整数型とその範囲は ここにリストされています です。

また、INT(10)(10)は整数の「サイズ」を定義しないことに注意してください。列の 表示幅 を指定します。この情報は助言のみです。

エラーを修正するには、データ型をVARCHARに変更します。電話番号とFAX番号は文字列として保存する必要があります。 この説明 を参照してください。

82
Salman A

データ型をbigIntに変更することもできます。これにより問題が解決します。必要でない限り、整数を文字列として保持することはお勧めできません。 :)

ALTER TABLE T_PERSON MODIFY mobile_no BIGINT;
19
Rohit Kolhekar

intデータ型の長さを超えています。 UNSIGNED属性を使用して、その値をサポートできます。

SIGNED INT2147483647までをサポートでき、NSIGNED INTではこれより2倍を許可します。この後も、長さ10でCHARまたはVARCHARを使用するよりもデータを保存したい

12
Saharsh Shah

tl; dr

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';
3
totymedli