⚠ 這是歷史版本頁面 — 查看 MySQL 最新版本 →
  • 軟體名稱MySQL
  • 目前版本5.0.41
  • 更新日期2007-05-15
  • 檔案大小22.34MB
  • 檔案名稱mysql-essential-5.0.41-win32.msi
  • 作業系統Windows 7 64 / Windows 8 64 / Windows 10 64 / Windows 11
  • 支援語系English
  • 授權型式開源軟體
  • 開發商 Oracle
  • 軟體分類Windows 軟體 / 開發者工具

編輯短評

MySQL 是一套開源且由社群驅動的關聯式資料庫管理系統,主要用來儲存、管理與檢索數據,並以速度快、可靠性高和易於使用著稱。它最鮮明的特色在於具備高度的可擴展性,能從小型應用一路撐起大型企業系統,同時提供最佳化的查詢執行與索引技術,確保資料處理效率;安全性方面也內建多種驗證與加密機制,並支援複寫與叢集以達成高可用性。目前由 Oracle 持續維護,更新相當活躍,在同類開發者工具中屬於主流首選,使用者評價普遍不錯,累積的評分人數也相當可觀。

這套軟體適合需要建構資料驅動應用程式的開發者,無論是網站後端、企業內部系統或數據分析平台,都能派上用場。它主要透過命令列介面運作,對熟悉指令的進階使用者較友善,但市面上有許多第三方圖形介面工具可補足操作門檻。與同分類的 BlueStacks、Turbo C++ 或 VMware 等工具相比,MySQL 專注於資料庫核心服務,並非整合開發環境或虛擬化方案,取捨上更偏向純粹的資料層需求。授權為開源軟體,提供 Windows 與 macOS 版本,但介面僅支援英文,使用前需留意語系與操作習慣。

軟體介紹

MySQL 是一款開源且由 community-driven RDBMS,為儲存、管理與檢索數據提供強大且具可擴展性的平台。

它以速度快、可靠性高且易於使用而聞名,使其成為小型應用程式與大型企業系統的理想選擇。

由 Oracle Corporation 開發,MySQL Community Server 提供了一套完整的工具與功能,讓開發者能夠輕鬆建構動態且由數據驅動的應用程式。

Key Features

Scalability
它能處理海量數據,並可毫不費力地擴展以滿足日益增長的需求。

Performance
憑藉優化的 Query Execution 與 Indexing 技術,它能確保快速的數據檢索與處理速度。

Security
它提供多種 Authentication 機制與 Encryption 選項,以保護敏感數據的安全。

High Availability
它支援 Replication 與 Clustering,可實現冗餘備援並確保數據的持續可用性。

Flexibility
MySQL 相容於多種作業系統並支援多種程式語言,具有極高的通用性。

User Interface

MySQL Database Server 主要透過 Command-line Interface (CLI) 運作,適合經驗豐富的使用者與開發者。

然而,許多第三方工具提供了 Graphical User Interface (GUI),簡化了資料庫管理任務,例如建立表格、執行查詢以及監控效能。

常見的 GUI 選項包括 phpMyAdmin, MySQL Workbench 以及 Navicat

Installation and Setup

它為 Windows, macOS 與 Linux 等主流作業系統提供安裝套件。

安裝過程非常簡單,通常只需執行安裝程式並按照提示操作即可。

在設定過程中,使用者可以配置資料庫設定、定義存取權限以及指定儲存選項。

此外,它也可以作為 Web 開發 Stack 的一部分(例如 XAMPPWAMP)進行安裝,以建立完整的開發環境。

How to Use

為了有效地使用 MySQL,使用者應對 SQL (Structured Query Language) 以及資料庫管理原則有基本的了解。

它提供豐富的 SQL 指令集用於建立、檢索、更新與刪除數據。開發者可以使用專用的 Connector 與 Library 將 MySQL 整合至其選擇的程式語言中,例如 Java 的 MySQL Connector/J 或 Python 的 MySQL Connector/Python。

目前有大量的官方文件與線上資源可幫助使用者學習並精通 MySQL 的功能。

FAQ

Q: 我可以將現有的資料庫遷移到 MySQL Community Server 嗎?
A: 可以,它提供了將資料庫從其他 RDBMS(如 Oracle, SQL Server 和 PostgreSQL)遷移的工具與公用程式。

Q: MySQL 適合大型應用程式嗎?
A: 絕對適合!MySQL 的 Scalability 與 Performance 使其成為管理企業級應用程式數據的絕佳選擇。

