MySQL Money データ型
このチュートリアルでは、MySQL に金額を格納するのに最適な DECIMAL(P,D)
データ型を紹介します。
MySQL Money データ型
Money の値には、正確な表現が必要です。 たとえば、float
などの近似データ型のみを使用する必要はありません。
通貨データを挿入するには、DECIMAL(P,D)
などの 固定小数点数値データ型 を利用できます。
DECIMAL(P,D)
は、列が最大 P
桁と D
小数を格納できることを示します。 P
と D
は、構文の後に説明されています。
DECIMAL(P,D)
データ型の列を定義できます。
# Syntax
columnName DECIMAL(P,D)
ここで、P
は有効桁数を示す精度を表します。 その範囲は 1
から 65
です。
D
はスケールですが、小数点以下の桁数を表します。 D
の範囲は 0
と 30
です。
DECIMAL(P,D)
を使用する場合、D<=P
という条件を満たす必要があります。 そうしないと、エラーが発生します。 P
と D
が指定されていない場合、DECIMAL
タイプの列の最大桁数は 65 です。
DECIMAL
タイプの列の範囲は、精度 (P
) と位取り (D
) に依存します。 ID
と MONEY
の 2つの属性を持つテーブル demo
を作成し、いくつかのデータを入力して、それを理解しましょう。
次のクエリを使用して、フォローアップすることができます。
コード例:
# create a table
CREATE table demo(
ID INT NOT NULL PRIMARY KEY,
MONEY DECIMAL(12,2) NOT NULL
);
# insert data
INSERT INTO demo VALUES
(1,1254367892.50),
(2,8754367893.60),
(3,9854367895.65),
(4,9224367896.70);
# display data
SELECT * FROM demo;
出力:
+----+---------------+
| ID | MONEY |
+----+---------------+
| 1 | 1254367892.50 |
| 2 | 8754367893.60 |
| 3 | 9854367895.65 |
| 4 | 9224367896.70 |
+----+---------------+
4 rows in set (0.00 sec)
DECIMAL
キーワードの代わりに FIXED
、DEC
、または NUMERIC
キーワードを使用することもできます。これらのキーワードはすべて DECIMAL
の同義語だからです。 次の例をデモンストレーションとして参照してください。
コード例:
# create a table
CREATE table demo1(
ID INT NOT NULL PRIMARY KEY,
MONEY FIXED(12,2) NOT NULL
);
# insert data
INSERT INTO demo1 VALUES
(1,1254367892.50),
(2,8754367893.60),
(3,9854367895.65),
(4,9224367896.70);
# display data
SELECT * FROM demo;
出力:
+----+---------------+
| ID | MONEY |
+----+---------------+
| 1 | 1254367892.50 |
| 2 | 8754367893.60 |
| 3 | 9854367895.65 |
| 4 | 9224367896.70 |
+----+---------------+
4 rows in set (0.00 sec)
INT
と同様に、DECIMAL
データ型の ZEROFILL
および UNSIGNED
属性を使用できます。 UNSIGNED
属性を使用すると、タイプ DECIMAL(P,D) UNSIGNED
のテーブル フィールドは負の値を取ることができません。
たとえば、次のクエリを使用して作成されたテーブルは、MONEY
フィールドの負の値を受け入れません。
コード例:
# create a table
CREATE table demo2(
ID INT NOT NULL PRIMARY KEY,
MONEY DECIMAL(12,2) UNSIGNED NOT NULL
);
ZEROFILL
属性を使用して、MySQL は列定義で指定された幅まで結果値を 0 で埋めます。
ZEROFILL
属性を使用すると、MySQL は自動的に UNSIGNED
を追加することを思い出してください。 DESCRIBE tableName;
を使用して確認できます。 クエリ。
例として次のコードを参照してください。
# create a table
CREATE table demo3(
ID INT NOT NULL PRIMARY KEY,
MONEY DECIMAL(12,2) ZEROFILL NOT NULL
);
# describe a table
DESCRIBE demo3;
出力:
+-------+---------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------------------+------+-----+---------+-------+
| ID | int | NO | PRI | NULL | |
| MONEY | decimal(12,2) unsigned zerofill | NO | | NULL | |
+-------+---------------------------------+------+-----+---------+-------+
2 rows in set (0.26 sec)
DECIMAL(P)
は DECIMAL(P,0)
と同等であり、DECIMAL
は DECIMAL(P,0)
と同等であることを常に覚えておいてください。 DECIMAL(P,0)
を使うことで小数部(小数部)が出なくなります。
DECIMAL(P)
と DECIMAL(P,0)
の実装により、P
の値を決定できます。 デフォルトの実装 DECIMAL
を使用する場合、P
のデフォルト値は 10 です。
詳しくはこちらをご確認ください。