Appendix D. MySQL Change History

Appendix D. MySQL Change History

Table of Contents

D.1. Changes in release 5.0.x (Production)
D.1.1. Changes in release 5.0.23 (Not yet released)
D.1.2. Changes in release 5.0.22 (24 May 2006)
D.1.3. Changes in release 5.0.21 (02 May 2006)
D.1.4. Changes in release 5.0.20a (18 April 2006)
D.1.5. Changes in release 5.0.20 (31 March 2006)
D.1.6. Changes in release 5.0.19 (04 March 2006)
D.1.7. Changes in release 5.0.18 (21 December 2005)
D.1.8. Changes in release 5.0.17 (14 December 2005)
D.1.9. Changes in release 5.0.16 (10 November 2005)
D.1.10. Changes in release 5.0.15 (19 October 2005: Production)
D.1.11. Changes in release 5.0.14 (Not released)
D.1.12. Changes in release 5.0.13 (22 September 2005: Release Candidate)
D.1.13. Changes in release 5.0.12 (02 September 2005)
D.1.14. Changes in release 5.0.11 (06 August 2005)
D.1.15. Changes in release 5.0.10 (27 July 2005)
D.1.16. Changes in release 5.0.9 (15 July 2005)
D.1.17. Changes in release 5.0.8 (Not released)
D.1.18. Changes in release 5.0.7 (10 June 2005)
D.1.19. Changes in release 5.0.6 (26 May 2005)
D.1.20. Changes in release 5.0.5 (Not released)
D.1.21. Changes in release 5.0.4 (16 April 2005)
D.1.22. Changes in release 5.0.3 (23 March 2005: Beta)
D.1.23. Changes in release 5.0.2 (01 December 2004)
D.1.24. Changes in release 5.0.1 (27 July 2004)
D.1.25. Changes in release 5.0.0 (22 December 2003: Alpha)
D.2. Changes in MySQL Cluster
D.2.1. Changes in MySQL Cluster-5.0.7 (10 June 2005)
D.2.2. Changes in MySQL Cluster-5.0.6 (26 May 2005)
D.2.3. Changes in MySQL Cluster-5.0.5 (Not released)
D.2.4. Changes in MySQL Cluster-5.0.4 (16 April 2005)
D.2.5. Changes in MySQL Cluster-5.0.3 (23 March 2005: Beta)
D.2.6. Changes in MySQL Cluster-5.0.1 (27 July 2004)
D.2.7. Changes in MySQL Cluster-4.1.13 (15 July 2005)
D.2.8. Changes in MySQL Cluster-4.1.12 (13 May 2005)
D.2.9. Changes in MySQL Cluster-4.1.11 (01 April 2005)
D.2.10. Changes in MySQL Cluster-4.1.10 (12 February 2005)
D.2.11. Changes in MySQL Cluster-4.1.9 (13 January 2005)
D.2.12. Changes in MySQL Cluster-4.1.8 (14 December 2004)
D.2.13. Changes in MySQL Cluster-4.1.7 (23 October 2004)
D.2.14. Changes in MySQL Cluster-4.1.6 (10 October 2004)
D.2.15. Changes in MySQL Cluster-4.1.5 (16 September 2004)
D.2.16. Changes in MySQL Cluster-4.1.4 (31 August 2004)
D.2.17. Changes in MySQL Cluster-4.1.3 (28 June 2004)
D.3. Changes in MyODBC
D.3.1. Changes in MyODBC 3.51.13
D.3.2. Changes in MyODBC 3.51.12
D.3.3. Changes in MyODBC 3.51.11

This appendix lists the changes from version to version in the MySQL source code through the latest version of MySQL 5.0, which is currently MySQL 5.0.23. Starting with MySQL 5.0, we began offering a new version of the Manual for each new series of MySQL releases (5.0, 5.1, and so on). For information about changes in previous release series of the MySQL database software, see the corresponding version of this Manual. For information about legacy versions of the MySQL software through the 4.1 series, see MySQL 3.23, 4.0, 4.1 Reference Manual.

We update this section as we add new features in the 5.0 series, so that everybody can follow the development process.

Note that we tend to update the manual at the same time we make changes to MySQL. If you find a recent version of MySQL listed here that you can't find on our download page (http://dev.mysql.com/downloads/), it means that the version has not yet been released.

The date mentioned with a release version is the date of the last BitKeeper ChangeSet on which the release was based, not the date when the packages were made available. The binaries are usually made available a few days after the date of the tagged ChangeSet, because building and testing all packages takes some time.

The manual included in the source and binary distributions may not be fully accurate when it comes to the release changelog entries, because the integration of the manual happens at build time. For the most up-to-date release changelog, please refer to the online version instead.

D.1. Changes in release 5.0.x (Production)

The following changelog shows what has been done in the 5.0 tree:

  • Basic support for read-only server side cursors. For information about using cursors within stored routines, see Section 17.2.9, “Cursors”. For information about using cursors from within the C API, see Section 22.2.7.3, “mysql_stmt_attr_set().

  • Basic support for (updatable) views. See, for example, Section 19.2, “CREATE VIEW Syntax”.

  • Basic support for stored procedures and functions (SQL:2003 style). See Chapter 17, Stored Procedures and Functions.

  • Initial support for rudimentary triggers.

  • Added SELECT INTO list_of_vars, which can be of mixed (that is, global and local) types. See Section 17.2.7.3, “SELECT ... INTO Statement”.

  • Removed the update log. It is fully replaced by the binary log. If the MySQL server is started with --log-update, it is translated to --log-bin (or ignored if the server is explicitly started with --log-bin), and a warning message is written to the error log. Setting SQL_LOG_UPDATE silently sets SQL_LOG_BIN instead (or do nothing if the server is explicitly started with --log-bin).

  • Support for the ISAM storage engine has been removed. If you have ISAM tables, you should convert them before upgrading. See Section 2.11.2, “Upgrading from MySQL 4.1 to 5.0”.

  • Support for RAID options in MyISAM tables has been removed. If you have tables that use these options, you should convert them before upgrading. See Section 2.11.2, “Upgrading from MySQL 4.1 to 5.0”.

  • User variable names are now case insensitive: If you do SET @a=10; then SELECT @A; now returns 10. Case sensitivity of a variable's value depends on the collation of the value.

  • Strict mode, which in essence means that you get an error instead of a warning when inserting an incorrect value into a column. See Section 5.2.5, “The Server SQL Mode”.

  • VARCHAR and VARBINARY columns remember end space. A VARCHAR() or VARBINARY column can contain up to 65,535 characters or bytes, respectively.

  • MEMORY (HEAP) tables can have VARCHAR() columns.

  • When using a constant string or a function that generates a string result in CREATE ... SELECT, MySQL creates the result field based on the maximum length of the string or expression:

    Maximum LengthData type
    = 0CHAR(0)
    < 512VARCHAR(max_length)
    >= 512TEXT