Q: 免費開源版本的 MySQL 有任何限制嗎?
A: 開源版本提供了豐富的功能,但若需要進階功能(如即時分析與企業級支援),使用者可以考慮訂閱制且功能更強大的 MySQL Enterprise Edition。

Q: 我可以防止未經授權的存取來保護我的 MySQL 資料庫嗎?
A: 可以,它提供了強大的安全功能,包括 User Authentication、Access Control 與 Encryption 機制,以保護您的數據免於未經授權的存取。

Q: MySQL 支援 Stored Procedures 和 Triggers 嗎?
A: 是的,它支援 Stored Procedures, Triggers 以及 Functions,允許開發者在資料庫內執行複雜的操作並自動化任務。

Alternatives

雖然 MySQL Database Server 在 RDBMS 市場佔據主導地位,但仍有其他替代方案可供選擇,且各有其獨特功能與優勢。值得關注的替代產品包括:

Microsoft SQL Server: 針對 Windows 平台設計,提供強大的企業級功能、與 Microsoft 產品的無縫整合以及卓越的 Scalability。

PostgreSQL: 以注重標準合規性與進階功能著稱,是一款適用於複雜數據場景的強大開源 DBMS。

Oracle Database: 作為商業 RDBMS,提供極高性能、進階安全性和廣泛的管理工具,適合大型企業級應用。

SQLite: 理想的小型輕量化應用選擇,是一款 Serverless DBMS,在簡便性、可移植性與零配置部署方面表現出色。

Pricing

MySQL 主要分為兩個版本:Community Edition (免費開源) 與 Enterprise Edition (商業版,提供額外功能與支援)。

Community Edition 是大多數使用者的熱門選擇,而 Enterprise Edition 則需要訂閱,並提供量身打造的企業級進階功能。

此外,他們還提供以下產品:
  • MySQL HeatWave
  • MySQL Enterprise Edition
  • MySQL Standard Edition
  • MySQL Classic Edition
  • MySQL Cluster CGE
  • MySQL Embedded (OEM/ISV)
System Requirements

MySQL 的系統需求依據所使用的作業系統與版本而異。

一般而言,它支援 Windows, macOS 以及各種 Linux 發行版。

根據資料庫的大小與複雜程度,需要充足的磁碟空間、記憶體與處理能力。

PROS
  • 開源且免費的 Community Server Edition
  • 高效能與高 Scalability
  • 強大的安全功能
  • 豐富的文件紀錄與活躍的社群支援
  • 相容於多種程式語言
CONS
  • Command-line Interface 對初學者來說可能較具挑戰性
  • 部分進階功能僅限於 Enterprise Edition
  • 複雜的設定可能需要額外的配置與優化
Conclusion

MySQL Community Server 是一款可靠且功能豐富的 RDBMS,在管理關聯式資料庫方面享有盛名。其速度、Scalability 與通用性使其適用於從小型專案到企業級系統的各種應用。

雖然 Command-line Interface 對初學者而言可能需要一定的學習曲線,但 GUI 工具的出現簡化了資料庫管理流程。憑藉龐大的社群與詳盡的文件,它將繼續作為軟體開發生態系統中的核心工具。無論您是開發者、數據分析師還是企業主,MySQL 都能讓您高效地組織與存取數據,為您的專案與計畫帶來成功

Also Available: MySQL for Mac

Download MySQL Latest Version Why is this app published on FileHorse? (More info)

畫面截圖

5 張

更新日誌

5.0.41

