7月1日,MySQL 9.0.0 创新版本, 8.4.1 LTS, 8.0.38 三版齐发。
发版当天安装包已经可以下载,我也在第一时间做了分享:
- MySQL 9.0.0 新鲜出炉!支持向量类型
当时参考手册还未上线,这两天文档虽已上线,但似乎仍在更新中,大家关注的向量数据类型也从文档中找不到踪影。
不过,在最新版本的文档中 (Document generated on: 2024-07-03 (revision: 78966)),数据类型章节已经添加了 VECTOR 页面。
下面来看看具体描述。
新功能
https://dev.mysql.com/doc/refman/9.0/en/mysql-nutshell.html
MySQL 9.0 新功能:支持 VECTOR 类型
MySQL 9.0 支持 VECTOR 列类型。向量是一种数据结构,由条目列表(4 字节浮点值)组成,可以表示为二进制字符串值或列表格式的字符串。VECTOR 列声明有最大长度或条目数(在括号中);默认值为 2048,最大值为 16383。
VECTOR_DIM()(也在 MySQL 9.0 中添加)返回向量的长度。提供了转换函数。STRING_TO_VECTOR()(别名:TO_VECTOR())采用向量的列表格式表示并返回二进制字符串表示;VECTOR_TO_STRING()(别名:FROM_VECTOR())执行相反的操作,如下所示:
mysql> SELECT STRING_TO_VECTOR('[2, 3, 5, 7]');
+--------------------------------------------------------------------+
| STRING_TO_VECTOR('[2, 3, 5, 7]') |
+--------------------------------------------------------------------+
| 0x00000040000040400000A0400000E040 |
+--------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT VECTOR_TO_STRING(0x00000040000040400000A0400000E040);
+------------------------------------------------------+
| VECTOR_TO_STRING(0x00000040000040400000A0400000E040) |
+------------------------------------------------------+
| [2.00000e+00,3.00000e+00,5.00000e+00,7.00000e+00] |
+------------------------------------------------------+
1 row in set (0.00 sec)
VECTOR
https://dev.mysql.com/doc/refman/9.0/en/vector.html
VECTOR 定义
VECTOR 是一种可以容纳最多指定数量 N 的条目的结构,定义如下:VECTOR(N)
每个条目是一个 4 字节(单精度)浮点值。
默认长度为 2048;最大长度为 16383 个条目。
mysql> create table tv1 (c1 vector);
Query OK, 0 rows affected (0.01 sec)
mysql> show create table tv1\G
*************************** 1. row ***************************
Table: tv1
Create Table: CREATE TABLE `tv1` (
`c1` vector(2048) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> create table tv2 (c1 vector(16384));
ERROR 6137 (HY000): Data size (65536 Bytes, 16384 dimensions) exceeds VECTOR max (65532 Bytes, 16383 dimensions) for column: 'c1'
mysql> create table tv3 (c1 vector(1));
Query OK, 0 rows affected (0.02 sec)
mysql> insert tv3 select to_vector('[1]');
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> select from_vector(c1) from tv3;
+-----------------+
| from_vector(c1) |
+-----------------+
| [1.00000e+00] |
+-----------------+
1 row in set (0.00 sec)
VECTOR 不能与任何其他类型进行比较。它可以与另一个 VECTOR 进行比较以确定相等性,但无法进行其他比较。
VECTOR 列不能用作任何类型的键,包括:主键,外键,唯一键,分区键。
VECTOR 列也不能用作直方图源。
VECTOR 支持和不支持的函数
VECTOR 值可与 MySQL 字符串函数 BIT_LENGTH()、CHAR_LENGTH()、HEX()、LENGTH() 和 TO_BASE64() 一起使用。其他字符串函数不接受 VECTOR 类型作为参数。
VECTOR 可用作任何加密函数 AES_ENCRYPT()、COMPRESS()、MD5()、SHA1() 和 SHA2() 的参数。任何其他加密函数都不支持将 VECTOR 作为参数类型。
VECTOR 可用作 CASE 运算符和相关流控制函数的参数,包括 COALESCE()、IFNULL()、NULLIF() 和 IF()。
VECTOR 可用作 CAST(expression AS BINARY) 的参数;结果为二进制字符串,内容与 VECTOR 参数相同。不支持使用 CAST 转换为 VECTOR;您可以使用 VECTOR_TO_STRING() 将合适的字符串转换为 VECTOR。
VECTOR 数据类型不能用作除 COUNT[DISTINCT] 之外的聚合函数或窗口函数的参数。
VECTOR 不能用作下列任何类型的函数和运算符的参数:
- 数字函数和运算符
- 时间函数
- 全文搜索函数
- XML 函数
- 位函数,例如按位 AND 和 OR
- JSON 函数
VECTOR 函数
https://dev.mysql.com/doc/refman/9.0/en/vector-functions.html
MySQL 9.0 支持 SQL 函数来处理 VECTOR 值。本节介绍了这些函数。
STRING_TO_VECTOR(): 获取符合字符串表示的 VECTOR 列的二进制值
VECTOR_DIM(): 获取向量的长度(即其包含的条目数)
VECTOR_TO_STRING(): 获取 VECTOR 列的字符串表示形式,将其值指定为二进制字符串
mysql> SELECT VECTOR_DIM(TO_VECTOR('[2, 3, 5]') );
+-------------------------------------+
| VECTOR_DIM(TO_VECTOR('[2, 3, 5]') ) |
+-------------------------------------+
| 3 |
+-------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT VECTOR_DIM(0x0040004000800080);
+--------------------------------+
| VECTOR_DIM(0x0040004000800080) |
+--------------------------------+
| 2 |
+--------------------------------+
1 row in set (0.00 sec)
关键字
https://dev.mysql.com/doc/refman/9.0/en/keywords.html
对比 MySQL 8.4,MySQL 9.0 新增关键字:VECTOR
mysql> select * from information_schema.KEYWORDS where word = 'vector';
+--------+----------+
| WORD | RESERVED |
+--------+----------+
| VECTOR | 0 |
+--------+----------+
1 row in set (0.00 sec)
End.
简单翻阅了一下源码,向量部分大致就这些内容,这会文档算是补全。
其实还有一块内容,MySQL Connector 中关于 VECTOR 的部分,这个我们下期再续。
🌻 往期精彩 ▼
[Oracle]
- Oracle 数据库全面升级为 23ai
- python-oracledb 已率先支持 Oracle 23ai
- 一文带你了解 Oracle 23ai 新特性 Vector 的基础用法
[MySQL]
- 「合集」MySQL 8.x 系列文章汇总
- 如何选择适合的 MySQL Connector/J 版本
- MySQL 8.4.0 LTS 发布 (MySQL 第一个长期支持版本)
[TiDB]
- 星辰考古:TiDB v3.x 忆水木
- 星辰考古:TiDB v2.x 回忆杀
- 敢于公布BUG的国产数据库才是好数据库
[PG]
- [RL9] Rocky Linux 9.4 搭载 PG 16.1
- 即将告别PG 12,建议升级到PG 16.3版本
- 后 EL 7 时代,PG 16 如何在 CentOS 7 上运行
– / END / –
👉 这里可以找到我
- 微信公众号:少安事务所 (mysqloffice)
- 墨天轮:严少安
- PGFans: 严少安
- ITPUB:少安事务所
- TiDB 专栏:@ShawnYan
如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!ღ( ´・ᴗ・` )~