For a full list of changes, please refer to the changelog sections for each individual 5.0.x release.

D.1.1. Changes in release 5.0.23 (Not yet released)

This is a bugfix release for the current production release family.

This section documents all changes and bug fixes that have been applied since the last official MySQL release. 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 Network (a commercial MySQL offering). For more details please see http://www.mysql.com/network/advisors.html.

Functionality added or changed:

  • NDB Cluster: The limit of 2048 ordered indexes per cluster has been lifted. There is now no upper limit on the number of ordered indexes (including AUTO_INCREMENT columns) that may be used. (Bug#14509)

  • The mysql_upgrade command has been converted from a shell script to a C program, so it is available on non-Unix systems such as Windows. This program should be run for each MySQL upgrade. See Section 5.6.2, “mysql_upgrade — Check Tables for MySQL Upgrade”.

  • Binary distributions that include SSL support now are built using yaSSL when possible.

  • Added the --ssl-verify-server-cert option to MySQL client programs. This option causes the server's Common Name value in its certificate to be verified against the hostname used when connecting to the server, and the connection is rejected if there is a mismatch. Added MYSQL_OPT_SSL_VERIFY_SERVER_CERT option for the mysql_options() C API function to enable this verification. This feature can be used to prevent man-in-the-middle attacks. Verification is disabled by default. (Bug#17208)

  • Added the ssl_ca, ssl_capath, ssl_cert, ssl_cipher, and ssl_key system variables, which display the values given via the corresponding command options. See Section 5.9.7.3, “SSL Command Options”. (Bug#19606)

  • Added the log_queries_not_using_indexes system variable. (Bug#19616)

  • Added the --angel-pid-file option to mysqlmanager for specifying the file in which the angel process records its process ID when mysqlmanager runs in daemon mode. (Bug#14106)

  • The ONLY_FULL_GROUP_BY SQL mode now also applies to the HAVING clause. That is, columns not named in the GROUP BY clause cannot be used in the HAVING clause if not used in an aggregate function. (Bug#18739)

  • SQL syntax for prepared statements now supports ANALYZE TABLE, OPTIMIZE TABLE, and REPAIR TABLE. (Bug#19308)

  • The bundled yaSSL library was upgraded to version 1.3.0. This improves handling of certain problems with SSL-related command options. (Bug#17737)

  • To prevent inadvertant loss of data, ALTER TABLE can no longer be used to change the storage engine of a table to MERGE or BLACKHOLE. (Bug#10952)

  • Added the --set-charset option to mysqlbinlog to allow the character set to be specified for processing binary log files. (Bug#18351)

  • For a table with an AUTO_INCREMENT column, SHOW CREATE TABLE now shows the next AUTO_INCREMENT value to be generated. (Bug#19025)

  • It is now possible to use NEW.var_name values within triggers as INOUT parameters to stored procedures. (Bug#14635)

Bugs fixed:

  • NDB Cluster: TEXT columns in Cluster tables having both an explicit primary key and a unque key were not correctly updated by REPLACE statements. (Bug#19906)

  • NDB Cluster: An internal formatting error caused some management client error messages to be unreadable. (Bug#20016)

  • NDB Cluster: Running management client commands while mgmd was in the process of disconnecting could cause the management server to fail. (Bug#19932)

  • NDB Cluster (NDBAPI): Update operations on blobs were not checked for illegal operations.

    Note: Read locks with blob update operations are now upgraded from read committed to read shared.

  • NDB Cluster: The management client ALL STOP command shut down mgmd processes (as well as ndbd processes). (Bug#18966)

  • NDB Cluster: LOAD DATA LOCAL failed to ignore duplicate keys in Cluster tables. (Bug#19496)

  • NDB Cluster: Repeated CREATE - INSERT - DROP operations tables could in some circumstances cause the MySQL table definition cache to become corrupt, so that some mysqld processes could access table information but others could not. (Bug#18595)

  • NDB Cluster: The mgm client command ALL CLUSTERLOG STATISTICS=15; had no effect. (Bug#20336)

  • NDB Cluster: TRUNCATE TABLE failed to reset the AUTO_INCREMENT counter. (Bug#18864)

  • NDB Cluster: SELECT ... FOR UPDATE failed to lock the selected rows. (Bug#18184)

  • NDB Cluster: The failure of a data node when preparing to commit a transaction (that is, while the node's status was CS_PREPARE_TO_COMMIT) could cause the failure of other cluster data nodes. (Bug#20185)

  • NDB Cluster: Renaming a table in such a way as to move it to to a different database failed to move the table's indexes. (Bug#19967)

  • NDB Cluster: Resources for unique indexes on Cluster table columns were incorrectly allocated, so that only one-fourth as many unique indexes as indicated by the value of UniqueHashIndexes could be created. (Bug#19623)

  • NDB Cluster: Running ALL START in the NDB management client or restarting multiple nodes simultaneously could under some circumstances cause the cluster to crash. (Bug#19930)

  • NDB Cluster: SELECT statements with a BLOB or TEXT column in the selected column list and a WHERE condition including a primary key lookup on a VARCHAR primary key produced empty result sets. Note: This issue affected the 5.0 series of MySQL Cluster releases only. (Bug#19956)

  • NDB Cluster (NDBAPI): On big-endian platforms, NdbOperation::write_attr() did not update 32-bit fields correctly. (Bug#19537)

  • NDB Cluster: Some queries having a WHERE clause of the form c1=val1 OR c2 LIKE 'val2' were not evaluated correctly. (Bug # 17421)

  • NDB Cluster: Using “stalemysqld .FRM files could cause a newly-restored cluster to fail. This situation could arise when restarting a MySQL Cluster using the --intial option while leaving connected mysqld processes running. (Bug#16875)

  • NDB Cluster: Repeated use of the SHOW and ALL STATUS commands in the ndb_mgm client could cause the mgmd process to crash. (Bug#18591)

  • NDB Cluster: An issue with ndb_mgmd prevented more than 27 mysqld processes from connecting to a single cluster at one time. (Bug#17150)

  • NDB Cluster: Data node failures could cause excessive CPU usage by ndb_mgmd. (Bug#13987)

  • NDB Cluster: TRUNCATE failed on tables having BLOB or TEXT columns with the error Lock wait timeout exceeded. (Bug#19201)

  • NDB Cluster: Stopping multiple nodes could cause node failure handling not to be completed. (Bug#19039)

  • NDB Cluster: ndbd could sometimes fail to start with the error Node failure handling not completed following a graceful restart. (Bug#18550)

  • NDB Cluster: Backups could fail for large clusters with many tables, where the number of tables approached MaxNoOfTables. (Bug#17607)

  • Nested natural joins worked executed correctly when executed as a non-prepared statement could fail with an Unknown column 'col_name' in 'field list' error when executed as a prepared statement, due to a name resolution problem. (Bug#15355)

  • GROUP BY on an expression that contained a cast to DECIMAL produced an incorrect result. (Bug#19667)

  • The max_length metadata value for columns created from CONCAT() could be incorrect when the collation of an argument differed from the collation of the CONCAT() itself. In some contexts such as UNION, this could lead to truncation of the column contents. (Bug#15962)

  • The MD5() and SHA() functions treat their arguments as case-sensitive strings. But when they are compared, their arguments were compared as case-insensitive strings, which leads to two function calls with different arguments (and thus different results) compared as being identical. This can lead to a wrong decision made in the range optimizer and thus to an incorrect result set. (Bug#15351)

  • For BOOLEAN mode full-text searches on non-indexed columns, NULL rows generated by a LEFT JOIN caused incorrect query results. (Bug#14708)

  • BIT columns in a table could cause joins that use the table to fail. (Bug#18895)

  • A UNION over more than 128 SELECT statements that use an aggregate function failed. (Bug#18175)

  • InnoDB unlocked its data directory before committing a transaction, potentially resulting in non-recoverable tables if a server crash occurred before the commit. (Bug#19727)

  • Multiple-table DELETE statements containing a subquery that selected from one of the tables being modified caused a server crash. (Bug#19225)

  • With settings of read_buffer_size >= 2G and read_rnd_buffer_size >=2G, LOAD DATA INFILE failed with no error message or caused a server crash for files larger than 2GB. (Bug#12982)

  • REPLACE statements caused activation of UPDATE triggers, not DELETE and INSERT triggers. (Bug#13479)

  • The thread for INSERT DELAYED rows was maintaining a separate AUTO_INCREMENT counter, resulting in incorrect values being assigned if DELAYED and non-DELAYED inserts were mixed. (Bug#20195)

  • mysqldump wrote an extra pair of DROP DATABASE and CREATE DATABASE statements if run with the --add-drop-database option and the database contained views. (Bug#17201)

  • On 64-bit Windows systems, REGEXP for regular expressions with exactly 31 characters did not work. (Bug#19407)

  • For ndb_mgmd, Valgrind revealed problems that were corrected: A memory leak (Bug#19318); a dependency on an uninitialized variable (Bug#20333).

  • An update that used a join of a table to itself and modified the table on both sides of the join reported the table as crashed. (Bug#18036)

  • SSL connections using yaSSL on OpenBSD could fail. (Bug#19191)

  • On Windows, multiple clients simultaneously attempting to perform ALTER TABLE operations on an InnoDB table could deadlock. (Bug#17264)

  • The fill_help_tables.sql file did not load properly if the ANSI_QUOTES SQL mode was enabled. (Bug#20542)

  • The fill_help_tables.sql file did not contain a SET NAMES 'utf8' statement to indicate its encoding. This caused problems for some settings of the MySQL character set such as big5. (Bug#20551)

  • The MySQL server startup script /etc/init.d/mysql (created from mysql.server) is now marked to ensure that the system services ypbind, nscd, ldap, and NTP are started first (if these are configured on the machine). (Bug#18810)

  • MERGE tables did not work reliably with BIT columns. (Bug#19648)

  • For a reference to a non-existent index in FORCE INDEX, the error message referred to a column, not an index. (Bug#17873)

  • Some yaSSL public function names conflicted with those from OpenSSL, causing conflicts for applications that linked against both OpenSSL and a version of libmysqlclient that was built with yaSSL support. The yaSSL public functions now are renamed to avoid this conflict. (Bug#19575)

  • CHECK TABLE temporarily cleared the AUTO_INCREMENT value. Because it runs with a read lock, other readers could perform concurrent inserts, and if so, they could get an incorrect AUTO_INCREMENT value. CHECK TABLE no longer modifies the AUTO_INCREMENT value. (Bug#19604)

  • If there is a global read lock, CREATE DATABASE, RENAME DATABASE, and DROP DATABASE could deadlock. (Bug#19815)

  • On Linux, libmysqlclient when compiled with yaSSL using the icc compiler had a spurious dependency on C++ libraries. (Bug#20119)

  • Using CONCAT(@user_var, col_name), where col_name is a column in an INFORMATION_SCHEMA table, could cause erroneous duplication of data in the query result. (Bug#19599)

  • Results from INFORMATION_SCHEMA.SCHEMATA could contain uppercase information when lower_case_table_names was not 0. (Bug#17661)

  • Grant table modifications sometimes did not refresh the in-memory tables if the hostname was '' or not specified. (Bug#16297)

  • Invalid escape sequences in option files caused MySQL programs that read them to abort. (Bug#15328)

  • InnoDB did not increment the handler_read_prev counter. (Bug#19542)

  • Race conditions on certain platforms could cause the Instance Manager to fail to initialize. (Bug#19391)

  • ALTER TABLE on a table created prior to 5.0.3 would cause table corruption if the ALTER TABLE did one of the following:

    • Change the default value of a column.

    • Change the table comment.

    • Change the table password.

    (Bug#17001)

  • An ALTER TABLE operation that does not need to copy data, when executed on a table created prior to MySQL 4.0.25, could result in a server crash for subsequent accesses to the table. (Bug#19192)

  • The binary log lacked character set information for table name when dropping temporary tables. (Bug#14157)

  • A B-TREE index on a MEMORY table erroneously reported duplicate entry error for multiple NULL values. (Bug#12873)

  • Race conditions on certain platforms could cause the Instance Manager to try to restart the same instance multiple times. (Bug#18023)

  • A CREATE TABLE statement that created a table from a materialized view did not inherit default values from the underlying table. (Bug#19089)

  • The COM_STATISTICS command was changed in 5.0.3 to display session status variable values rather than global values. This causes mysqladmin status information not to be useful for the Slow queries and Opens values. Now COM_STATISTICS displays the global values for Slow queries and Opens. (Bug#18669)

  • INFORMATION_SCHEMA.TABLES provided inconsistent info about invalid views. This could cause server crashes or result in incorrect data being returned for queries that attempt to obtain information from INFORMATION_SCHEMA tables about views using stored functions. (Bug#18282)

  • Multiple calls to a stored procedure that selects from INFORMATION_SCHEMA could cause a server crash. (Bug#17204)

  • Premature optimization of nested subqueries in the FROM clause that refer to aggregate functions could lead to incorrect results. (Bug#19077)

  • A view definition that referred to an alias in the HAVING clause could be saved in the .frm file with the alias replaced by the expression that it referred to, causing failure of subsequent SELECT * FROM view_name statements. (Bug#19573)

  • Several aspects of view privileges were being checked incorrectly. (Bug#18681, Bug#20363)

  • A view with a non-existent account in the DEFINER clause caused SHOW CREATE VIEW to fail. Now SHOW CREATE VIEW issues a warning instead. (Bug#20048)

  • A bug in NTPL threads on Linux could result in a deadlock with FLUSH TABLES WITH READ LOCK under some conditions. (Bug#20048)

  • MyISAM table deadlock was possible if one thread issued a LOCK TABLES request for write locks and then an administrative statement such as OPTIMIZE TABLE, if between the two statements another client meanwhile issued a multiple-table SELECT for some of the locked tables. (Bug#16986)

  • Subqueries that produced a BIGINT UNSIGNED value were being treated as returning a signed value. (Bug#19700)

  • The patch for Bug#17164 introduced the problem that some outer joins were incorrectly converted to inner joins. (Bug#19816)

  • BLOB or TEXT arguments to or values returned from stored functions were not copied properly if too long and could become garbled. (Bug#18587)

  • Selecting data from a MEMORY table with a VARCHAR column and a HASH index over it returned only the first row matched. (Bug#18233)

  • CREATE TABLE ... SELECT did not always produce the proper column default value in TRADITIONAL SQL mode. (Bug#17626)

  • Privilege checking on the contents of the INFORMATION_SCHEMA.VIEWS table was insufficiently restrictive. (Bug#16681)

  • The result from CONV() is a string, but was not always treated the same way as a string when converted to a real value for an arithmetic operation. (Bug#13975)

  • CREATE TABLE ... SELECT ... statements that used a stored function explicitly or implicitly (through a view) resulted in a Table not locked error. (Bug#12472, Bug#15137)

  • Within a trigger, SET used the SQL mode of the invoking statement, not the mode in effect at trigger creation time. (Bug#6951)

  • The server no longer uses a signal handler for signal 0 because it could cause a crash on some platforms. (Bug#15869)

  • Revised memory allocation for local objects within stored functions and triggers to avoid memory leak for repeated function or trigger invocation. (Bug#17260)

  • EXPLAIN ... SELECT INTO caused the client to hang. (Bug#15463)

  • Symlinking .mysql_history to /dev/null to suppress statement history saving by mysql did not work. (mysql deleted the symlink and recreated .mysql_history as a regular file, and then wrote history to it.) (Bug#16803)

  • The basedir and tmpdir system variables could not be accessed via @@var_name syntax. (Bug#1039)

  • For certain CREATE VIEW statements, the server did not detect invalid subqueries within the SELECT part. (Bug#7549)

  • The range operator failed and caused a server crash for clauses of the form tbl_name.unsigned_keypart NOT IN (negative_const, ...). (Bug#19618)

  • Returning the value of a system variable from a stored function caused a server crash. (Bug#18037)

  • Updates to a MEMORY table caused the size of BTREE indexes for the table to increase. (Bug#18160)

  • REPAIR TABLE did not restore the length for packed keys in tables created under MySQL 4.x. (Bug#17810)

  • Selecting from a view that used GROUP BY on a non-constant temporal interval (such as DATE(col) + INTERVAL TIME_TO_SEC(col) SECOND could cause a server crash. (Bug#19490)

  • An outer join of two views that was written using { OJ ... } syntax could cause a server crash. (Bug#19396)

  • LOAD_FILE() returned an error if the file did not exist, rather than NULL as it should according to the manual. (Bug#10418)

  • For certain CREATE TABLE ... SELECT statements, the selected values were truncated when inserted into the new table. (Bug#17048)

  • Use of uninitialized user variables in a subquery in the FROM clause results in bad entries in the binary log. (Bug#19136)

  • In the INFORMATION_SCHEMA.COLUMNS table, the values for the CHARACTER_MAXIMUM_LENGTH and CHARACTER_OCTET_LENGTH columns were incorrect for multi-byte character sets. (Bug#19236)

  • An entry in the mysql.proc table with an empty routine name caused access to the INFORMATION_SCHEMA.ROUTINES table to crash the server. (Bug#18177)

  • A range access optimizer heuristic was invalid, causing some queries to be much slower in MySQL 5.0 than in 4.0. (Bug#17379, Bug#18940)

  • IS_USED_LOCK() could return an incorrect connection identifier. (Bug#16501)

  • mysql displayed NULL for strings that are empty or contain only spaces. (Bug#19564)

  • Concurrent reading and writing of privilege structures could crash the server. (Bug#16372)

  • A NUL byte within a comment in a statement string caused the rest of the string not to be written to the query log, allowing logging to be bypassed. (CVE-2006-0903) (Bug#17667)

  • mysql-test-run.pl started NDB even for test cases that didn't need it. (Bug#19083)

  • SELECT DISTINCT queries sometimes returned only the last row. (Bug#18068)

  • Use of CONVERT_TZ() in a stored function or trigger (or in a stored procedure called from a stored function or trigger) caused an error. (Bug#11081)

  • Some queries were slower in 5.0 than in 4.1 because some 4.1 cost-evaluation code had not been merged into 5.0. (Bug#14292)

  • Index prefixes for utf8 VARCHAR columns did not work for UPDATE statements. (Bug#19080)

  • InnoDB does not support SPATIAL indexes, but did not prevent creation of such an index. (Bug#15860)

  • The configuration information for building the embedded server on Windows was missing a file. (Bug#18455)

  • The parser leaked memory when its stack needed to be extended. (Bug#18930)

  • When myisamchk needed to rebuild a table, AUTO_INCREMENT information was lost. (Bug#10405)

  • LOAD DATA FROM MASTER would fail when trying to load the INFORMATION_SCHEMA database from the master, because the INFORMATION_SCHEMA system database would already exist on the slave. (Bug#18607)

  • The binary log would create an incorrect DROP query when creating temporary tables during replication. (Bug#17263)

  • The IN-to-EXISTS transformation was making a reference to a parse tree fragment that was left out of the parse tree. This caused problems with prepared statements. (Bug#18492)

  • In mysqltest, --sleep=0 had no effect. Now it correctly causes sleep commands in test case files to sleep for 0 seconds. (Bug#18312)

  • Attempting to set the default value of an ENUM or SET column to NULL caused a server crash. (Bug#19145)

  • The sql_notes and sql_warnings system variables were not always displayed correctly by SHOW VARIABLES (for example, they were displayed as ON after being set to OFF). (Bug#16195)

  • The sql_big_selects system variable was not displayed by SHOW VARIABLES. (Bug#17849)

  • The system_time_zone and version_* system variables could not be accessed via SELECT @@var_name syntax. (Bug#12792, Bug#15684)

  • Flushing the compression buffer (via FLUSH TABLE) no longer increases the size of an unmodified ARCHIVE table. (Bug#19204)

D.1.2. Changes in release 5.0.22 (24 May 2006)

This is a security fix release for the previous production release family.

This release includes the security fix described later in this section and a few other changes to resolve build problems, relative to the last official MySQL release (5.0.21). 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 Network (a commercial MySQL offering). For more details please see http://www.mysql.com/network/advisors.html.

Bugs fixed:

  • Security fix: An SQL-injection security hole has been found in multi-byte encoding processing. The bug was in the server, incorrectly parsing the string escaped with the mysql_real_escape_string() C API function. (CVE-2006-2753, Bug#8378)

    This vulnerability was discovered and reported by Josh Berkus and Tom Lane as part of the inter-project security collaboration of the OSDB consortium. For more information about SQL injection, please see the following text.

    Discussion: An SQL-injection security hole has been found in multi-byte encoding processing. An SQL-injection security hole can include a situation whereby when a user supplied data to be inserted into a database, the user might inject SQL statements into the data that the server will execute. With regards to this vulnerability, when character set unaware-escaping is used (for example, addslashes() in PHP), it is possible to bypass the escaping in some multi-byte character sets (for example, SJIS, BIG5 and GBK). As a result, a function such as addslashes() is not able to prevent SQL-injection attacks. It is impossible to fix this on the server side. The best solution is for applications to use character set-aware escaping offered by a function such mysql_real_escape_string().

    However, a bug was detected in how the MySQL server parses the output of mysql_real_escape_string(). As a result, even when the character set-aware function mysql_real_escape_string() was used, SQL injection was possible. This bug has been fixed.

    Workarounds: If you are unable to upgrade MySQL to a version that includes the fix for the bug in mysql_real_escape_string() parsing, but run MySQL 5.0.1 or higher, you can use the NO_BACKSLASH_ESCAPES SQL mode as a workaround. (This mode was introduced in MySQL 5.0.1.) NO_BACKSLASH_ESCAPES enables an SQL standard compatibility mode, where backslash is not considered a special character. The result will be that queries will fail.

    To set this mode for the current connection, enter the following SQL statement:

    SET sql_mode='NO_BACKSLASH_ESCAPES';
    

    You can also set the mode globally for all clients:

    SET GLOBAL sql_mode='NO_BACKSLASH_ESCAPES';
    

    This SQL mode also can be enabled automatically when the server starts by using the command-line option --sql-mode=NO_BACKSLASH_ESCAPES or by setting sql-mode=NO_BACKSLASH_ESCAPES in the server option file (for example, my.cnf or my.ini, depending on your system).

  • The patch for Bug#8303 broke the fix for Bug#8378 and was undone. (In string literals with an escape character (\) followed by a multi-byte character that has a second byte of (\), the literal was not interpreted correctly. The next byte now is escaped, not the entire multi-byte character. This means it a strict reverse of the mysql_real_escape_string() function.)

  • The client libraries had not been compiled for position-indpendent code on Solaris-SPARC and AMD x86_64 platforms. (Bug#13159, Bug#14202, Bug#18091)

  • Running myisampack followed by myisamchk with the --unpack option would corrupt the auto_increment key. (Bug#12633)

D.1.3. Changes in release 5.0.21 (02 May 2006)

This is a bugfix release for the current production release family.

This MySQL 5.0.21 release includes the patches for recently reported security vulnerabilites in the MySQL client-server protocol. We would like to thank Stefano Di Paola for finding and reporting these to us.

This section documents all changes and bug fixes that have been applied since the last official MySQL release. 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 Network (a commercial MySQL offering). For more details please see http://www.mysql.com/network/advisors.html.

Functionality added or changed:

  • Security enhancement: Added the global max_prepared_stmt_count system variable to limit the total number of prepared statements in the server. This limits the potential for denial-of-service attacks based on running the server out of memory by preparing huge numbers of statements. The current number of prepared statements is available through the prepared_stmt_count system variable. (Bug#16365)

  • The MySQL-shared-compat-5.0.X-.i386.rpm shared compatibility RPMs no longer contain libraries for MySQL 5.1. This avoids a conflict because the 5.0 and 5.1 libraries share the same soname number. It contains libraries for 3.23, 4.0, 4.1, and 5.0. (Bug#19288)

  • Creating a table in an InnoDB database with a column name that matched the name of an internal InnoDB column (including DB_ROW_ID, DB_TRX_ID, DB_ROLL_PTR and DB_MIX_ID) would cause a crash. MySQL now returns error 1005 (cannot create table) with errno set to -1. (Bug#18934)

  • NDB Cluster: It is now possible to perform a partial start of a cluster. That is, it is now possible to bring up the cluster without running ndbd --initial on all configured data nodes first. (Bug#18606)

  • NDB Cluster: A new --nowait-nodes startup option for ndbd makes it possible to “skip” specific nodes without waiting for them to start when starting the cluster. See Section 15.6.5.2, “Command Options for ndbd.

  • NDB Cluster: It is now possible to install MySQL with Cluster support to a non-default location and change the search path for font description files using either the --basedir or --character-sets-dir options. (Previously in MySQL 5.0, ndbd searched only the default path for character sets.)

  • In result set metadata, the MYSQL_FIELD.length value for BIT columns now is reported in number of bits. For example, the value for a BIT(9) column is 9. (Formerly, the value was related to number of bytes.) (Bug#13601)

  • The default for the innodb_thread_concurrency system variable was changed to 8. (Bug#15868)

Bugs fixed:

  • Security fix: A malicious client, using specially crafted invalid login or COM_TABLE_DUMP packets was able to read uninitialized memory, which potentially, though unlikely in MySQL, could have led to an information disclosure. (CVE-2006-1516, CVE-2006-1517) Thanks to Stefano Di Paola for finding and reporting this bug.

  • Security fix: A malicious client, using specially crafted invalid COM_TABLE_DUMP packets was able to trigger an exploitable buffer overflow on the server. (CVE-2006-1518) Thanks to Stefano Di Paola for finding and reporting this bug.

  • NDB Cluster: A simultaneous DROP TABLE and table update operation utilising a table scan could trigger a node failure. (Bug#18597)

  • mysql-test-run could not be run as root. (Bug#17002)

  • MySQL-shared-compat-5.0.13-0.i386.rpm, MySQL-shared-compat-5.0.15-0.i386.rpm, MySQL-shared-compat-5.0.18-0.i386.rpm, MySQL-shared-compat-5.0.19-0.i386.rpm, MySQL-shared-compat-5.0.20-0.i386.rpm, and MySQL-shared-compat-5.0.20a-0.i386.rpm incorrectly depended on glibc 2.3 and could not be installed on a glibc 2.2 system. (Bug#16539)

  • IA-64 RPM packages for Red Hat and SuSE Linux that were built with the icc compiler incorrectly depended on icc runtime libraries. (Bug#16662)

  • After calling FLUSH STATUS, the max_used_connections variable did not increment for existing connections and connections which use the thread cache. (Bug#15933)

  • MySQL would not compile on Linux distributions that use the tinfo library. (Bug#18912)

  • Within a trigger, CONNECTION_ID() did not return the connection ID of the thread that caused the trigger to be activated. (Bug#16461)

  • The yaSSL library returned a cipher list in a manner incompatible with OpenSSL. (Bug#18399)

  • For single-SELECT union constructs of the form (SELECT ... ORDER BY order_list1 [LIMIT n]) ORDER BY order_list2, the ORDER BY lists were concatenated and the LIMIT clause was ignored. (Bug#18767)

  • CREATE VIEW statements would not be replicated to the slave if the --replicate-wild-ignore-table rule was enabled. (Bug#18715)

  • Index corruption could occur in cases when key_cache_block_size was not a multiple of myisam_block_size (for example, with key_cache_block_size=1536 and myisam_block_size=1024). (Bug#19079)

  • LAST_INSERT_ID() in a stored function or trigger returned zero. . (Bug#15728)

  • Use of CONVERT_TZ() in a view definition could result in spurious syntax or access errors. (Bug#15153)

  • UNCOMPRESS(NULL) could cause subsequent UNCOMPRESS() calls to return NULL for legal non-NULL arguments. (Bug#18643)

  • Conversion of a number to a CHAR UNICODE string returned an invalid result. (Bug#18691)

  • DELETE and UPDATE statements that used large NOT IN (value_list) clauses could use large amounts of memory. (Bug#15872)

  • Prevent recursive views caused by using RENAME TABLE on a view after creating it. (Bug#14308)

  • A LOCK TABLES statement that failed could cause MyISAM not to update table statistics properly, causing a subsequent CHECK TABLE to report table corruption. (Bug#18544)

  • For a reference to a non-existent stored function in a stored routine that had a CONTINUE handler, the server continued as though a useful result had been returned, possibly resulting in a server crash. (Bug#18787)

  • InnoDB did not use a consistent read for CREATE ... SELECT when innodb_locks_unsafe_for_binlog was set. (Bug#18350)

  • InnoDB could read a delete mark from its system tables incorrectly. (Bug#19217)

  • Corrected a syntax error in mysql-test-run.sh. (Bug#19190)

  • A missing DBUG_RETURN() caused the server to emit a spurious error message: missing DBUG_RETURN or DBUG_VOID_RETURN macro in function "open_table". (Bug#18964)

  • DROP DATABASE did not drop stored routines associated with the database if the database name was longer than 21 characters. (Bug#18344)

  • Avoid trying to include <asm/atomic.h> when it doesn't work in C++ code. (Bug#13621)

  • Executing SELECT on a large table that had been compressed within myisampack could cause a crash. (Bug#17917)

  • NDB Cluster: When attempting to create an index on a BIT or BLOB column, Error 743: Unsupported character set in table or index was returned instead of Error 906: Unsupported attribute type in index.

  • Within stored routines, usernames were parsed incorrectly if they were enclosed within quotes. (Bug#13310)

  • Casting a string to DECIMAL worked, but casting a trimmed string (using LTRIM() or RTRIM()) resulted in loss of decimal digits. (Bug#17043)

  • NDB Cluster: On slow networks or CPUs, the management client SHOW command could sometimes erroneously show all data nodes as being master nodes belonging to nodegroup 0. (Bug#15530)

  • If the second or third argument to BETWEEN was a constant expression such as '2005-09-01 - INTERVAL 6 MONTH and the other two arguments were columns, BETWEEN was evaluated incorrectly. (Bug#18618)

  • If the first argument to BETWEEN was a DATE or TIME column of a view and the other arguments were constants, BETWEEN did not perform conversion of the constants to the appropriate temporary type, resulting in incorrect evaluation. (Bug#16069)

  • Server and clients ignored the --sysconfdir option that was passed to configure. (Bug#15069)

  • NDB Cluster: In a 2-node cluster with a node failure, restarting the node with a low value for StartPartialTimeout could cause the cluster to come up partitioned (“split-brain” issue). (Bug#16447)

    A similar issue could occur when the cluster was first started with a sufficiently low value for this parameter. (Bug#18612)

  • NDB Cluster: On systems with multiple network interfaces, data nodes would get “stuck” in startup phase 2 if the interface connecting them to the management server was working on node startup while the interface interconnecting the data nodes experienced a temporary outage. (Bug#15695)

  • NDB Cluster: Unused open handlers for tables in which the metadata had changed were not properly closed. This could result in stale results from Cluster tables following an ALTER TABLE. (Bug#13228)

  • NDB Cluster: Uninitialized internal variables could lead to unexpected results. (Bug#11033, Bug#11034)

  • For InnoDB tables, an expression of the form col_name BETWEEN col_name2 - INTERVAL x DAY AND col_name2 + INTERVAL x DAY when used in a join returned incorrect results. (Bug#14360)

  • INSERT DELAYED into a view caused an infinite loop. (Bug#13683)

  • Lettercase in database name qualifiers was not consistently handled properly in queries when lower_case_table_names was set to 1. (Bug#15917)

  • The optimizer could cause a server crash or use a non-optimal subset of indexes when evaluating whether to use Index Merge/Intersection variant of index_merge optimization. (Bug#19021)

  • The presence of multiple equalities in a condition after reading a constant table could cause the optimizer not to use an index. This resulted in certain queries being much slower than in MySQL 4.1. (Bug#16504)

  • A recent change caused the mysql client not to display NULL values correctly and to display numeric columns left-justified rather than right-justified. The problems have been corrected. (Bug#18265)

  • mysql_reconnect() sent a SET NAMES statement to the server, even for pre-4.1 servers that do not understand the statement. (Bug#18830)

  • COUNT(*) on a MyISAM table could return different results for the base table and a view on the base table. (Bug#18237)

  • DELETE with LEFT JOIN for InnoDB tables could crash the server if innodb_locks_unsafe_for_binlog was enabled. (Bug#15650)

  • InnoDB failure to release an adaptive hash index latch could cause a server crash if the query cache was enabled. (Bug#15758)

  • For mysql.server, if the basedir option was specified after datadir in an option file, the setting for datadir was ignored and assumed to be located under basedir. (Bug#16240)

  • The euro sign () was not stored correctly in columns using the latin1_german1_ci or latin1_general_ci collation. (Bug#18321)

  • EXTRACT(QUARTER FROM date) returned unexpected results. (Bug#18100)

  • TRUNCATE did not reset the AUTO_INCREMENT counter for MyISAM tables when issued inside a stored procedure. (Bug#14945)

    Note: This bug did not affect InnoDB tables. Also, TRUNCATE does not reset the AUTO_INCREMENT counter for NDBCluster tables regardless of when it is called (see Bug#18864).

  • The server was always built as though --with-extra-charsets=complex had been specified. (Bug#12076)

  • A query using WHERE (column_1, column_2) IN ((value_1, value_2)[, (..., ...), ...]) would return incorrect results. (Bug#16248)

  • Queries of the form SELECT DISTINCT timestamp_column WHERE date_function(timestamp_col) = constant did not return all matching rows. (Bug#16710)

  • When running a query that contained a GROUP_CONCAT( SELECT GROUP_CONCAT(...) ), the result was NULL except in the ROLLUP part of the result, if there was one. (Bug#15560)

  • For tables created in a MySQL 4.1 installation upgraded to MySQL 5.0 and up, multiple-table updates could update only the first matching row. (Bug#16281)

  • NDB Cluster: When multiple node restarts were attempted without allowing each restart to complete, the error message returned was Array index out of bounds rather than Too many crashed replicas. (Bug#18349)

  • CASTdouble AS SIGNED INT) for large double values outside the signed integer range truncates the result to be within range, but the result sometimes had the wrong sign, and no warning was generated. (Bug#15098)

  • Updating a field value when also requesting a lock with GET_LOCK() would cause slave servers in a replication environment to terminate. (Bug#17284)

D.1.4. Changes in release 5.0.20a (18 April 2006)

This is a bugfix release for the current production release family. It replaces MySQL 5.0.20.

Changes from 5.0.20 to 5.0.20a:

  • The fix for “Command line options are ignored for mysql client” (Bug#16855) has been revoked because it introduced an incompatible change in the way the mysql command-line client selects the server to connect to. In the worst case, this might have led to a client issuing commands to a server for which they were not intended, and this must not happen. To help all users in understanding this subject, Section 4.2, “Invoking MySQL Programs” now includes additional explanation of how command options with regard to host selection.

  • The code of the yaSSL library has been improved to avoid the dependency on a C++ runtime library, so a link with pure C applications is now possible on additional (but not yet all) platforms. We are working on fixing the remaining issues.

Additional information about SSL support:

  • With version 5.0.20a, SSL support is contained in all binaries for all Unix (including Linux) and Windows platforms except AIX, HP-UX, OpenServer 6, and the RPMs specific for RHAS3/RHAS4/SLES9 on Itanium CPUs (ia64); It is also not contained in those for Novell Netware. We are trying to add these platforms in future versions.

  • Please note that the original 5.0.20 announcement included inexact wording: SSL support is “included” in both server and client, but by default not “enabled”. SSL can be enabled by passing the SSL-related options (--ssl, --ssl-key=..., --ssl-cert=..., --ssl-ca=...) when starting the server and the client or by specifying these options in an option file. For more information, see Section 5.9.7, “Using Secure Connections”.

D.1.5. Changes in release 5.0.20 (31 March 2006)

Functionality added or changed:

  • Added the --sysdate-is-now option to mysqld to enable SYSDATE() to be treated as an alias for NOW(). See Section 12.5, “Date and Time Functions”. (Bug#15101)

  • InnoDB: The InnoDB storage engine now provides a descriptive error message if ibdata file information is omitted from my.cnf. (Bug#16827)

  • The NDBCluster storage engine now supports INSERT IGNORE and REPLACE statements. Previously, these statements failed with an error. (Bug#17431)

  • Builds for Windows, Linux, and Unix (except AIX) platforms now have SSL support enabled, in the server as well as in the client libraries. Because part of the SSL code is written in C++, this does introduce dependencies on the system's C++ runtime libraries in several cases, depending on compiler specifics. (Bug#18195)

  • The syntax for CREATE PROCEDURE and CREATE FUNCTION statements now includes a DEFINER clause. The DEFINER value specifies the security context to be used when checking access privileges at routine invocation time if the routine has the SQL SECURITY DEFINER characteristic. See Section 17.2.1, “CREATE PROCEDURE and CREATE FUNCTION Syntax”, for more information.

    When mysqldump is invoked with the --routines option, it now dumps the DEFINER value for stored routines.

  • Large file support added to build for QNX platform. (Bug#17336)

  • Large file support was re-enabled for the MySQL server binary for the AIX 5.2 platform. (Bug#13571)

Bugs fixed:

  • If the WHERE condition of a query contained an OR-ed FALSE term, the set of tables whose rows cannot serve for null-complements in outer joins was determined incorrectly. This resulted in blocking possible conversions of outer joins into joins by the optimizer for such queries. (Bug#17164)

  • mysql_config returned incorrect libraries on x86_64 systems. (Bug#13158)

  • Stored routine names longer than 64 characters were silently truncated. Now the limit is properly enforced and an error occurs. (Bug#17015)

  • During conversion from one character set to ucs2, multi-byte characters with no ucs2 equivalent were converted to multiple characters, rather than to 0x003F QUESTION MARK. (Bug#15375)

  • The mysql_close() C API function leaked handles for shared-memory connections on Windows. (Bug#15846)

  • Checks for permissions on database operations could be performed in a case-insensitive manner (a user with permissions on database MYDATABASE could by accident get permissions on database myDataBase), if the privilege data were still cached from a previous check. (Bug#17279)

  • If InnoDB ran out of buffer space for row locks and adaptive hashes, the server would crash. Now InnoDB rolls back the transaction. (Bug#18238)

  • InnoDB tables with an adaptive hash blocked other queries during CHECK TABLE statements while the entire hash was checked. This could be a long time for a large hash. (Bug#17126)

  • For InnoDB tables created in MySQL 4.1 or earlier, or created in 5.0 or later with compact format, updating a row so that a long column is updated or the length of some column changes, InnoDB later would fail to reclaim the BLOB storage space if the row was deleted. (Bug#18252)

  • InnoDB had a memory leak for duplicate-key errors with tables having 90 columns or more. (Bug#18384)

  • InnoDB: The LATEST FOREIGN KEY ERROR section in the output of SHOW INNODB STATUS was sometimes formatted incorrectly, causing problems with scripts that parsed the output of this statement. (Bug#16814)

  • When using ORDER BY with a non-string column inside GROUP_CONCAT() the result's character set was converted to binary. (Bug#18281)

    See also Bug#14169.

  • SELECT ... WHERE column LIKE 'A%' when column had a key and used the latin2_czech_cs collation. (Bug#17374)

  • Complex queries with nested joins could cause a server crash. (Bug#18279)

  • The server could deadlock under heavy load while writing to the binary log. (Bug#18116)

  • A SELECT ... ORDER BY ... from a view defined using a function could crash the server. An example of such a view might be CREATE VIEW AS SELECT SQRT(c1) FROM t1. (Bug#18386)

  • A DELETE using a subquery could crash the server. (Bug#18306)

  • REPAIR TABLE, OPTIMIZE TABLE, and ALTER TABLE operations on transactional tables (or on tables of any type on Windows) could corrupt triggers associated with those tables. (Bug#18153)

  • MyISAM: Performing a bulk insert on a table referenced by a trigger would crash the table. (Bug#17764)

  • MyISAM: Keys for which the first part of the key was a CHAR or VARCHAR column using the UTF-8 character set and longer than 254 bytes could become corrupted. (Bug#17705)

  • Using ORDER BY intvar within a stored procedure (where intvar is an integer variable or expression) would crash the server. (Bug#16474)

    Note: The use of an integer i in an ORDER BY i clause for sorting the result by the ith column is deprecated (and non-standard). It should not be used in new applications. See Section 13.2.7, “SELECT Syntax”.

  • Triggers created in MySQL 5.0.16 and earlier could not be dropped after upgrading the server to 5.0.17 or later. (Bug#15921)

  • A SELECT using a function against a nested view would crash the server. (Bug#15683)

  • NDB Cluster: Certain queries using ORDER BY ... ASC in the WHERE clause could return incorrect results. (Bug#17729)

  • NDB Cluster: A timeout in the handling of an ABORT condition with more that 32 operations could yield a node failure. (Bug#18414)

  • NDB Cluster: A node restart immediately following a CREATE TABLE would fail. Important: This fix supports 2-node Clusters only. (Bug#18385)

  • NDB Cluster: In event of a node failure during a rollback, a “false” lock could be established on the backup for that node, which lock could not be removed without restarting the node. (Bug#18352)

  • NDB Cluster: The cluster created a crashed replica of a table having an ordered index — or when logging was not enabled, of a table having a table or unique index — leading to a crash of the cluster following 8 successibe restarts. (Bug#18298)

  • NDB Cluster: When replacing a failed master node, the replacement node could cause the cluster to crash from a buffer overflow if it had an excessively large amount of data to write to the cluster log. (Bug#18118)

  • NDB Cluster: If a mysql or other client could not parse the result set returned from a mysqld process acting as an SQL node in a cluster, the client would crash instead of returning the appropriate error. For example, this could happen when the client attempted to use a character set was not available to the mysqld. (Bug#17380)

  • NDB Cluster: Restarting nodes were allowed to start and join the cluster too early. (Bug#16772)

  • If a row was inserted inside a stored procedure using the parameters passed to the procedure in the INSERT statement, the resulting binlog entry was not escaped properly. (Bug#18293)

  • If InnoDB encountered a HA_ERR_LOCK_TABLE_FULL error and rolled-back a transaction, the transaction was still written to the binary log. (Bug#18283)

  • Stored procedures that call UDFs and pass local string variables caused server crashes. (Bug#17261)

  • Connecting to a server with a UCS2 default character set with a client using a non-UCS2 character set crashed the server. (Bug#18004)

  • Loading of UDFs in a statically linked MySQL caused a server crash. UDF loading is now blocked if the MySQL server is statically linked. (Bug#11835)

  • Views that incorporate tables from the INFORMATION_SCHEMA resulted in a server crash when queried. (Bug#18224)

  • A SELECT * query on an INFORMATION_SCHEMA table by a user with limited privileges resulted in a server crash. (Bug#18113)

  • Attempting to access an InnoDB table after starting the server with --skip-innodb caused a server crash. (Bug#14575)

  • InnoDB used table locks (not row locks) within stored functions. (Bug#18077)

  • Replication slaves could not replicate triggers from older servers that included no DEFINER clause in the trigger definition. Now the trigger executes with the privileges of the invoker (which on the slave is the slave SQL thread). (Bug#16266)

  • Character set conversion of string constants for UNION of constant and table column was not done when it was safe to do so. (Bug#15949)

  • The DEFINER value for stored routines was not replicated. (Bug#15963)

  • Use of stored functions with DISTINCT or GROUP BY can produce incorrect results when ORDER BY is also used. (Bug#13575)

  • Use of TRUNCATE TABLE for a TEMPORARY table on a master server was propagated to slaves properly, but slaves did not decrement the Slave_open_temp_tables counter properly. (Bug#17137)

  • SELECT COUNT(*) for a MyISAM table could return different results depending on whether an index was used. (Bug#14980)

  • A LEFT JOIN with a UNION that selects literal values could crash the server. (Bug#17366)

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

  • Updating a view that filters certain rows to set a filtered out row to be included in the table caused infinite loop. For example, if the view has a WHERE clause of salary > 100 then issuing an UPDATE statement of SET salary = 200 WHERE id = 10, caused an infinite loop. (Bug#17726)

  • Certain combinations of joins with mixed ON and USING clauses caused unknown column errors. (Bug#15229)

  • NDB Cluster: Inserting and deleting BLOB column values while a backup was in process could cause the loss of an ndbd node. (Bug#14028)

  • If the server was started with the --skip-grant-tables option, it was impossible to create a trigger or a view without explicitly specifying a DEFINER clause. (Bug#16777)

  • COUNT(DISTINCT col1, col2) and COUNT(DISTINCT CONCAT(col1, col2)) operations produced different results if one of the columns was an indexed DECIMAL column. (Bug#15745)

  • The server displayed garbage in the error message warning about bad assignments to DECIMAL columns or routine variables. (Bug#15480)

  • The server would execute stored routines that had a non-existent definer. (Bug#13198)

  • For FEDERATED tables, a SELECT statement with an ORDER BY clause did not return rows in the proper order. (Bug#17377)

  • The FORMAT() function returned an incorrect result when the client's character_set_connection value was utf8. (Bug#16678)

  • NDB Cluster: Some query cache statistics were not always correctly reported for Cluster tables. (Bug#16795)

  • Updating the value of a Unicode VARCHAR column with the result returned by a stored function would cause the insertion of ASCII characters into the column instead of Unicode, even where the function's return type was also declared as Unicode. (Bug#17615)

D.1.6. Changes in release 5.0.19 (04 March 2006)

Functionality added or changed:

  • Incompatible change: The InnoDB storage engine no longer ignores trailing spaces when comparing BINARY or VARBINARY column values. This means that (for example) the binary values 'a' and 'a ' are now regarded as unequal any time they are compared, as they are in MyISAM tables. (Bug#14189)

    See Section 11.4.2, “The BINARY and VARBINARY Types” for more information about the BINARY and VARBINARY types.

  • Several changes were made to make upgrades easier:

    • Added the mysql_upgrade program that checks all tables for incompatibilities with the current version of MySQL Server and repairs them if necessary. This program should be run for each MySQL upgrade (rather than mysql_fix_privilege_tables). See Section 5.6.2, “mysql_upgrade — Check Tables for MySQL Upgrade”.

    • Added the FOR UPGRADE option for the CHECK TABLE statement. This option checks whether tables are incompatible with the current version of MySQL Server.

    • Added the --check-upgrade to mysqlcheck that invokes CHECK TABLE with the FOR UPGRADE option.

  • NDB Cluster: The ndb_mgm