MySQL 8.0新特性 -- bit-wise操作

bit函数和操作符

名称 说明
 &  按位与
 >>  右移
 <<  左移
 ^  按位异或
 bit_count()  返回位数
 |  按位或
 ~  按位取反

在mysql8之前,bit函数和操作符只是支持64位的整数(bigint),返回值也是64位的整数(bigint)。所以最大支持到64位。非bigint参数会被转化成bigint,然后参与操作,所以可能会发生截断。

在8.0中,bit函数和操作符支持二进制字符串类型的参数,比如binary、varbinary、blob类型,返回值也是其对应的类型。这就使得可以接收和返回大于64bit的值。非二进制字符串会被转换成bigint类型后参与运算。

MySQL 8.0之前的bit操作

在8.0之前只是接收无符号的64位整形参数,返回值也是64无符号整形。其他类型会被转换成bigint:
·数字类型的字面值,会被当做无符号的64位整形对待:

>select 127 | 128, 128 << 2, bit_count(15);
+-----------+----------+---------------+
| 127 | 128 | 128 << 2 | bit_count(15) |
+-----------+----------+---------------+
|       255 |      512 |             4 |
+-----------+----------+---------------+

·字符串参与运算前,被转换成整形(‘127‘转换成127)

>select ‘127‘ | ‘128‘, ‘128‘ << 2, bit_count(‘15‘);
+---------------+------------+-----------------+
| ‘127‘ | ‘128‘ | ‘128‘ << 2 | bit_count(‘15‘) |
+---------------+------------+-----------------+
|           255 |        512 |               4 |
+---------------+------------+-----------------+

·十六进制字面值进行bit操作。mysql默认是将十六进制当做二进制字符串,但是在数字上下文中是将其当做数字

>select x‘7f‘ | x‘80‘, x‘80‘ << 2, bit_count(x‘0f‘);
+---------------+------------+------------------+
| x‘7f‘ | x‘80‘ | x‘80‘ << 2 | bit_count(x‘0f‘) |
+---------------+------------+------------------+
|           255 |        512 |                4 |
+---------------+------------+------------------+

  

MySQL 8.0的bit操作

MySQL 8.0扩展了bit操作,可以直接处理二进制字符串参数,不再需要进行类型转换,产生的结果也是二进制字符串。但是和之前版本一样,非整形、或非二进制字符串类型的参数仍然会转换成整形。
这一扩展加强了bit操作的特性:
·bit操作可以在大于64bit的值上进行
·可以在二进制字符串上执行bit操作

比如uuid、ipv6,格式是人们可读的text字符串格式:

UUID: 6ccd780c-baba-1026-9564-5b8c656024db
IPv6: fe80::219:d1ff:fe91:1a72

  

在text字符串格式上操作这些通常比较麻烦,通常是将其转换成固定长度的二进制字符串(不带分隔符)。

> select hex(uuid_to_bin(‘6ccd780c-baba-1026-9564-5b8c656024db‘));
+----------------------------------------------------------+
| hex(uuid_to_bin(‘6ccd780c-baba-1026-9564-5b8c656024db‘)) |
+----------------------------------------------------------+
| 6CCD780CBABA102695645B8C656024DB                         |
+----------------------------------------------------------+

> select hex(inet6_aton(‘fe80::219:d1ff:fe91:1a72‘));
+---------------------------------------------+
| hex(inet6_aton(‘fe80::219:d1ff:fe91:1a72‘)) |
+---------------------------------------------+
| FE800000000000000219D1FFFE911A72            |
+---------------------------------------------+

转换成二进制字符串后就容易操作了。

对于十六进制字面值和bit字面值,这些都是被mysql默认当做binary字符串,但是在数值context中是被当做数字。作为对老版本的兼容性,mysql8.0中,如果所有的参数都是十六进制或bit字面值,在数值context中仍然使用老的方式进行bit操作。

·十六进制和bit字面值作为整形参与bit操作:

> select x‘40‘ | x‘01‘, b‘11110001‘ & b‘01001111‘;
+---------------+---------------------------+
| x‘40‘ | x‘01‘ | b‘11110001‘ & b‘01001111‘ |
+---------------+---------------------------+
|            65 |                        65 |
+---------------+---------------------------+

·由于_binary,会将十六进制字面值和bit字面值转成binary字符串:

> select _binary x‘40‘ | x‘01‘, b‘11110001‘ & _binary b‘01001111‘;
+-----------------------+-----------------------------------+
| _binary x‘40‘ | x‘01‘ | b‘11110001‘ & _binary b‘01001111‘ |
+-----------------------+-----------------------------------+
| A                     | A                                 |
+-----------------------+-----------------------------------+

  

