2011-06-29 16 views
9

MySQLでは、10桁の10桁のフィールドが設定されています。ただし、新しい値を入力すると、0.9999999999が表示されます。コンマの後に10桁の精度で任意の数値を受け入れるためには、何を変更する必要がありますか?何らかの理由で10,6で動作します。MYSQL:カンマの後に10桁の精度を持つDECIMAL

PS:換算レートを挿入したいと思います。

+0

あなたが入力した「新しい価値」でしたか? –

答えて

24

最初の数字は保存する桁数の合計、2番目の数字は小数部の桁数です。だからDECIMAL (10, 10)は小数点以下10桁までです。 DECIMAL (20, 10)のようなものを使用して、整数部分と小数部分の両方で10桁を許可することができます。

+2

あなたの説明をお寄せいただきありがとうございます。私はいつも最初の部分が前の桁数であり、2番目の部分がコンマの後の部分であると考えました。 –

10

DECIMAL(10,10)は小数点の前に小数点以下の桁がないことを意味します。常にx < 1になるように制限しています。

これはDECIMAL(total number of digits, digits after the decimal)です。 10,10では、「10桁の10進数」と表示され、小数点の前には10-10 = 0が残ります。これは、1を格納することができないことを意味し、0.9999999999はフィールド定義内で適合する最も近い値です。

6

@ Xint0からの回答は正しいです。精度と位取りを同じ桁数に設定したため、1.0未満の値しか挿入できません。

もう1つのことは、カラムのデータ型に適合しない場合、値を切り捨てるMySQLのデフォルト動作です。

mysql> CREATE TABLE foo (dec DECIMAL(10,10)); 
mysql> INSERT INTO foo VALUES (1.0); 
Query OK, 1 row affected, 1 warning (0.00 sec) 

注意これは警告を生成します。

mysql> SHOW WARNINGS; 
+---------+------+----------------------------------------------+ 
| Level | Code | Message          | 
+---------+------+----------------------------------------------+ 
| Warning | 1264 | Out of range value for column 'dec' at row 1 | 
+---------+------+----------------------------------------------+ 

mysql> SELECT * FROM foo; 
+--------------+ 
| dec   | 
+--------------+ 
| 0.9999999999 | 
+--------------+ 

あなたは、厳密なSQLモードとエラーに警告を回すことができます。

mysql> SET SQL_MODE = STRICT_ALL_TABLES; 
mysql> INSERT INTO foo VALUES (1.0); 
ERROR 1264 (22003): Out of range value for column 'dec' at row 1 
関連する問題