index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html
![]()
MySQL 9.4.0 版本正式发布,带来了多项重要变更和功能更新。其中包括字符集支持、IFNULL() 函数的变更、CREATE TABLE 语法改进、编译说明、组件说明、配置说明、弃用与移除说明、InnoDB 说明、安装说明、JavaScript 程序说明、性能模式说明、向量数据类型说明、新增或更改的功能以及已修复的漏洞等内容。此次更新旨在提升数据库性能、增强功能、修复漏洞并优化用户体验。
🔍 **字符集支持**:新增了对 IFNULL() 函数在 LIKE 子句中使用时的支持,解决了之前因排序规则派生类型问题导致的错误。同时,对排序规则聚合逻辑进行了调整,并重命名了 IGNORABLE 派生类型为 NULL。
🗡️ **CREATE TABLE**:修复了在包含生成列表达式且引用非 ASCII 标识符时,若客户端字符集与 UTF-8 不兼容导致的语法错误。
🔧 **编译说明**:更新了 macOS 平台的编译选项,升级了内置的 ICU 库和 zstd 库,并移除了针对旧版本 CMake 的兼容处理。
🔌 **组件说明**:解决了组件注册的用户定义函数(UDF)正在运行时无法注销的问题,避免了组件卸载失败导致的库被卸载和服务器意外退出。
📈 **配置说明**:提升了微软 Windows 系统下 MySQL 配置器的功能,包括修复了原地升级失败、保留自定义服务器设置、处理自定义错误日志名称等问题。同时,增加了系统变量 `back_log` 和 `server_memory` 的默认值,以提升数据库性能和稳定性。
2025-07-24 07:16 广东
这次真不是“挤牙膏”!

MySQL 9.4.0 版正式发行,让我们快速浏览一下都有哪些内容。
### 字符集支持
### 编译说明
- macOS:现在可以使用 -DWITH_KERBEROS 在 macOS 上编译服务器。 - macOS:调整了用于读取状态变量的缓冲区。这修复了在 macOS/M1 平台上可能出现的问题。 - 移除了针对旧版本 CMake 的兼容处理。 **注意** 编译 MySQL 所需的最低 CMake 版本为 3.14.6。(漏洞 #37901122) - 内置的 ICU 库已升级至 77-1 版本。(漏洞 #37870791) - 内置的 zstd 库已升级至 1.5.7 版本。(漏洞 #37869972) - 移除了使用 Clang 20 编译服务器时出现的警告。(漏洞 #37785251)- 使用 GCC 15 编译时,禁用了 clang::musttail。(漏洞 #37776018) - 解决了在某些旧版本 CMake 中处理列表时的问题。(漏洞 #37709169) - 部分编译器功能测试在使用 -fprofile-use 编译时无法通过。(漏洞 #37707556) - 编译 MySQL 所需的 Boost 版本已从 1.85.0 提升至 1.87.0。(漏洞 #37403602) - 链接器尝试使用空的 Cmake 变量 ${ICU_LIBRARIES},即使正确的库(ext::icu)已在其他位置链接。(漏洞 #36524167) - 在 macOS 上编译时,原本明确查找 openssl@1.1,现在改为查找通用的 openssl 符号链接,以支持 openssl@3。(漏洞 #35468370) - 在 macOS 上,消除了 Xcode 14 生成的弃用警告;包括建议使用 snprintf(3) 替代 sprintf(3),以及从 64 位转换为 32 位整数时可能丢失精度的警告。(漏洞 #34776172)
### 组件说明
### 配置说明
### 弃用与移除说明
### InnoDB 说明
### 安装说明
### JavaScript程序
### 性能模式说明
- 内部函数`pfs_get_thread_statement_locker_vc()`包含调试代码,这些代码意外地被包含在了发布版本中。(漏洞 #37743667)
### 向量数据类型
- **重要变更**:新增了mysql客户端的`--commands`(https://dev.mysql.com/doc/refman/9.4/en/mysql-command-options.html#option_mysql_commands)选项,该选项用于启用或禁用大多数mysql客户端命令。 此选项默认处于禁用状态。要启用它,可以使用`--commands`或`--commands=ON`(https://dev.mysql.com/doc/refman/9.4/en/mysql-command-options.html#option_mysql_commands)启动客户端。有关受此选项影响的所有命令的完整列表以及其他信息,请参见《mysql客户端选项》(https://dev.mysql.com/doc/refman/9.4/en/mysql-command-options.html)。(任务 #16949) 参考:另见漏洞 #36416568。 - InnoDB:为了改进调试,现在会将`buf_page_t`和`buf_block_t`结构的元数据打印到错误日志中。(漏洞 #35115629)参考:另见漏洞 #35115601。 - 组复制:新增了错误`ER_GRP_RPL_APPLIER_THD_KILLED`(https://dev.mysql.com/doc/mysql-errors/9.4/en/server-error-reference.html#error_er_grp_rpl_applier_thd_killed),用于区分应用线程是通过SQL的`KILL`命令终止的,还是因错误而停止的。(漏洞 #37764717) - NDB复制:现在可以将MySQL集群或单个`NDBCLUSTER`(https://dev.mysql.com/doc/refman/9.4/en/mysql-cluster.html)表的二进制日志在多个MySQL服务器之间分成相等的部分或“分片”。 为了将整个集群的二进制日志分成多个分片,此NDB版本实现了两个`mysqld`启动选项。`--ndb-log-row-slice-count`(https://dev.mysql.com/doc/refman/9.4/en/mysql-cluster-options-variables.html#option_mysqld_ndb-log-row-slice-count)选项用于确定分片的数量,从而确定共享二进制日志的服务器数量。`--ndb-log-row-slice-id`(https://dev.mysql.com/doc/refman/9.4/en/mysql-cluster-options-variables.html#option_mysqld_ndb-log-row-slice-id)用于标识此MySQL服务器负责的分片。有关这些选项的更多信息,请参见其描述。可以通过向`ndb_replication`表中添加行(并为该表中新增的`binlog_row_slice_count`和`binlog_row_slice_id`列设置适当的值),为特定的NDB表分割二进制日志。如果正在升级现有的设置,可能需要执行`ALTER TABLE`语句,或者删除并重新创建该表以获得此功能。有关更多信息和示例,请参见《按表进行二进制日志分片》(https://dev.mysql.com/doc/refman/9.4/en/mysql-cluster-replication-schema.html#ndb-replication-per-table-binlog-slicing)。(任务 #15413) - 在信号处理期间打印当前查询时,将历史的1024字节限制增加到了1073741824(1024 * 1024 * 1024)字节。(漏洞 #37603354) - 包含curl(而非链接到系统curl库)的二进制包已升级为使用curl 8.14.1。(漏洞 #37389565)
### 已修复的漏洞
徐轶韬,MySQL解决方案首席工程师。为中国金融、政府、航空运输等行业的MySQL用户提供相关产品的售前咨询,企业级产品介绍服务以及推广和普及MySQL数据库在社区的使用。公众号“MySQL解决方案工程师”运营者和内容作者。
来源丨公众号:MySQL解决方案工程师(ID:mysqlse)
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn


阅读原文
跳转微信打开