跳到主要内容

数值

数值分为十进制和十六进制两种。

十进制数值

十进制数值可以分为精确数值(整数和定点数值)和浮点数值。数值可以使用小数点 . 作为十进制分隔符,也可以在前面加一个负号 - 来表示负值。

DECIMAL 数据类型是定点类型,进行精确计算。FLOATDOUBLE 数据类型是浮点类型,进行近似计算。

信息

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.34 是精确(定点)数值,而 2.34E0 是近似值(浮点)数值。

十六进制数值

十六进制数值只支持整数数值,以前缀 X0x 开始,允许出现字母 AF,所有字母不区分大小写。

以如下为合法的十六进制数值:

X'01AF'
X'01af'
x'01AF'
x'01af'
0x01AF
0x01af

以下为不合法的十六进制数值:

X'0H'(H 不是十六进制数字)

使用前缀 X 的值必须包含偶数位数,否则会出现语法错误。为避免该问题,请使用 0 填充该值,例如:X'0FFF'

如果使用前缀 0x 的值包含奇数位数,则会被视为具有额外的前导 0。例如,0xaaF 被解读为 0x0aaF

默认情况下,十六进制数值是二进制字符串,其中每对十六进制数字代表一个字符:

SELECT 0x5461626c65, CHARSET(0x5461626c65);
+--------------+-----------------------+
| 0x5461626c65 | CHARSET(0x5461626c65) |
+--------------+-----------------------+
| Table | binary |
+--------------+-----------------------+
1 row in set (0.001 sec)

空的十六进制值 (X' ') 计算为零长度的二进制字符串。转换为数字并输出 0

SELECT X''+0;
+-------+
| X''+0 |
+-------+
| 0 |
+-------+
1 row in set (0.001 sec)

要将字符串或数字转换为十六进制格式的字符串,请使用 HEX() 函数:

SELECT HEX('dog');
+------------+
| HEX('dog') |
+------------+
| 646F67 |
+------------+
1 row in set (0.001 sec)

SELECT X'646F67';
+-----------+
| X'646F67' |
+-----------+
| dog |
+-----------+
1 row in set (0.001 sec)