Released on 27 Aug 2007
MySQL 5.0.48 Changelog

This is a Monthly Rapid Update release of the MySQL Enterprise Server 5.0.

This section documents all changes and bugfixes that have been applied since the last last MySQL Enterprise Server release (5.0.46). If you would like to receive more fine-grained and personalized update alerts about fixes that are relevant to the version and features you use, please consider subscribing to MySQL Enterprise (a commercial MySQL offering). For more details please see


This release was withdrawn from production and is no longer available.

  • Functionality Added or Changed

  • Bugs Fixed

Functionality Added or Changed

  • If a MyISAM table is created with no DATA DIRECTORY option, the .MYD file is created in the database directory. By default, if MyISAM finds an existing .MYD file in this case, it overwrites it. The same applies to .MYI files for tables created with no INDEX DIRECTORY option. To suppress this behavior, start the server with the new --keep_files_on_create option, in which case MyISAM will not overwrite existing files and returns an error instead. (Bug #29325)

  • MySQL source distributions are now available in Zip format. (Bug #27742)

  • The EXAMPLE storage engine is now enabled by default.

Bugs Fixed

  • Incompatible Change: Failure to consider collation when comparing space characters could result in incorrect index entry order, leading to incorrect comparisons, inability to find some index values, misordered index entries, misordered ORDER BY results, or tables that CHECK TABLE reports as having corrupt indexes.

    As a result of this bug fix, indexes must be rebuilt for columns that use any of these character sets: eucjpms, euc_kr, gb2312, latin7, macce, ujis. See Checking Whether Tables or Indexes Must Be Rebuilt. (Bug #29461)

  • MySQL Cluster: Warnings and errors generated by ndb_config --config-file=file were sent to stdout, rather than to stderr. (Bug #25941)

  • MySQL Cluster: When a cluster backup was terminated using the ABORT BACKUP command in the management client, a misleading error message Backup aborted by application: Permanent error: Internal error was returned. The error message returned in such cases now reads Backup aborted by user request. (Bug #21052)

  • MySQL Cluster: Large file support did not work in AIX server binaries. (Bug #10776)

  • Replication: SHOW SLAVE STATUS failed when slave I/O was about to terminate. (Bug #34305)

  • Replication: The thread ID was not reset properly after execution of mysql_change_user(), which could cause replication failure when replicating temporary tables. (Bug #29734)

  • Replication: Operations that used the time zone replicated the time zone only for successful operations, but did not replicate the time zone for errors that need to know it. (Bug #29536)

  • Replication: INSERT DELAYED statements on a master server are replicated as non-DELAYED inserts on slaves (which is normal, to preserve serialization), but the inserts on the slave did not use concurrent inserts. Now INSERT DELAYED on a slave is converted to a concurrent insert when possible, and to a normal insert otherwise. (Bug #29152)

  • Replication: An error that happened inside INSERT, UPDATE, or DELETE statements performed from within a stored function or trigger could cause inconsistency between master and slave servers. (Bug #27417)

  • Replication: Slave servers could incorrectly interpret an out-of-memory error from the master and reconnect using the wrong binary log position. (Bug #24192)

  • Memory corruption occurred for some queries with a top-level OR operation in the WHERE condition if they contained equality predicates and other sargable predicates in disjunctive parts of the condition. (Bug #30396)

  • The server created temporary tables for filesort operations in the working directory, not in the directory specified by the tmpdir system variable. (Bug #30287)

  • The query cache does not support retrieval of statements for which column level access control applies, but the server was still caching such statements, thus wasting memory. (Bug #30269)

  • GROUP BY on BIT columns produced incorrect results. (Bug #30219)

  • Using KILL QUERY or KILL CONNECTION to kill a SELECT statement caused a server crash if the query cache was enabled. (Bug #30201)

  • Prepared statements containing CONNECTION_ID() could be written improperly to the binary log. (Bug #30200)

  • When a thread executing a DROP TABLE statement was killed, the table name locks that had been acquired were not released. (Bug #30193)

  • Use of local variables with non-ASCII names in stored procedures crashed the server. (Bug #30120)

  • On Windows, client libraries lacked symbols required for linking. (Bug #30118)

  • --myisam-recover='' (empty option value) did not disable MyISAM recovery. (Bug #30088)

  • The IS_UPDATABLE column in the INFORMATION_SCHEMA.VIEWS table was not always set correctly. (Bug #30020)

  • Statements within stored procedures ignored the value of the low_priority_updates system variable. (Bug #29963)

    References: See also Bug #26162.

  • For MyISAM tables on Windows, INSERT, DELETE, or UPDATE followed by ALTER TABLE within LOCK TABLES could cause table corruption. (Bug #29957)

  • With auto-reconnect enabled, row fetching for a prepared statement could crash after reconnect occurred because loss of the statement handler was not accounted for. (Bug #29948)

  • LOCK TABLES did not pre-lock tables used in triggers of the locked tables. Unexpected locking behavior and statement failures similar to failed: 1100: Table 'xx' was not locked with LOCK TABLES could result. (Bug #29929)

  • INSERT ... VALUES(CONNECTION_ID(), ...) statements were written to the binary log in such a way that they could not be properly restored. (Bug #29928)

  • Adding DISTINCT could cause incorrect rows to appear in a query result. (Bug #29911)

  • Using the DATE() function in a WHERE clause did not return any records after encountering NULL. However, using TRIM() or CAST() produced the correct results. (Bug #29898)

  • Very long prepared statements in stored procedures could cause a server crash. (Bug #29856)

  • If query execution involved a temporary table, GROUP_CONCAT() could return a result with an incorrect character set. (Bug #29850)

  • If one thread was performing concurrent inserts, other threads reading from the same table using equality key searches could see the index values for new rows before the data values had been written, leading to reports of table corruption. (Bug #29838)

  • Repeatedly accessing a view in a stored procedure (for example, in a loop) caused a small amount of memory to be allocated per access. Although this memory is deallocated on disconnect, it could be a problem for a long running stored procedures that make repeated access of views. (Bug #29834)

  • mysqldump produced output that incorrectly discarded the NO_AUTO_VALUE_ON_ZERO value of the sql_mode variable after dumping triggers. (Bug #29788)

  • An assertion failure occurred within yaSSL for very long keys. (Bug #29784)

    References: See also Bug #53463.

  • For MEMORY tables, the index_merge union access method could return incorrect results. (Bug #29740)

  • Comparison of TIME values using the BETWEEN operator led to string comparison, producing incorrect results in some cases. Now the values are compared as integers. (Bug #29739)

  • For a table with a DATE column date_col such that selecting rows with WHERE date_col = 'date_val 00:00:00' yielded a nonempty result, adding GROUP BY date_col caused the result to be empty. (Bug #29729)

  • In some cases, INSERT INTO ... SELECT ... GROUP BY could insert rows even if the SELECT by itself produced an empty result. (Bug #29717)

  • For the embedded server, the mysql_stmt_store_result() C API function caused a memory leak for empty result sets. (Bug #29687)

  • EXPLAIN produced Impossible where for statements of the form SELECT ... FROM t WHERE c=0, where c was an ENUM column defined as a primary key. (Bug #29661)

  • On Windows, ALTER TABLE hung if records were locked in share mode by a long-running transaction. (Bug #29644)

  • A left join between two views could produce incorrect results. (Bug #29604)

  • Certain statements with unions, subqueries, and joins could result in huge memory consumption. (Bug #29582)

  • Clients using SSL could hang the server. (Bug #29579)

  • A slave running with --log-slave-updates failed to write INSERT DELAY IGNORE statements to its binary log, resulting in different binary log contents on the master and slave. (Bug #29571)

  • An incorrect result was returned when comparing string values that were converted to TIME values with CAST(). (Bug #29555)

  • In the ascii character set, conversion of DEL (0x7F) to Unicode incorrectly resulted in QUESTION MARK (0x3F) rather than DEL. (Bug #29499)

  • A field packet with NULL fields caused a libmysqlclient crash. (Bug #29494)

  • When using a combination of HANDLER... READ and DELETE on a table, MySQL continued to open new copies of the table every time, leading to an exhaustion of file descriptors. (Bug #29474)

    References: This bug was introduced by Bug #21587.

  • On Windows, the mysql client died if the user entered a statement and Return after entering Control+C. (Bug #29469)

  • Killing an INSERT DELAYED thread caused a server crash. (Bug #29431)

  • The special zero ENUM value was coerced to the normal empty string ENUM value during a column-to-column copy. This affected CREATE ... SELECT statements and SELECT statements with aggregate functions on ENUM columns in the GROUP BY clause. (Bug #29360)

  • Optimization of queries with DETERMINISTIC stored functions in the WHERE clause was ineffective: A sequential scan was always used. (Bug #29338)

  • MyISAM corruption could occur with the cp932_japanese_ci collation for the cp932 character set due to incorrect comparison for trailing space. (Bug #29333)

  • The mysql_list_fields() C API function incorrectly set MYSQL_FIELD::decimals for some view columns. (Bug #29306)

  • InnoDB refused to start on some versions of FreeBSD with LinuxThreads. This is fixed by enabling file locking on FreeBSD. (Bug #29155)

  • A maximum of 4TB InnoDB free space was reported by SHOW TABLE STATUS, which is incorrect on systems with more than 4TB space. (Bug #29097)

  • A byte-order issue in writing a spatial index to disk caused bad index files on some systems. (Bug #29070)

  • Creation of a legal stored procedure could fail if no default database had been selected. (Bug #29050)

  • Coercion of ASCII values to character sets that are a superset of ASCII sometimes was not done, resulting in illegal mix of collations errors. These cases now are resolved using repertoire, a new string expression attribute (see String Repertoire). (Bug #28875)

  • Fast ALTER TABLE (that works without rebuilding the table) acquired duplicate locks in the storage engine. In MyISAM, if ALTER TABLE was issued under LOCK TABLE, it caused all data inserted after LOCK TABLE to disappear. (Bug #28838)

  • Tables using the InnoDB storage engine incremented AUTO_INCREMENT values incorrectly with ON DUPLICATE KEY UPDATE. (Bug #28781)

  • Starting the server with an innodb_force_recovery value of 4 did not work. (Bug #28604)

  • For InnoDB tables, MySQL unnecessarily sorted records in certain cases when the records were retrieved by InnoDB in the proper order already. (Bug #28591)

  • mysql_install_db could fail to find script files that it needs. (Bug #28585)

  • If a stored procedure was created and invoked prior to selecting a default database with USE, a No database selected error occurred. (Bug #28551)

  • On Mac OS X, shared-library installation path names were incorrect. (Bug #28544)

  • Using the --skip-add-drop-table option with mysqldump generated incorrect SQL if the database included any views. The recreation of views requires the creation and removal of temporary tables. This option suppressed the removal of those temporary tables. The same applied to --compact since this option also invokes --skip-add-drop-table. (Bug #28524)

  • A race condition in the interaction between MyISAM and the query cache code caused the query cache not to invalidate itself for concurrently inserted data. (Bug #28249)

  • Indexing column prefixes in InnoDB tables could cause table corruption. (Bug #28138)

  • Index creation could fail due to truncation of key values to the maximum key length rather than to a multiple of the maximum character length. (Bug #28125)

  • On Windows, symbols for yaSSL and taocrypt were missing from mysqlclient.lib, resulting in unresolved symbol errors for clients linked against that library. (Bug #27861)

  • Some SHOW statements and INFORMATION_SCHEMA queries could expose information not permitted by the user's access privileges. (Bug #27629)

  • Some character mappings in the ascii.xml file were incorrect.

    As a result of this bug fix, indexes must be rebuilt for columns that use the ascii_general_ci collation for columns that contain any of these characters: '`', '[', '\', ']', '~'. See Checking Whether Tables or Indexes Must Be Rebuilt. (Bug #27562)

  • A SELECT with more than 31 nested dependent subqueries returned an incorrect result. (Bug #27352)

  • INSERT INTO ... SELECT caused a crash if innodb_locks_unsafe_for_binlog was enabled. (Bug #27294)

  • FEDERATED tables had an artificially low maximum of key length. (Bug #26909)

  • After the first read of a TEMPORARY table, CHECK TABLE could report the table as being corrupt. (Bug #26325)

  • If an operation had an InnoDB table, and two triggers, AFTER UPDATE and AFTER INSERT, competing for different resources (such as two distinct MyISAM tables), the triggers were unable to execute concurrently. In addition, INSERT and UPDATE statements for the InnoDB table were unable to run concurrently. (Bug #26141)

  • ALTER DATABASE did not require at least one option. (Bug #25859)

  • Using HANDLER to open a table having a storage engine not supported by HANDLER properly returned an error, but also improperly prevented the table from being dropped by other connections. (Bug #25856)

  • When using a FEDERATED table, the value of LAST_INSERT_ID() would not correctly update the C API interface, which would affect the autogenerated ID returned both through the C API and the MySQL protocol, affecting Connectors that used the protocol or C API. (Bug #25714)

  • The server was blocked from opening other tables while the FEDERATED engine was attempting to open a remote table. Now the server does not check the correctness of a FEDERATED table at CREATE TABLE time, but waits until the table actually is accessed. (Bug #25679)

  • Several InnoDB assertion failures were corrected. (Bug #25645)

  • In a stored function or trigger, when InnoDB detected deadlock, it attempted rollback and displayed an incorrect error message (Explicit or implicit commit is not permitted in stored function or trigger). Now InnoDB returns an error under these conditions and does not attempt rollback. Rollback is handled outside of InnoDB above the function/trigger level. (Bug #24989)

  • Dropping a temporary InnoDB table that had been locked with LOCK TABLES caused a server crash. (Bug #24918)

  • On Windows, executables did not include Vista manifests. (Bug #24732)

    References: See also Bug #22563.

  • If MySQL/InnoDB crashed very quickly after starting up, it would not force a checkpoint. In this case, InnoDB would skip crash recovery at next startup, and the database would become corrupt. Now, if the redo log scan at InnoDB startup goes past the last checkpoint, crash recovery is forced. (Bug #23710)

  • SHOW INNODB STATUS caused an assertion failure under high load. (Bug #22819)

  • A statement of the form CREATE TABLE IF NOT EXISTS t1 SELECT f1() AS i failed with a deadlock error if the stored function f1() referred to a table with the same name as the to-be-created table. Now it correctly produces a message that the table already exists. (Bug #22427)

  • Read lock requests that were blocked by a pending write lock request were not permitted to proceed if the statement requesting the write lock was killed. (Bug #21281)

  • On Windows, the server used 10MB of memory for each connection thread, resulting in memory exhaustion. Now each thread uses 1MB. (Bug #20815)

  • InnoDB produced an unnecessary (and harmless) warning: InnoDB: Error: trying to declare trx to enter InnoDB, but InnoDB: it already is declared. (Bug #20090)

  • SQL_BIG_RESULT had no effect for CREATE TABLE ... SELECT SQL_BIG_RESULT ... statements. (Bug #15130)

  • mysql_setpermission tried to grant global-only privileges at the database level. (Bug #14618)

  • For the general query log, logging of prepared statements executed using the C API differed from logging of prepared statements performed with PREPARE and EXECUTE. Logging for the latter was missing the Prepare and Execute lines. (Bug #13326)

  • Backup software can cause ERROR_SHARING_VIOLATION or ERROR_LOCK_VIOLATION conditions during file operations. InnoDB now retries forever until the condition goes away. (Bug #9709)