数値には、10進数と16進数の2種類があります。
10進数
10進数は、正確な数値(整数と固定小数点数)と浮動小数点数に分けられます。数値は小数点 . を10進数の区切りとして使用でき、また前にマイナス記号 - を付けることで負の値を表すこともできます。
DECIMAL データ型は固定小数点型であり、正確な計算を行います。FLOAT および DOUBLE データ型は浮動小数点型であり、近似計算を行います。
説明
DECIMAL タイプはサイズ変更をサポートします(例えば DECIMAL(10, 2) を DECIMAL(9, 2) に変更する)。
正確な数値には整数部または小数部、あるいはその両方が含まれます。例:1、.2、3.4、-5、-6.78、+9.10。
近似値は科学的記数法で表され、仮数部と指数部を持ちます。例:1.2E3、1.2E-3、-1.2E3、-1.2E-3。
見た目が似ている2つの数値は、異なる扱いを受ける場合があります。例えば、2.34 は正確な(固定小数点)数値であり、2.34E0 は近似値(浮動小数点)数値です。
16進数
16進数は整数のみをサポートし、接頭辞として X または 0x を使用します。接頭辞の後には A から F までのアルファベットを付けることができ、すべての文字は大文字と小文字を区別しません。
以下は有効な16進数です:
X'01AF'
X'01af'
x'01AF'
x'01af'
0x01AF
0x01af
以下は無効な16進数です:
X'0H'(H は16進数ではありません)
接頭辞 X を使用した値は偶数桁でなければなりません。そうでない場合、構文エラーが発生します。この問題を回避するには、値を 0 で埋めてください。例:X'0FFF'。
接頭辞 0x を使用した値が奇数桁の場合、余分な先頭の 0 と見なされます。例えば、0xaaF は 0x0aaF と解釈されます。
デフォルトでは、16進数はバイナリ文字列であり、各16進数のペアが1文字を表します。
obclient> SELECT 0x5461626c65, CHARSET(0x5461626c65);
+--------------+-----------------------+
| 0x5461626c65 | CHARSET(0x5461626c65) |
+--------------+-----------------------+
| Table | binary |
+--------------+-----------------------+
1 row in set
空の16進数値 (X' ') は、長さがゼロのバイナリ文字列として計算されます。数値に変換して出力すると 0 になります:
obclient> SELECT X''+0;
+-------+
| X''+0 |
+-------+
| 0 |
+-------+
1 row in set
文字列または数値を16進数形式の文字列に変換するには、HEX() 関数を使用します。
obclient> SELECT HEX('dog');
+------------+
| HEX('dog') |
+------------+
| 646F67 |
+------------+
1 row in set
obclient> SELECT X'646F67';
+-----------+
| X'646F67' |
+-----------+
| dog |
+-----------+
1 row in set