Vector相关的信息和内容在MySQL 9.0中出现了,惊不惊喜,意不意外?该来的终将到来,虽然第一时间发布的发行一览和手册中没有任何关于Vector的内容,但在随后的更新中已经将这部分内容反映到文档当中,让我们一探究竟。
在当今生成式AI火爆的背景下,相关产品都在进行积极地开发,MySQL自然不能例外,尤其是新发布的MySQL Heatwave GenAI,提供了数据库内的向量存储及用自然语言进行语境对话的能力。既然Heatwave中支持了向量存储,那么本地部署的MySQL 9.0也要具备相应的能力才能够让用户顺利地使用MySQL Heatwave GenAI。
MySQL9.0中发布了新的数据类型Vector及相对于的三个函数。
Vector数据类型:VECTOR(N)是一个指定条目数量的数据结构。每一个条目是一个4字节单精度浮点值,条目的数量默认为2048,最大值为16383。例如,
Create Table: CREATE TABLE `testtablev` (
`id` int DEFAULT NULL,
`3d` vector(2048) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
需要注意,vector类型具有一些限制,例如,无法将其与其他类型的数据进行比较,可以将其与vector类型的数据进行等值比较,但无法进行其他的比较。vector列无法作为任何键使用。
vector值可以用于 BIT_LENGTH()、CHAR_LENGTH()、HEX()、 LENGTH(),及 TO_BASE64()函数,其他的字符串相关函数无法使用vector值作为参数。此外,vector值还可以用于 AES_ENCRYPT()、 COMPRESS()、MD5()、SHA1(),及SHA2()加密函数,及COALESCE()、IFNULL()、 NULLIF(),和IF()。
vector值无法作为聚合函数或窗口函数的参数使用,也无法进行下列操作或函数的参数使用:
- 数值函数和运算符
- 时间函数
- 全文检索功能
- XML函数
- 位函数,AND和OR
- JSON函数
Vector函数:伴随着vector类型的推出,9.0同时推出了三个函数与之配合,分别是:
STRING_TO_VECTOR(string):与TO_VECTOR()相同,将字符串表示为VECTOR列的二进制值。例如,
mysql> SELECT STRING_TO_VECTOR("[3.14,2024,18]");
+------------------------------------------------------------------------+
| STRING_TO_VECTOR("[3.14,2024,18]") |
+------------------------------------------------------------------------+
| 0xC3F548400000FD4400009041 |
+------------------------------------------------------------------------+
1 row in set (0.00 sec)
VECTOR_TO_STRING():与FROM_VECTOR()相同,所具有的功能与TO_VECTOR()相反。例如,
mysql> SELECT VECTOR_TO_STRING(0xC3F548400000FD4400009041);
+----------------------------------------------+
| VECTOR_TO_STRING(0xC3F548400000FD4400009041) |
+----------------------------------------------+
| [3.14000e+00,2.02400e+03,1.80000e+01] |
+----------------------------------------------+
1 row in set (0.00 sec)
VECTOR_DIM(vector):返回该向量包含的条目数量。例如,
mysql> SELECT VECTOR_DIM(0xC3F548400000FD4400009041);
+----------------------------------------+
| VECTOR_DIM(0xC3F548400000FD4400009041) |
+----------------------------------------+
| 3 |
+----------------------------------------+
1 row in set (0.00 sec)
以上内容是关于MySQL9.0中Vector数据类型和函数的简介,详细内容请访问官方手册,期待您挖掘出MySQL有趣的内容。
感谢关注“MySQL解决方案工程师”!