13

次のクエリ:

INSERT INTO skill (`emp_number`, `skill_id`, `year_exp`, `comments`)
VALUES ('4', '3', '23.45', '')

エラーが発生しています:

1 row inserted.
Warning: #1264 Out of range value for column 'year_exp' at row 1
year_exp column is of datatype decimal(2,2)

エラーを特定するのを手伝ってください。

4

2 に答える 2

17

year_expフィールドがであるため、このエラーが発生しているDECIMAL(2,2)と思いDECIMAL(4,2)ます。DECIMAL(2,2)小数点以下2桁までの精度2の数値を意味します。ただし、この数値の精度は4桁です。

このMSDNへのリンクでは、小数の精度について説明しています。

http://msdn.microsoft.com/en-US/library/ms187746(v=SQL.90).aspx

これが同様の結果の簡単なテストです(SQL Server 2008で実行されましたが、MySQLを使用していると思います...)

1)テスト列を含むテーブルを作成しました。

CREATE TABLE testtable (testcolumn DECIMAL(2,2))

2)挿入ステートメントを実行しました...:

INSERT INTO testtable (testcolumn) VALUES (23.45)

...そしてこのエラーを受け取りました...

メッセージ8115、レベル16、状態8、行1
数値をデータ型数値に変換する算術オーバーフローエラー。

(コメント:私のお気に入りのエラーの1つ...「数値を数値に変換できません...」ハハ)

3)カラムを適切な仕様に変更

ALTER TABLE testtable ALTER COLUMN testcolumn DECIMAL(4,2)

4)同じ挿入ステートメントを再実行しました。できます。

これが役に立ったら教えてください。

于 2013-01-08T14:18:12.870 に答える
10

フィールドタイプをに変更しdecimal(4,2)ます。詳細:https ://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html

DECIMAL列の宣言構文はDECIMAL(M、D)です。MySQL5.7の引数の値の範囲は次のとおりです。

Mは最大桁数(精度)です。範囲は1〜65です。

Dは小数点(目盛り)の右側の桁数です。範囲は0〜30で、M以下である必要があります。

于 2013-01-08T14:14:22.040 に答える