原文地址:https://www.cnblogs.com/abclife/p/12617513.html

时间: 2024-07-29 06:40:32

MySQL 8.0新特性 -- bit-wise操作的相关文章

Mysql 8.0 新特性测试

Mysql 8.0 新特性测试 Role MySQL8.0版本添加了role特性,role是一种逻辑概念是权限的集合,可以将一个或以上的权限赋予给role,再将role赋给user.Oracle,Postgresql和Mariadb中早已存在role这个特性. create role role_test; grant select,insert,delete,update on zhongwc.tab01 to role_test; create user 'user1'@'%' identif

MySQL 8.0新特性

一.MySQL 8.0中添加的功能 1.新的系统字典表 整合了存储有关数据库对象信息的事务数据字典,所有的元数据都用InnoDB引擎进行存储 2.支持DDL 原子操作 InnoDB表的DDL支持事务完整性,要么成功要么回滚,将DDL操作回滚日志写入到data dictionary 数据字典表 mysql.innodb_ddl_log 中用于回滚操作 3.安全和用户管理 新增caching_sha2_password认证插件,并且是默认的身份认证插件.性能和安全方面加强 权限支持role 新增密码

MySQL 8.0新特性之原子DDL

文章来源:爱可生云数据库 简介 MySQL8.0 开始支持原? DDL(atomic DDL),数据字典的更新,存储引擎操作,写?进制日志结合成了一个事务.在没有原?DDL之前,DROP TABLE test1,test2:如遇到server crash,可能会有test1被drop了,test2没有被drop掉.下面来看下在MySQL8.0之前和MySQL8.0 数据字典的区别. 在MySQL8.0 之前,Data Dictionary除了存在与.FRM, .TRG, .OPT ?件外,还存在

mysql 8.0 新特性

https://www.cnblogs.com/coco-caiyuan/articles/11526994.html https://www.cnblogs.com/songgj/p/10658916.html 原文地址:https://www.cnblogs.com/newlangwen/p/11792055.html

Java基础加强-(注解,类加载器,servlet3.0新特性)

1.   Annotation注解 1.1.  Annotation概述 Annotation是JDK 5.0以后提供对元数据的支持,可以在编译.加载和运行时被读取,并执行相应的处理.所谓Annotation就是提供了一种为程序元素设置元数据的方法,可用于修饰包.类.构造器.方法.成员变量.参数和局部变量的声明,这些信息被存储在Annotation的“name=value”对中. Annotation能被用来为程序元素(类.方法.成员变量等)设置元数据,比如一段代码的作者或者告诉编译器禁止一些特

MySQL8.0新特性【转】

Server层,选项持久化 mysql> show variables like '%max_connections%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | max_connections | 512 | | mysqlx_max_connections | 100 | +------------------------+-------

Atitit.&#160;C#.net&#160;clr&#160;2.0&#160;&#160;4.0新特性

Atitit. C#.net clr 2.0  4.0新特性 1. CLR内部结构1 2. CLR 版本发展史3 3. CLR 2.0 3 4. CLR 4 新特性 概览4 4.1.1.  托管与本地代码的互操作5 4.1.2.    垃圾回收6 4.1.3.    代码约定6 4.1.4.    Corrupted state exception6 4.1.5.     新的安全模型7 4.1.6.     同一个进程,多个CLR7 4.1.7.     基本类库7 5. CLR最新发展8 6

day07 MyEclipse 安装 jdk5.0 新特性

1.myeclipse的安装和使用 * eclipse:是一个免费的开发工具    * myeclipse:是一个收费的插件,破解myeclipse,        ** 安装目录的要求: 不能有中文和空格        ** 安装完成之后,选择一个工作空间 ,这个工作空间不能有中文和空格    * 破解myeclipse        ** 运行run.bat文件,但是运行之前,必须要安装jdk,通过配置环境变量 * myeclipse的使用        * 创建一个工程          

AFNetworking 2.0 新特性讲解之AFHTTPSessionManager

AFNetworking 2.0 新特性讲解之AFHTTPSessionManager (2014-02-17 11:56:24) 转载▼     AFNetworking 2.0 相比1.0 API 接口改动还是很大的. 其中一个便是 AFURLSessionManager,当然如果你不太熟悉,或者为了兼容低版本,你依然可以选择AFHTTPRequestOperationManager,AFURLSessionManager是基于 NSURLSessionConfiguration(IOS 7