9.1.5 位值 Literals
位值 Literals 使用b'val'
或0bval
table 示法编写。 * val
*是使用零和一写入的二进制值。任何前导b
的字母大小写都没有关系。前导0b
区分大小写,不能写为0B
。
合法的位值 Literals:
b'01'
B'01'
0b01
非法的位值 Literals:
b'2' (2 is not a binary digit)
0B01 (0B must be written as 0b)
默认情况下,位值 Literals 是二进制字符串:
mysql> SELECT b'1000001', CHARSET(b'1000001');
+------------+---------------------+
| b'1000001' | CHARSET(b'1000001') |
+------------+---------------------+
| A | binary |
+------------+---------------------+
mysql> SELECT 0b1100001, CHARSET(0b1100001);
+-----------+--------------------+
| 0b1100001 | CHARSET(0b1100001) |
+-----------+--------------------+
| a | binary |
+-----------+--------------------+
位值 Literals 可能具有可选的字符集介绍程序和COLLATE
子句,以将其指定为使用特定字符集和排序规则的字符串:
[_charset_name] b'val' [COLLATE collation_name]
Examples:
SELECT _latin1 b'1000001';
SELECT _utf8 0b1000001 COLLATE utf8_danish_ci;
这些示例使用b'val'
table 示法,但是0bval
table 示法也允许介绍者。有关介绍人的信息,请参见第 10.3.8 节“字符集介绍者”。
在数字上下文中,MySQL 将位 Literals 视为整数。为了确保对位 Literals 进行数字处理,请在数字上下文中使用它。这样做的方法包括加 0 或使用投射(...为未签名)。例如,默认情况下,分配给用户定义变量的位 Literals 是二进制字符串。要将值分配为数字,请在数字上下文中使用它:
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 |
+-------+
使用位值 table 示法可以方便地指定要分配给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 |
+------+----------+--------+--------+