十六进制文字值使用
或
符号书写,其中包含十六进制数字 ( , )。数字和任何前导的字母都无关紧要。前导区分大小写,不能写成.
X'
val
'0x
val
val
0..9
A..F
X
0x
0X
合法的十六进制文字:
Press CTRL+C to copyX'01AF' X'01af' x'01AF' x'01af' 0x01AF 0x01af
非法的十六进制文字:
Press CTRL+C to copyX'0G' (G is not a hexadecimal digit) 0X01AF (0X must be written as 0x)
使用符号书写的值
必须包含偶数个数字,否则会出现语法错误。要更正此问题,请用前导零填充该值:
X'
val
'
Press CTRL+C to copymysql> SET @s = X'FFF'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'X'FFF'' mysql> SET @s = X'0FFF'; Query OK, 0 rows affected (0.00 sec)
使用包含奇数位的符号
编写的值
被视为具有额外的前导. 例如,
被解释为
。
0x
val
0
0xaaa
0x0aaa
默认情况下,十六进制文字是二进制字符串,其中每对十六进制数字代表一个字符:
Press CTRL+C to copymysql> SELECT X'4D7953514C', CHARSET(X'4D7953514C'); +---------------+------------------------+ | X'4D7953514C' | CHARSET(X'4D7953514C') | +---------------+------------------------+ | MySQL | binary | +---------------+------------------------+ mysql> SELECT 0x5461626c65, CHARSET(0x5461626c65); +--------------+-----------------------+ | 0x5461626c65 | CHARSET(0x5461626c65) | +--------------+-----------------------+ | Table | binary | +--------------+-----------------------+
十六进制文字可能有一个可选的字符集介绍符和COLLATE
子句,以将其指定为使用特定字符集和排序规则的字符串:
Press CTRL+C to copy[_charset_name] X'val' [COLLATE collation_name]
例子:
Press CTRL+C to copySELECT _latin1 X'4D7953514C'; SELECT _utf8 0x4D7953514C COLLATE utf8_danish_ci;
这些示例使用
符号,但符号也允许引入者。有关介绍人的信息,请参阅第 10.3.8 节,“字符集介绍人”。
X'
val
'0x
val
在数字上下文中,MySQL 将十六进制文字视为
BIGINT UNSIGNED
(64 位无符号整数)。为确保对十六进制文字进行数字处理,请在数字上下文中使用它。执行此操作的方法包括添加 0 或使用
CAST(... AS UNSIGNED)
. 例如,分配给用户定义变量的十六进制文字在默认情况下是二进制字符串。要将值分配为数字,请在数字上下文中使用它:
Press CTRL+C to copymysql> SET @v1 = X'41'; mysql> SET @v2 = X'41'+0; mysql> SET @v3 = CAST(X'41' AS UNSIGNED); mysql> SELECT @v1, @v2, @v3; +------+------+------+ | @v1 | @v2 | @v3 | +------+------+------+ | A | 65 | 65 | +------+------+------+
空的十六进制值 ( X''
) 计算为零长度二进制字符串。转换为数字,它产生 0:
Press CTRL+C to copymysql> SELECT CHARSET(X''), LENGTH(X''); +--------------+-------------+ | CHARSET(X'') | LENGTH(X'') | +--------------+-------------+ | binary | 0 | +--------------+-------------+ mysql> SELECT X''+0; +-------+ | X''+0 | +-------+ | 0 | +-------+
该
表示法基于标准 SQL。该
表示法基于 ODBC,十六进制字符串通常用于为
列提供值。
X'
val
'0x
BLOB
要将字符串或数字转换为十六进制格式的字符串,请使用以下HEX()
函数:
Press CTRL+C to copymysql> SELECT HEX('cat'); +------------+ | HEX('cat') | +------------+ | 636174 | +------------+ mysql> SELECT X'636174'; +-----------+ | X'636174' | +-----------+ | cat | +-----------+