徐轶韬 2024-10-18 07:15 广东
MySQL创新版9.1.0于2024年10月15日正式发布。
MySQL创新版9.1.0于2024年10月15日正式发布。此外,MySQL8.0.40及8.4.3补丁版本也同时发布。8.4.3是目前MySQL的LTS长期支持版本,该版本中将不会增加新的功能与特性,仅提供错误修复。新功能与新特性仅在创新版中发布。让我们一起快速浏览一下9.1.0中有哪些新的内容。
DDL原子性:MySQL已经支持DDL操作的原子性,但是在之前版本中的“CREATE DATABASE” 和 “DROP DATABASE”并没有实现真正的崩溃安全,原因在于当操作系统上的数据库目录创建后如果“CREATE DATABASE”语句没有成功提交,该目录并不会删除,需要手动进行删除,反之,目录删除后,“DROP DATABASE”没有成功提交会造成系统错误。该问题已经在新版本中解决。
审计和防火墙:在之前的版本中,审计和防火墙功能会认为非字母开头的用户名称为无效用户,例如,“$foo”。在该版本中已解决该问题。
关于编译:编译部分中修复了大量的兼容性问题,并作出一些改进,其中“SQL_I_list” 使用成员字段 “next” 来跟踪指向下一个对象的指针,该指针字段在构造列表对象时初始化为成员字段的地址。默认的赋值运算符采用的是成员级赋值,只有使用常规构造函数构造的列表对象才适用,这不适用于空列表。因此,新版本通过提供自定义的移动构造函数和赋值操作符函数来解决这个问题。此外,新版本还将“save_and_clear()”的实现更改为使用“std::move()”而不是赋值操作。感谢腾讯团队和Xingyu Yang对该修复的贡献。
SQL函数与操作:
新版本解决了当将DATABASE()函数用作 UNION 查询的一部分时输出被截断问题。
在某些情况下,当使用DISTINCT时,相同的值进行SUM()会产生不同的结果。例如,
mysql> SELECT SUM(b'1100'), SUM(DISTINCT b'1100');+--------------+-----------------------+| sum(b'1100') | sum(DISTINCT b'1100') |+--------------+-----------------------+|12 |9 |+--------------+-----------------------+
这是因为在使用“DISTINCT”时,会创建一个临时的表用于保存值,以便在最后将产生唯一的值返回给用户。之前创建这样的表时,没有考虑到已经确定的数据类型和长度,对它们重新计算。现在则考虑已经确定的数据类型和长度。
JavaScript:
JavaScript存储程序使用默认的utf8mb4字符集,但INFORMATION_SCHEMA.ROUTINES中COLLATION_CONNECTION列之前显示的值是“latin1”,现在改为“Utf8mb4_0900_ai_ci” (utf8mb4的默认排序规则)
当预处理语句返回一个BLOB值时,该BLOB值在预处理语句被释放后失效,新版本修复了该错误。
在使用Statement句柄接口的存储过程中,如果DML使用用户变量,有时会导致在该存储过程执行后,执行其他语句使得服务器意外退出。为了解决该问题,新版本在执行句柄接口中的子语句后,重置用于存储用户变量及其值到语句执行的根内存。
SqlResult不支持迭代:现在可以用下面所示的方式遍历结果集:
let result = session.runSql("SELECT * FROM t")
for (let row of result) {
console.log(row.c1+row.c3);
}
JavaScript现在完全支持VECTOR类型存储程序。向量现在可以用作输入参数,输出参数,预处理语句bind()参数,并返回值。
Keyring:
从所有MySQL密匙环相关的组件中移除对不安全的AES ECB的支持。
可插拔认证:
“SET PERSIST”中解决了“Authentication_ldap_simple_bind_root_pwd =password”没有实际保存密码的错误。
<1>1>
>
>
''
>
>
''
>
""
""
""
""