Functionality added or changed:
- If you use SSL for a client connection, you can tell the client not to authenticate the server certificate by specifying neither --ssl-ca nor --ssl-capath. The server still verifies the client according to any applicable requirements established via GRANT statements for the client, and it still uses any --ssl-ca/--ssl-capath values that were passed to server at startup time. (Bug#25309)
- Prefix lengths for columns in SPATIAL indexes are no longer displayed in SHOW CREATE TABLE output. mysqldump uses that statement, so if a table with SPATIAL indexes containing prefixed columns is dumped and reloaded, the index is created with no prefixes. (The full column width of each column is indexed.) (Bug#26794)
- The output of mysql --xml and mysqldump --xml now includes a valid XML namespace. (Bug#25946)
- The mysql_create_system_tables script was removed because mysql_install_db no longer uses it in MySQL 5.0.
- The syntax for index hints has been extended to enable explicit specification that the hint applies only to join processing. See Section 13.2.7.2, Index Hint Syntax. (Bug#21174)
- Binary distributions for some platforms did not include shared libraries; now shared libraries are shipped for all platforms except AIX 5.2 64-bit. (Bug#13450, Bug#16520, Bug#26767)
- NDB Cluster: It is now possible to restore selected databases or tables using ndb_restore. (Bug#26899)
- NDB Cluster: Several options have been added for use with ndb_restore --print_data to facilitate the creation of data dump files. (Bug#26900)
- If a set function S with an outer reference S(outer_ref) cannot be aggregated in the outer query against which the outer reference has been resolved, MySQL interprets S(outer_ref) the same way that it would interpret S(const). However, standard SQL requires throwing an error in this situation. An error now is thrown for such queries if the ANSI SQL mode is enabled. (Bug#27348)
- To satisfy different user requirements, we provide several servers. mysqld is an optimized server that is a smaller, faster binary. Each package now also includes mysqld-debug, which is compiled with debugging support but is otherwise configured identically to the non-debug server.
- Added the --secure-file-priv option for mysql-test-run.pl, which limits the effect of the load_file command for mysqltest and for the LOAD DATA and SELECT ... INTO OUTFILE statements to work with files in a given directory. (Bug#18628)
- Added the hostname system variable, which the server sets at startup to the server hostname.
- The server now includes a timestamp in error messages that are logged as a result of unhandled signals (such as mysqld got signal 11 messages). (Bug#24878)
Bugs fixed:
- The patches for Bug#19370 and Bug#21789 were reverted.
- NDB Cluster: NDB tables having MEDIUMINT AUTO_INCREMENT columns were not restored correctly by ndb_restore, causing spurious duplicate key errors. This issue did not affect TINYINT, INT, or BIGINT columns with AUTO_INCREMENT. (Bug#27775)
- NDB Cluster: NDB tables with indexes whose names contained space characters were not restored correctly by ndb_restore (the index names were truncated). (Bug#27758)
- NDB Cluster: Some queries that updated multiple tables were not backed up correctly. (Bug#27748)
- NDB Cluster: Joins on multiple tables containing BLOB columns could cause data nodes run out of memory, and to crash with the error NdbObjectIdMap::expand unable to expand. (Bug#26176)
- NDB Cluster (APIs): Using NdbBlob::writeData() to write data in the middle of an existing blob value (that is, updating the value) could overwrite some data past the end of the data to be changed. (Bug#27018)
- NDB Cluster: Under certain rare circumstances, DROP TABLE or TRUNCATE of an NDB table could cause a node failure or forced cluster shutdown. (Bug#27581)
- NDB Cluster: Memory usage of a mysqld process grew even while idle. (Bug#27560)
- NDB Cluster: In some cases, AFTER UPDATE and AFTER DELETE triggers on NDB tables that referenced subject table did not see the results of operation which caused invocation of the trigger, but rather saw the row as it was prior to the update or delete operation.
This was most noticeable when an update operation used a subquery to obtain the rows to be updated. An example would be UPDATE tbl1 SET col2 = val1 WHERE tbl1.col1 IN (SELECT col3 FROM tbl2 WHERE c4 = val2) where there was an AFTER UPDATE trigger on table tbl1. In such cases, the trigger would fail to execute.
The problem occurred because the actual update or delete operations were deferred to be able to perform them later as one batch. The fix for this bug solves the problem by disabling this optimization for a given update or delete if the table has an AFTER trigger defined for this operation. (Bug#26242)
- NDB Cluster: Condition pushdown did not work with prepared statements. (Bug#26225)
- NDB Cluster: When trying to create tables on an SQL node not connected to the cluster, a misleading error message Table 'tbl_name' already exists was generated. The error now generated is Could not connect to storage engine. (Bug#18676)
- NDB Cluster: Error messages displayed when running in single user mode were inconsistent. (Bug#27021)
- NDB Cluster: On Solaris, the value of an NDB table column declared as BIT(33) was always displayed as 0. (Bug#26986)
- NDB Cluster: The output from ndb_restore --print_data was incorrect for a backup made of a database containing tables with TINYINT or SMALLINT columns. (Bug#26740)
- NDB Cluster: After entering single user mode it was not possible to alter non-NDB tables on any SQL nodes other than the one having sole access to the cluster. (Bug#25275)
- NDB Cluster: The failure of a data node while restarting could cause other data nodes to hang or crash. (Bug#27003)
- NDB Cluster: The management client command node_id STATUS displayed the message Node node_id: not connected when node_id was not the node ID of a data node. (Bug#21715)
Note
The ALL STATUS command in the cluster management client still displays status information for data nodes only. This is by design. See Section 15.7.2, Commands in the MySQL Cluster Management Client, for more information.
- NDB Cluster: It was not possible to set LockPagesInMainMemory equal to 0. (Bug#27291)
- NDB Cluster: A race condition could sometimes occur if the node acting as master failed while node IDs were still being allocated during startup. (Bug#27286)
- NDB Cluster: When a data node was taking over as the master node, a race condition could sometimes occur as the node was assuming responsibility for handling of global checkpoints. (Bug#27283)
- NDB Cluster: mysqld processes would sometimes crash under high load. (Bug#26825)
- NDB Cluster: Some values of MaxNoOfTables caused the error Job buffer congestion to occur. (Bug#19378)
- Some equi-joins containing a WHERE clause that included a NOT IN subquery caused a server crash. (Bug#27870)
- Windows binaries contained no debug symbol file. Now .map and .pdb files are included in 32-bit builds for mysqld-nt.exe, mysqld-debug.exe, and mysqlmanager.exe. (Bug#26893)
- The test for the MYSQL_OPT_SSL_VERIFY_SERVER_CERT option for mysql_options() was performed incorrectly. Also changed as a result of this bugfix: The arg option for the mysql_options() C API function was changed from char * to void *. (Bug#24121)
- The range optimizer could consume a combinatorial amount of memory for certain classes of WHERE clauses. (Bug#26624)
- Conversion of DATETIME values in numeric contexts sometimes did not produce a double (YYYYMMDDHHMMSS.uuuuuu) value. (Bug#16546)
- Passing nested row expressions with different structures to an IN predicate caused a server crash. (Bug#27484)
- SELECT DISTINCT could return incorrect results if the select list contained duplicated columns. (Bug#27659)
- A subquery could get incorrect values for references to outer query columns when it contained aggregate functions that were aggregated in outer context. (Bug#27321)
- In some cases, the optimizer preferred a range or full index scan access method over lookup access methods when the latter were much cheaper. (Bug#19372)
- Duplicates were not properly identified among (potentially) long strings used as arguments for GROUP_CONCAT(DISTINCT). (Bug#26815)
- For InnoDB, fixed consistent-read behavior of the first read statement, if the read was served from the query cache, for the READ COMMITTED isolation level. (Bug#21409)
- The decimal.h header file was incorrectly omitted from binary distributions. (Bug#27456)
- Duplicate members in SET definitions were not detected. Now they result in a warning; if strict SQL mode is enabled, an error occurs instead. (Bug#27069)
- For INSERT INTO ... SELECT where index searches used column prefixes, insert errors could occur when key value type conversion was done. (Bug#26207)
- For SHOW ENGINE INNODB STATUS, the LATEST DEADLOCK INFORMATION was not always cleared properly. (Bug#25494)
- mysqldump could crash or exhibit incorrect behavior when some options were given very long values, such as --fields-terminated-by="some very long string". The code has been cleaned up to remove a number of fixed-sized buffers and to be more careful about error conditions in memory allocation. (Bug#26346)
- Setting a column to NOT NULL with an ON DELETE SET NULL clause foreign key crashes the server. (Bug#25927)
- The values displayed for the Innodb_row_lock_time, Innodb_row_lock_time_avg, and Innodb_row_lock_time_max status variables were incorrect. (Bug#23666)
- COUNT(decimal_expr) sometimes generated a spurious truncation warning. (Bug#21976)
- With NO_AUTO_VALUE_ON_ZERO SQL mode enabled, LOAD DATA operations could assign incorrect AUTO_INCREMENT values. (Bug#27586)
- Incorrect results could be returned for some queries that contained a select list expression with IN or BETWEEN together with an ORDER BY or GROUP BY on the same expression using NOT IN or NOT BETWEEN. (Bug#27532)
- Queries containing subqueries with COUNT(*) aggregated in an outer context returned incorrect results. This happened only if the subquery did not contain any references to outer columns. (Bug#27257)
- Use of an aggregate function from an outer context as an argument to GROUP_CONCAT() caused a server crash. (Bug#27229)
- REPAIR TABLE ... USE_FRM with an ARCHIVE table deleted all records from the table. (Bug#26138)
- On Windows, debug builds of mysqld could fail with heap assertions. (Bug#25765)
- On Windows, debug builds of mysqlbinlog could fail with a memory error. (Bug#23736)
- String truncation upon insertion into an integer or year column did not generate a warning (or an error in strict mode). (Bug#26359, Bug#27176)
- In out-of-memory conditions, the server might crash or otherwise not report an error to the Windows event log. (Bug#27490)
- The temporary file-creation code was cleaned up on Windows to improve server stability. (Bug#26233)
- Out-of-memory errors for slave I/O threads were not reported. Now they are written to the error log. (Bug#26844)
- mysqldump crashed for MERGE tables if the --complete-insert (-c) option was given. (Bug#25993)
- In certain situations, MATCH ... AGAINST returned false hits for NULL values produced by LEFT JOIN when no full-text index was available. (Bug#25729)
- OPTIMIZE TABLE might fail on Windows when it attempts to rename a temporary file to the original name if the original file had been opened, resulting in loss of the .MYD file. (Bug#25521)
- GRANT statements were not replicated if the server was started with the --replicate-ignore-table or --replicate-wild-ignore-table option. (Bug#25482)
- A problem in handling of aggregate functions in subqueries caused predicates containing aggregate functions to be ignored during query execution. (Bug#24484)
- Improved out-of-memory detection when sending logs from a master server to slaves, and log a message when allocation fails. (Bug#26837)
- MBROverlaps() returned incorrect values in some cases. (Bug#24563)
- SHOW CREATE VIEW qualified references to stored functions in the view definition with the function's database name, even when the database was the default database. This affected mysqldump (which uses SHOW CREATE VIEW to dump views) because the resulting dump file could not be used to reload the database into a different database. SHOW CREATE VIEW now suppresses the database name for references to functions in the default database. (Bug#23491)
- With innodb_file_per_table enabled, attempting to rename an InnoDB table to a non-existent database caused the server to exit. (Bug#27381)
- mysql_install_db could terminate with an error after failing to determine that a system table already existed. (Bug#27022)
- For InnoDB tables having a clustered index that began with a CHAR or VARCHAR column, deleting a record and then inserting another before the deleted record was purged could result in table corruption. (Bug#26835)
- Selecting the result of AVG() within a UNION could produce incorrect values. (Bug#24791)
- An INTO OUTFILE clause is allowed only for the final SELECT of a UNION, but this restriction was not being enforced correctly. (Bug#23345)
- Duplicate entries were not assessed correctly in a MEMORY table with a BTREE primary key on a utf8 ENUM column. (Bug#24985)
- For MyISAM tables, COUNT(*) could return an incorrect value if the WHERE clause compared an indexed TEXT column to the empty string (''). This happened if the column contained empty strings and also strings starting with control characters such as tab or newline. (Bug#26231)
- For DELETE FROM tbl_name ORDER BY col_name (with no WHERE or LIMIT clause), the server did not check whether col_name was a valid column in the table. (Bug#26186)
- ALTER VIEW requires the CREATE VIEW and DROP privileges for the view. However, if the view was created by another user, the server erroneously required the SUPER privilege. (Bug#26813)
- In a view, a column that was defined using a GEOMETRY function was treated as having the LONGBLOB data type rather than the GEOMETRY type. (Bug#27300)
- With the NO_AUTO_VALUE_ON_ZERO SQL mode enabled, LAST_INSERT_ID() could return 0 after INSERT ... ON DUPLICATE KEY UPDATE. Additionally, the next rows inserted (by the same INSERT, or the following INSERT with or without ON DUPLICATE KEY UPDATE), would insert 0 for the auto-generated value if the value for the AUTO_INCREMENT column was NULL or missing. (Bug#23233)
- For a stored procedure containing a SELECT statement that used a complicated join with an ON expression, the expression could be ignored during re-execution of the procedure, yielding an incorrect result. (Bug#20492)
- When RAND() was called multiple times inside a stored procedure, the server did not write the correct random seed values to the binary log, resulting in incorrect replication. (Bug#25543)
- SOUNDEX() returned an invalid string for international characters in multi-byte character sets. (Bug#22638)
- Row equalities in WHERE clauses could cause memory corruption. (Bug#27154)
- GROUP BY on a ucs2 column caused a server crash when there was at least one empty string in the column. (Bug#27079)
- Evaluation of an IN() predicate containing a decimal-valued argument caused a server crash. (Bug#27362)
- Storing NULL values in spatial fields caused excessive memory allocation and crashes on some systems. (Bug#27164)
- mysql_stmt_fetch() did an invalid memory deallocation when used with the embedded server. (Bug#25492)
- In a MEMORY table, using a BTREE index to scan for updatable rows could lead to an infinite loop. (Bug#26996)
- The range optimizer could cause the server to run out of memory. (Bug#26625)
- The parser accepted illegal code in SQL exception handlers, leading to a crash at runtime when executing the code. (Bug#26503)
- Difficult repair or optimization operations could cause an assertion failure, resulting in a server crash. (Bug#25289)
- Increasing the width of a DECIMAL column could cause column values to be changed. (Bug#24558)
- Replication between master and slave would infinitely retry binary log transmission where the max_allowed_packet on the master was larger than that on the slave if the size of the transfer was between these two values. (Bug#23775)
- Invalid optimization of pushdown conditions for queries where an outer join was guaranteed to read only one row from the outer table led to results with too few rows. (Bug#26963)
- For INSERT ... ON DUPLICATE KEY UPDATE statements on tables containing AUTO_INCREMENT columns, LAST_INSERT_ID() was reset to 0 if no rows were successfully inserted or changed. Not changed includes the case where a row was updated to its current values, but in that case, LAST_INSERT_ID() should not be reset to 0. Now LAST_INSERT_ID() is reset to 0 only if no rows were successfully inserted or touched, whether or not touched rows were changed. (Bug#27033)
This bug was introduced by the fix for Bug#19978.
- For an INSERT statement that should fail due to a column with no default value not being assigned a value, the statement succeeded with no error if the column was assigned a value in an ON DUPLICATE KEY UPDATE clause, even if that clause was not used. (Bug#26261)
- A result set column formed by concatention of string literals was incomplete when the column was produced by a subquery in the FROM clause. (Bug#26738)
- When using the result of SEC_TO_TIME() for time value greater than 24 hours in an ORDER BY clause, either directly or through a column alias, the rows were sorted incorrectly as strings. (Bug#26672)
- If the server was started with --skip-grant-tables, Selecting from INFORMATION_SCHEMA tables causes a server crash. (Bug#26285)
- Incompatible change: INSERT DELAYED statements are not supported for MERGE tables, but the MERGE storage engine was not rejecting such statements, resulting in table corruption. Applications previously using INSERT DELAYED into MERGE table will break when upgrading to versions with this fix. To avoid the problem, remove DELAYED from such statements. (Bug#26464)
- NDB Cluster: An invalid pointer was returned following a FSCLOSECONF signal when accessing the REDO logs during a node restart or system restart. (Bug#26515)
- NDB Cluster: An inadvertent use of unaligned data caused ndb_restore to fail on some 64-bit platforms, including Sparc and Itanium-2. (Bug#26739)
- NDB Cluster: An infinite loop in an internal logging function could cause trace logs to fill up with Unknown Signal type error messages and thus grow to unreasonable sizes. (Bug#26720)
- NDB Cluster: The failure of a data node when restarting it with --initial could lead to failures of subsequent data node restarts. (Bug#26481)
- NDB Cluster: Takeover for local checkpointing due to multiple failures of master nodes was sometimes incorrect handled. (Bug#26457)
- NDB Cluster: The LockPagesInMemory parameter was not read until after distributed communication had already started between cluster nodes. When the value of this parameter was 1, this could sometimes result in data node failure due to missed heartbeats. (Bug#26454)
- NDB Cluster: Under some circumstances, following the restart of a management, all cluster data nodes would connect to it normally, but some of them subsequently failed to log any events to the management node. (Bug#26293)
- NDB Cluster: An error was produced when SHOW TABLE STATUS was used on an NDB table that had no AUTO_INCREMENT column. (Bug#21033)
- SELECT ... INTO OUTFILE with a long FIELDS ENCLOSED BY value could crash the server. (Bug#27231)
- DOUBLE values such as 20070202191048.000000 were being treated as illegal arguments by WEEK(). (Bug#23616)
- AFTER UPDATE triggers were not activated by the update part of INSERT ... ON DUPLICATE KEY UPDATE statements. (Bug#27006, Bug#27210)
This bug was introduced by the fix for Bug#19978.
- For INSERT ... ON DUPLICATE KEY UPDATE statements where some AUTO_INCREMENT values were generated automatically for inserts and some rows were updated, one auto-generated value was lost per updated row, leading to faster exhaustion of the range of the AUTO_INCREMENT column. (Bug#24432)
Because the original problem can affect replication (different values on master and slave), it is recommended that the master and its slaves be upgraded to the current version.
- IN ((subquery)), IN (((subquery))), and so forth, are equivalent to IN (subquery), which is always interpreted as a table subquery (so that it is allowed to return more than one row). MySQL was treating the over-parenthesized subquery as a single-row subquery and rejecting it if it returned more than one row. This bug primarily affected automatically generated code (such as queries generated by Hibernate), because humans rarely write the over-parenthesized forms. (Bug#21904)
- For MERGE tables defined on underlying tables that contained a short VARCHAR column (shorter than four characters), using ALTER TABLE on at least one but not all of the underlying tables caused the table definitions to be considered different from that of the MERGE table, even if the ALTER TABLE did not change the definition. (Bug#26881)
- If a thread previously serviced a connection that was killed, excessive memory and CPU use by the thread occurred if it later serviced a connection that had to wait for a table lock. (Bug#25966)
- CURDATE() is less than NOW(), either when comparing CURDATE() directly (CURDATE() < NOW() is true) or when casting CURDATE() to DATE (CAST(CURDATE() AS DATE) < NOW() is true). However, storing CURDATE() in a DATE column and comparing col_name < NOW() incorrectly yielded false. This is fixed by comparing a DATE column as DATETIME for comparisons to a DATETIME constant. (Bug#21103)
- A view on a join is insertable for INSERT statements that store values into only one table of the join. However, inserts were being rejected if the inserted-into table was used in a self-join because MySQL incorrectly was considering the insert to modify multiple tables of the view. (Bug#25122)
- Expressions involving SUM(), when used in an ORDER BY clause, could lead to out-of-order results. (Bug#25376)
- LOAD DATA INFILE sent an okay to the client before writing the binary log and committing the changes to the table had finished, thus violating ACID requirements. (Bug#26050)
- Views that used a scalar correlated subquery returned incorrect results. (Bug#26560)
- IF(expr, unsigned_expr, unsigned_expr) was evaluated to a signed result, not unsigned. This has been corrected. The fix also affects constructs of the form IS [NOT] {TRUE|FALSE}, which were transformed internally into IF() expressions that evaluated to a signed result. (Bug#24532)
For existing views that were defined using IS [NOT] {TRUE|FALSE} constructs, there is a related implication. The definitions of such views were stored using the IF() expression, not the original construct. This is manifest in that SHOW CREATE VIEW shows the transformed IF() expression, not the original one. Existing views will evaluate correctly after the fix, but if you want SHOW CREATE VIEW to display the original construct, you must drop the view and re-create it using its original definition. New views will retain the construct in their definition.
- BENCHMARK() did not work correctly for expressions that produced a DECIMAL result. (Bug#26093)
- For some values of the position argument, the INSERT() function could insert a NUL byte into the result. (Bug#26281)
- Inserting utf8 data into a TEXT column that used a single-byte character set could result in spurious warnings about truncated data. (Bug#25815)
- EXPLAIN EXTENDED did not show WHERE conditions that were optimized away. (Bug#22331)
- INSERT DELAYED statements inserted incorrect values into BIT columns. (Bug#26238)
- For expr IN(value_list), the result could be incorrect if BIGINT UNSIGNED values were used for expr or in the value list. (Bug#19342)
- When a TIME_FORMAT() expression was used as a column in a GROUP BY clause, the expression result was truncated. (Bug#20293)
- For SUBSTRING() evaluation using a temporary table, when SUBSTRING() was used on a LONGTEXT column, the max_length metadata value of the result was incorrectly calculated and set to 0. Consequently, an empty string was returned instead of the correct result. (Bug#15757)
- Use of a GROUP BY clause that referred to a stored function result together with WITH ROLLUP caused incorrect results. (Bug#25373)
- Use of a subquery containing GROUP BY and WITH ROLLUP caused a server crash. (Bug#26830)
- Use of a subquery containing a UNION with an invalid ORDER BY clause caused a server crash. (Bug#26661)
- In certain cases it could happen that deleting a row corrupted an RTREE index. This affected indexes on spatial columns. (Bug#25673)
- SSL connections failed on Windows. (Bug#26678)
- Added support for --debugger=dbx for mysql-test-run.pl and fixed support for --debugger=devenv, --debugger=DevEnv, and --debugger=/path/to/devenv. (Bug#26792)
- X() IS NULL and Y() IS NULL comparisons failed when X() and Y() returned NULL. (Bug#26038)
- UNHEX() IS NULL comparisons failed when UNHEX() returned NULL. (Bug#26537)
- The REPEAT() function did not allow a column name as the count parameter. (Bug#25197)
- On 64-bit Windows, large timestamp values could be handled incorrectly. (Bug#26536)
- In some error messages, inconsistent format specifiers were used for the translations in different languages. comp_err (the error message compiler) now checks for mismatches. (Bug#26571)
- On Windows, the server exhibited a file-handle leak after reaching the limit on the number of open file descriptors. (Bug#25222)
- A reference to a non-existent column in the ORDER BY clause of an UPDATE ... ORDER BY statement could cause a server crash. (Bug#25126)
- A multiple-row delayed insert with an auto increment column could cause duplicate entries to be created on the slave in a replication environment. (Bug#25507, Bug#26116)
- Duplicating the usage of a user variable in a stored procedure or trigger would not be replicated correctly to the slave. (Bug#25167)
- User defined variables used within stored procedures and triggers are not replicated correctly when operating in statement-based replication mode. (Bug#20141, Bug#14914)
- Loading data using LOAD DATA INFILE may not replicate correctly (due to character set incompatibilities) if the character_set_database variable is set before the data is loaded. (Bug#15126)
- DROP TRIGGER statements would not be filtered on the slave when using the replication-wild-do-table option. (Bug#24478)
- MySQL would not compile when configured using --without-query-cache. (Bug#25075)
- When using certain server SQL modes, the mysql.proc table was not created by mysql_install_db. In addition, the creation of this and other MySQL system tables was not checked for by mysql-test-run.pl. (Bug#23669, Bug#20166)
- VIEW restrictions were applied to SELECT statements after a CREATE VIEW statement failed, as though the CREATE had succeeded. (Bug#25897)
- An INSERT trigger invoking a stored routine that inserted into a table other than the one on which the trigger was defined would fail with a Table '...' doesn't exist referring to the second table when attempting to delete records from the first table. (Bug#21825)
- A stored procedure that made use of cursors failed when the procedure was invoked from a stored function. (Bug#25345)
- When nesting stored procedures within a trigger on a table, a false dependency error was thrown when one of the nested procedures contained a DROP TABLE statement. (Bug#22580)
- When attempting to call a stored procedure creating a table from a trigger on a table tbl in a database db, the trigger failed with ERROR 1146 (42S02): Table 'db.tbl' doesn't exist. However, the actual reason that such a trigger fails is due to the fact that CREATE TABLE causes an implicit COMMIT, and so a trigger cannot invoke a stored routine containing this statement. A trigger which does so now fails with ERROR 1422 (HY000): Explicit or implicit commit is not allowed in stored function or trigger, which makes clear the reason for the trigger's failure. (Bug#18914)
- Local variables in stored routines or triggers, when declared as the BIT type, were interpreted as strings. (Bug#12976)
- When a stored routine attempted to execute a statement accessing a nonexistent table, the error was not caught by the routine's exception handler. (Bug#8407, Bug#20713)
- NOW() returned the wrong value in statements executed at server startup with the --init-file option. (Bug#23240)
- Instance Manager did not remove the angel PID file on a clean shutdown. (Bug#22511)
- The server could crash if two or more threads initiated query cache resize operation at moments very close in time. (Bug#23527)
- The conditions checked by the optimizer to allow use of indexes in IN predicate calculations were unnecessarily tight and were relaxed. (Bug#20420)
- Several deficiencies in resolution of column names for INSERT ... SELECT statements were corrected. (Bug#25831)
- Indexes on TEXT columns were ignored when ref accesses were evaluated. (Bug#25971)
- The update columns for INSERT ... SELECT ... ON DUPLICATE KEY UPDATE could be assigned incorrect values if a temporary table was used to evaluate the SELECT. (Bug#16630)
- CONNECTION is no longer treated as a reserved word. (Bug#12204)
- A user-defined variable could be assigned an incorrect value if a temporary table was employed in obtaining the result of the query used to determine its value. (Bug#24010)
- Queries that used a temporary table for the outer query when evaluating a correlated subquery could return incorrect results. (Bug#23800)
- For index reads, the BLACKHOLE engine did not return end-of-file (which it must because BLACKHOLE tables contain no rows), causing some queries to crash. (Bug#19717)

歷史版本

完整清單 →