• 首页
  • css3教程
  • html5教程
  • jQuery手册
  • vue手册
  • php手册
  • MySQL手册
  • apache手册
  • redis手册
  • 十六进制值

    十六进制文字值使用或表示法书写,其中包含十六进制数字(,)。数字和任何前导字母的大小写无关紧要。标题区分大小写,不能写成。X'val'0xvalval0..9A..FX0x0X

    合法的十六进制文字:

    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)
    

    使用包含奇数位数的符号书写的值将被视为具有额外的前导。例如,被解释为。0xval00x 0x0

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

    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;
    

    这些示例使用符号,但是符号也允许介绍者。有关介绍人的信息,请参见“字符串字符集和校验规则”。X'val'0xval

    在数字上下文中,MySQL将十六进制文字视为BIGINT(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,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位数。


    上篇:字符串

    下篇:位值