暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[ACDU 翻译] MySQL 9.1.4 十六进制文字

原创 由迪 2021-12-10
965

十六进制文字值使用或 符号书写 ,其中包含十六进制数字 ( , )。数字和任何前导的字母都无关紧要。前导区分大小写,不能写为. X'*val*'``0x*val*val0..9``A..F``X``0x``0X

合法的十六进制文字:

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

非法的十六进制文字:

X'0G'   (G is not a hexadecimal digit)
0X01AF  (0X must be written as 0x)

使用符号写入的值 必须包含偶数位数,否则会出现语法错误。要更正此问题,请使用前导零填充该值: X'*val*'

mysql> 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

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

mysql> SELECT X'4D7953514C', CHARSET(X'4D7953514C'); +---------------+------------------------+ | X'4D7953514C' | CHARSET(X'4D7953514C') | +---------------+------------------------+ | MySQL | binary | +---------------+------------------------+ mysql> SELECT 0x5461626c65, CHARSET(0x5461626c65); +--------------+-----------------------+ | 0x5461626c65 | CHARSET(0x5461626c65) | +--------------+-----------------------+ | Table | binary | +--------------+-----------------------+

十六进制文字可能有一个可选的字符集介绍者和COLLATE子句,以将其指定为使用特定字符集和排序规则的字符串:

[_charset_name] X'val' [COLLATE collation_name]

例子:

SELECT _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). 例如,默认情况下,分配给用户定义变量的十六进制文字是二进制字符串。要将值分配为数字,请在数字上下文中使用它:

mysql> 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:

mysql> SELECT CHARSET(X''), LENGTH(X''); +--------------+-------------+ | CHARSET(X'') | LENGTH(X'') | +--------------+-------------+ | binary | 0 | +--------------+-------------+ mysql> SELECT X''+0; +-------+ | X''+0 | +-------+ | 0 | +-------+

该 表示法基于标准 SQL。该 表示法基于 ODBC,通常使用十六进制字符串为列提供值 。 X'*val*'``0xBLOB

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

mysql> SELECT HEX('cat'); +------------+ | HEX('cat') | +------------+ | 636174 | +------------+ mysql> SELECT X'636174'; +-----------+ | X'636174' | +-----------+ | cat | +-----------+

对于十六进制文字,位操作被视为数字上下文,但在 MySQL 8.0 及更高版本中,位操作允许数字或二进制字符串参数。要为十六进制文字显式指定二进制字符串上下文,请_binary对至少一个参数使用 介绍器:

mysql> SET @v1 = X'000D' | X'0BC0'; mysql> SET @v2 = _binary X'000D' | X'0BC0'; mysql> SELECT HEX(@v1), HEX(@v2); +----------+----------+ | HEX(@v1) | HEX(@v2) | +----------+----------+ | BCD | 0BCD | +----------+----------+

两种位运算的显示结果类似,但没有的结果_binary是一个 BIGINT值,而有的结果 _binary是一个二进制字符串。由于结果类型不同,显示值不同:数值结果不显示高位0。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论