MySQL 9.0 版本带来了主要的新功能:创新版本为 SQL 提供了 JavaScript 函数,并为 AI 朋友提供了向量类型。
属于Oracle的MySQL数据库的新版本已经发布:9.0.0(创新版本),8.4.1(长期支持)和8.0.38(长期支持)。虽然长期支持版本是为了稳定性而设计的,但创新版本提供了新功能,特别是存储的 JavaScript 和 Vector type
9.0 的情况。
新的存储 JavaScript 仅在企业版中可用,并且基于多语言引擎 (MLE),该引擎为 SQL 以外的其他语言打开了数据库。ECMAScript 2023 严格允许使用所有常见对象,例如 Object
、 Function
、 Math
、 Date
和 String
JSON,但不允许使用新的向量类型。控制台输出通过 console.log()
和 console.error()
也提供。字符串必须采用 utf8mb4 格式。存储的 JavaScript 示例:
JavaScript 示例:
mysql> CREATE FUNCTION gcd(a INT, b INT)
RETURNS INT
NO SQL
LANGUAGE JAVASCRIPT AS
$mle$
let x = Math.abs(a)
let y = Math.abs(b)
while(y) {
var t = y
y = x % y
x = t
}
return x
$mle$
;
新类型:Vector
向量数据库在 AI 模型开发人员中特别受欢迎。开发人员现在还可以在MySQL中使用列类型 VECTOR
映射此内容,其中包含4字节浮点值的列表。它可以以二进制或列表形式表示为字符串。例:
mysql> CREATE TABLE v1 (c1 VECTOR(5000));
Query OK, 0 rows affected (0.03 sec)
特别是用于处理向量的新功能和 STRING_TO_VECTOR()
VECTOR_TO_STRING()
:
mysql> SELECT STRING_TO_VECTOR('[2, 3, 5, 7]');
+------------------------------------------------------+
| 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)
但是,向量类型有许多限制:它不能接受某些键,包括主键。不允许使用某些函数:数字、全文搜索、XML 和 JSON 函数。字符串和加密功能也受到限制。而且它无法与其他类型相提并论。
版本 9.0 中的其他细微更改是现在 EXPLAIN ANALYZE INTO
接受 JSON 作为预准备语句的格式或扩展。有些内容也被弃用,不应再使用,例如表的 MIN_VALUE
variables_info
and MAX_VALUE
列。Oracle 已完全删除 mysql_native_password 插件。
有关版本 9.0 的更多信息,请参阅文档,并在博客中找到其他新版本。
作者:Wolf Hosbach
2024 年 7 月 4 日