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 です。
詳しくはこちらをご確認ください。
