• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 位值

    位值文字使用或表示法书写。是使用零和一写入的二进制值。任何领先的大写字母都无所谓。标题区分大小写,不能写成。b'val'0bvalvalb0b0B

    合法的位值文字:

    b'01'
    B'01'
    0b01
    

    非法的位值文字:

    b'2'    (2 is not a binary digit)
    0B01    (0B must be written as 0b)
    

    默认情况下,位值文字是二进制字符串:

    mysql> SELECT b'1000001', CHARSET(b'1000001');
    +------------	+---------------------	+
    | b'1000001' 	| CHARSET(b'1000001') 	|
    +------------	+---------------------	+
    | A          	| binary              	|
    +------------	+---------------------	+
    mysql> SELECT 0b1100001, CHARSET(0b1100001);
    +-----------	+--------------------	+
    | 0b1100001 	| CHARSET(0b1100001) 	|
    +-----------	+--------------------	+
    | a         	| binary             	|
    +-----------	+--------------------	+
    

    位值文字可能具有可选的字符集介绍程序和COLLATE子句,以将其指定为使用特定字符集和排序规则的字符串:

    [_charset_name] b'val' [COLLATE collation_name]
    

    例子:

    SELECT _latin1 b'1000001';
    SELECT _utf8 0b1000001 COLLATE utf8_danish_ci;
    

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

    在数字上下文中,MySQL将位文字视为整数。为了确保对位文字进行数字处理,请在数字上下文中使用它。做到这一点的方法包括加0或使用CAST(... AS UNSIGNED)。例如,默认情况下,分配给用户定义变量的位文字是二进制字符串。要将值分配为数字,请在数字上下文中使用它:

    mysql> SET @v1 = b'1100001';
    mysql> SET @v2 = b'1100001'	+0;
    mysql> SET @v3 = CAST(b'1100001' AS UNSIGNED);
    mysql> SELECT @v1, @v2, @v3;
    +------	+------	+------	+
    | @v1  	| @v2  	| @v3  	|
    +------	+------	+------	+
    | a    	|   97 	|   97 	|
    +------	+------	+------	+
    

    空位值(b'')等于零长度的二进制字符串。转换为数字,将产生0:

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

    使用位值表示法可以方便地指定要分配给BIT列的值:

    mysql> CREATE TABLE t (b BIT(8));
    mysql> INSERT INTO t SET b = b'11111111';
    mysql> INSERT INTO t SET b = b'1010';
    mysql> INSERT INTO t SET b = b'0101';
    

    结果集中的位值以二进制值形式返回,可能无法很好地显示。要将位值转换为可打印形式,请在数字上下文中使用它,或使用诸如BIN()或的转换函数HEX()。转换后的值中不显示高位0位数。

    mysql> SELECT b	+0, BIN(b), OCT(b), HEX(b) FROM t;
    +------	+----------	+--------	+--------	+
    | b		+0  	| BIN(b)   	| OCT(b) 	| HEX(b) 	|
    +------	+----------	+--------	+--------	+
    |  255 	| 11111111 	| 377    	| FF     	|
    |   10 	| 1010     	| 12     	| A      	|
    |    5 	| 101      	| 5      	| 5      	|
    +------	+----------	+--------	+--------	+
    

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

    mysql> SET @v1 = b'000010101' | b'000101010';
    mysql> SET @v2 = _binary b'000010101' | _binary b'000101010';
    mysql> SELECT HEX(@v1), HEX(@v2);
    +----------	+----------	+
    | HEX(@v1) 	| HEX(@v2) 	|
    +----------	+----------	+
    | 3F       	| 003F     	|
    +----------	+----------	+
    

    对于两个位操作,显示的结果看起来都相似,但是不带结果_binary是一个BIGINT值,而带结果_binary是一个二进制字符串。由于结果类型的不同,显示的值也不同:数字结果不显示高阶0位数。

    上篇:十六进制值

    下篇:布尔值