【MySQL】数値型:decimal,dec,numeric,fixed
数値型(固定小数点数)の一覧
型名 | 有効桁数 | 小数点以下桁数 | 補足 |
decimal | 最大65 | 最大30 | |
dec | 最大65 | 最大30 | decimalの別名 |
numeric | 最大65 | 最大30 | decimalの別名 |
fixed | 最大65 | 最大30 | decimalの別名 |
有効桁数と小数点以下桁数の指定
decimal型では、有効桁数と小数点以下桁数に任意の値を指定することが出来ます。
有効桁数と小数点以下桁数の指定方法は次の通りです。
decimal(有効桁数,小数点以下桁数)
dec(有効桁数,小数点以下桁数)
numeric(有効桁数,小数点以下桁数)
fixed(有効桁数,小数点以下桁数)
次のSQLでは、decimal,dec,numeric,fixedで有効桁数と小数点以下桁数を指定してみました。
mysql> CREATE TABLE tab(col1 varChar(10),col2 decimal,col3 decimal(65,30),col4 dec,col5 dec(65,30),col6 numeric,col7 numeric(65,30),col8 fixed,col9 fixed(65,30));
Query OK, 0 rows affected (0.05 sec)
mysql> SHOW COLUMNS FROM tab;
+-------+----------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------------+------+-----+---------+-------+
| col1 | varchar(10) | YES | | NULL | |
| col2 | decimal(10,0) | YES | | NULL | |
| col3 | decimal(65,30) | YES | | NULL | |
| col4 | decimal(10,0) | YES | | NULL | |
| col5 | decimal(65,30) | YES | | NULL | |
| col6 | decimal(10,0) | YES | | NULL | |
| col7 | decimal(65,30) | YES | | NULL | |
| col8 | decimal(10,0) | YES | | NULL | |
| col9 | decimal(65,30) | YES | | NULL | |
+-------+----------------+------+-----+---------+-------+
9 rows in set (0.02 sec)
UNSIGNEDオプション
データ型を宣言するとき、UNSIGNEDオプションを指定することで、符号なしの範囲で値を扱うことが出来ます。
次のSQLでは、COL3列にUNSIGNEDオプションを指定します。
mysql> CREATE TABLE tab(col1 varChar(10),col2 decimal,col3 decimal unsigned);
Query OK, 0 rows affected (0.04 sec)
mysql> SHOW COLUMNS FROM tab;
+-------+------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------------+------+-----+---------+-------+
| col1 | varchar(10) | YES | | NULL | |
| col2 | decimal(10,0) | YES | | NULL | |
| col3 | decimal(10,0) unsigned | YES | | NULL | |
+-------+------------------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
ZEROFILLオプション
データ型を宣言するとき、ZEROFIILLオプションを指定することで、桁数を0埋めすることが出来ます。
次のSQLでは、COL3列にZEROFILLオプションを指定しています。
mysql> CREATE TABLE tab(col1 varChar(10),col2 decimal,col3 decimal zerofill);
Query OK, 0 rows affected (0.04 sec)
mysql> INSERT INTO tab VALUES('00001',1,1);
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM tab;
+-------+------+------------+
| col1 | col2 | col3 |
+-------+------+------------+
| 00001 | 1 | 0000000001 |
+-------+------+------------+
1 row in set (0.00 sec)