MySQLでは、10桁の10桁のフィールドが設定されています。ただし、新しい値を入力すると、0.9999999999が表示されます。コンマの後に10桁の精度で任意の数値を受け入れるためには、何を変更する必要がありますか?何らかの理由で10,6で動作します。MYSQL:カンマの後に10桁の精度を持つDECIMAL
PS:換算レートを挿入したいと思います。
MySQLでは、10桁の10桁のフィールドが設定されています。ただし、新しい値を入力すると、0.9999999999が表示されます。コンマの後に10桁の精度で任意の数値を受け入れるためには、何を変更する必要がありますか?何らかの理由で10,6で動作します。MYSQL:カンマの後に10桁の精度を持つDECIMAL
PS:換算レートを挿入したいと思います。
最初の数字は保存する桁数の合計、2番目の数字は小数部の桁数です。だからDECIMAL (10, 10)
は小数点以下10桁までです。 DECIMAL (20, 10)
のようなものを使用して、整数部分と小数部分の両方で10桁を許可することができます。
あなたの説明をお寄せいただきありがとうございます。私はいつも最初の部分が前の桁数であり、2番目の部分がコンマの後の部分であると考えました。 –
DECIMAL(10,10)は小数点の前に小数点以下の桁がないことを意味します。常にx < 1
になるように制限しています。
これはDECIMAL(total number of digits, digits after the decimal)
です。 10,10
では、「10桁の10進数」と表示され、小数点の前には10-10 = 0
が残ります。これは、1を格納することができないことを意味し、0.9999999999はフィールド定義内で適合する最も近い値です。
@ 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
あなたが入力した「新しい価値」でしたか? –