Reference & Manual > MySQL Reference Manual > NEWS


Appendix D. MySQL Change History

Appendix D. MySQL Change History

Table of Contents

D.1. Changes in release 4.1.x (Production)
D.1.1. Changes in release 4.1.21 (Not yet released)
D.1.2. Changes in release 4.1.20 (24 May 2006)
D.1.3. Changes in release 4.1.19 (29 April 2006)
D.1.4. Changes in release 4.1.18 (27 January 2006)
D.1.5. Changes in release 4.1.17 (Not released)
D.1.6. Changes in release 4.1.16 (29 November 2005)
D.1.7. Changes in release 4.1.15 (13 October 2005)
D.1.8. Changes in release 4.1.14 (17 August 2005)
D.1.9. Changes in release 4.1.13 (15 July 2005)
D.1.10. Changes in release 4.1.12 (13 May 2005)
D.1.11. Changes in release 4.1.11 (01 April 2005)
D.1.12. Changes in release 4.1.10 (12 February 2005)
D.1.13. Changes in release 4.1.9 (11 January 2005)
D.1.14. Changes in release 4.1.8 (14 December 2004)
D.1.15. Changes in release 4.1.7 (23 October 2004: Production)
D.1.16. Changes in release 4.1.6 (10 October 2004)
D.1.17. Changes in release 4.1.5 (16 September 2004)
D.1.18. Changes in release 4.1.4 (26 August 2004: Gamma)
D.1.19. Changes in release 4.1.3 (28 June 2004: Beta)
D.1.20. Changes in release 4.1.2 (28 May 2004)
D.1.21. Changes in release 4.1.1 (01 December 2003)
D.1.22. Changes in release 4.1.0 (03 April 2003: Alpha)
D.2. Changes in release 4.0.x (Recent; still supported)
D.2.1. Changes in release 4.0.28 (Not yet released)
D.2.2. Changes in release 4.0.27 (06 May 2006)
D.2.3. Changes in release 4.0.26 (08 September 2005)
D.2.4. Changes in release 4.0.25 (05 July 2005)
D.2.5. Changes in release 4.0.24 (04 March 2005)
D.2.6. Changes in release 4.0.23 (18 December 2004)
D.2.7. Changes in release 4.0.22 (27 October 2004)
D.2.8. Changes in release 4.0.21 (06 September 2004)
D.2.9. Changes in release 4.0.20 (17 May 2004)
D.2.10. Changes in release 4.0.19 (04 May 2004)
D.2.11. Changes in release 4.0.18 (12 February 2004)
D.2.12. Changes in release 4.0.17 (14 December 2003)
D.2.13. Changes in release 4.0.16 (17 October 2003)
D.2.14. Changes in release 4.0.15 (03 September 2003)
D.2.15. Changes in release 4.0.14 (18 July 2003)
D.2.16. Changes in release 4.0.13 (16 May 2003)
D.2.17. Changes in release 4.0.12 (15 March 2003: Production)
D.2.18. Changes in release 4.0.11 (20 February 2003)
D.2.19. Changes in release 4.0.10 (29 January 2003)
D.2.20. Changes in release 4.0.9 (09 January 2003)
D.2.21. Changes in release 4.0.8 (07 January 2003)
D.2.22. Changes in release 4.0.7 (20 December 2002)
D.2.23. Changes in release 4.0.6 (14 December 2002: Gamma)
D.2.24. Changes in release 4.0.5 (13 November 2002)
D.2.25. Changes in release 4.0.4 (29 September 2002)
D.2.26. Changes in release 4.0.3 (26 August 2002: Beta)
D.2.27. Changes in release 4.0.2 (01 July 2002)
D.2.28. Changes in release 4.0.1 (23 December 2001)
D.2.29. Changes in release 4.0.0 (October 2001: Alpha)
D.3. Changes in release 3.23.x (Recent; still supported)
D.3.1. Changes in release 3.23.59 (Not yet released)
D.3.2. Changes in release 3.23.58 (11 September 2003)
D.3.3. Changes in release 3.23.57 (06 June 2003)
D.3.4. Changes in release 3.23.56 (13 March 2003)
D.3.5. Changes in release 3.23.55 (23 January 2003)
D.3.6. Changes in release 3.23.54 (05 December 2002)
D.3.7. Changes in release 3.23.53 (09 October 2002)
D.3.8. Changes in release 3.23.52 (14 August 2002)
D.3.9. Changes in release 3.23.51 (31 May 2002)
D.3.10. Changes in release 3.23.50 (21 April 2002)
D.3.11. Changes in release 3.23.49 (14 February 2002)
D.3.12. Changes in release 3.23.48 (07 February 2002)
D.3.13. Changes in release 3.23.47 (27 December 2001)
D.3.14. Changes in release 3.23.46 (29 November 2001)
D.3.15. Changes in release 3.23.45 (22 November 2001)
D.3.16. Changes in release 3.23.44 (31 October 2001)
D.3.17. Changes in release 3.23.43 (04 October 2001)
D.3.18. Changes in release 3.23.42 (08 September 2001)
D.3.19. Changes in release 3.23.41 (11 August 2001)
D.3.20. Changes in release 3.23.40 (18 July 2001)
D.3.21. Changes in release 3.23.39 (12 June 2001)
D.3.22. Changes in release 3.23.38 (09 May 2001)
D.3.23. Changes in release 3.23.37 (17 April 2001)
D.3.24. Changes in release 3.23.36 (27 March 2001)
D.3.25. Changes in release 3.23.35 (15 March 2001)
D.3.26. Changes in release 3.23.34a (11 March 2001)
D.3.27. Changes in release 3.23.34 (10 March 2001)
D.3.28. Changes in release 3.23.33 (09 February 2001)
D.3.29. Changes in release 3.23.32 (22 January 2001)
D.3.30. Changes in release 3.23.31 (17 January 2001: Production)
D.3.31. Changes in release 3.23.30 (04 January 2001)
D.3.32. Changes in release 3.23.29 (16 December 2000)
D.3.33. Changes in release 3.23.28 (22 November 2000: Gamma)
D.3.34. Changes in release 3.23.27 (24 October 2000)
D.3.35. Changes in release 3.23.26 (18 October 2000)
D.3.36. Changes in release 3.23.25 (29 September 2000)
D.3.37. Changes in release 3.23.24 (08 September 2000)
D.3.38. Changes in release 3.23.23 (01 September 2000)
D.3.39. Changes in release 3.23.22 (31 July 2000)
D.3.40. Changes in release 3.23.21 (04 July 2000)
D.3.41. Changes in release 3.23.20 (28 June 2000: Beta)
D.3.42. Changes in release 3.23.19
D.3.43. Changes in release 3.23.18 (11 June 2000)
D.3.44. Changes in release 3.23.17 (07 June 2000)
D.3.45. Changes in release 3.23.16 (16 May 2000)
D.3.46. Changes in release 3.23.15 (08 May 2000)
D.3.47. Changes in release 3.23.14 (09 April 2000)
D.3.48. Changes in release 3.23.13 (14 March 2000)
D.3.49. Changes in release 3.23.12 (07 March 2000)
D.3.50. Changes in release 3.23.11 (16 February 2000)
D.3.51. Changes in release 3.23.10 (30 January 2000)
D.3.52. Changes in release 3.23.9 (29 January 2000)
D.3.53. Changes in release 3.23.8 (02 January 2000)
D.3.54. Changes in release 3.23.7 (10 December 1999)
D.3.55. Changes in release 3.23.6 (15 December 1999)
D.3.56. Changes in release 3.23.5 (20 October 1999)
D.3.57. Changes in release 3.23.4 (28 September 1999)
D.3.58. Changes in release 3.23.3 (13 September 1999)
D.3.59. Changes in release 3.23.2 (09 August 1999)
D.3.60. Changes in release 3.23.1 (08 July 1999)
D.3.61. Changes in release 3.23.0 (05 July 1999: Alpha)
D.4. Changes in InnoDB
D.4.1. Changes in MySQL/InnoDB-4.0.21, September 10, 2004
D.4.2. Changes in MySQL/InnoDB-4.1.4, August 31, 2004
D.4.3. Changes in MySQL/InnoDB-4.1.3, June 28, 2004
D.4.4. Changes in MySQL/InnoDB-4.1.2, May 30, 2004
D.4.5. Changes in MySQL/InnoDB-4.0.20, May 18, 2004
D.4.6. Changes in MySQL/InnoDB-4.0.19, May 4, 2004
D.4.7. Changes in MySQL/InnoDB-4.0.18, February 13, 2004
D.4.8. Changes in MySQL/InnoDB-5.0.0, December 24, 2003
D.4.9. Changes in MySQL/InnoDB-4.0.17, December 17, 2003
D.4.10. Changes in MySQL/InnoDB-4.1.1, December 4, 2003
D.4.11. Changes in MySQL/InnoDB-4.0.16, October 22, 2003
D.4.12. Changes in MySQL/InnoDB-3.23.58, September 15, 2003
D.4.13. Changes in MySQL/InnoDB-4.0.15, September 10, 2003
D.4.14. Changes in MySQL/InnoDB-4.0.14, July 22, 2003
D.4.15. Changes in MySQL/InnoDB-3.23.57, June 20, 2003
D.4.16. Changes in MySQL/InnoDB-4.0.13, May 20, 2003
D.4.17. Changes in MySQL/InnoDB-4.1.0, April 3, 2003
D.4.18. Changes in MySQL/InnoDB-3.23.56, March 17, 2003
D.4.19. Changes in MySQL/InnoDB-4.0.12, March 18, 2003
D.4.20. Changes in MySQL/InnoDB-4.0.11, February 25, 2003
D.4.21. Changes in MySQL/InnoDB-4.0.10, February 4, 2003
D.4.22. Changes in MySQL/InnoDB-3.23.55, January 24, 2003
D.4.23. Changes in MySQL/InnoDB-4.0.9, January 14, 2003
D.4.24. Changes in MySQL/InnoDB-4.0.8, January 7, 2003
D.4.25. Changes in MySQL/InnoDB-4.0.7, December 26, 2002
D.4.26. Changes in MySQL/InnoDB-4.0.6, December 19, 2002
D.4.27. Changes in MySQL/InnoDB-3.23.54, December 12, 2002
D.4.28. Changes in MySQL/InnoDB-4.0.5, November 18, 2002
D.4.29. Changes in MySQL/InnoDB-3.23.53, October 9, 2002
D.4.30. Changes in MySQL/InnoDB-4.0.4, October 2, 2002
D.4.31. Changes in MySQL/InnoDB-4.0.3, August 28, 2002
D.4.32. Changes in MySQL/InnoDB-3.23.52, August 16, 2002
D.4.33. Changes in MySQL/InnoDB-4.0.2, July 10, 2002
D.4.34. Changes in MySQL/InnoDB-3.23.51, June 12, 2002
D.4.35. Changes in MySQL/InnoDB-3.23.50, April 23, 2002
D.4.36. Changes in MySQL/InnoDB-3.23.49, February 17, 2002
D.4.37. Changes in MySQL/InnoDB-3.23.48, February 9, 2002
D.4.38. Changes in MySQL/InnoDB-3.23.47, December 28, 2001
D.4.39. Changes in MySQL/InnoDB-4.0.1, December 23, 2001
D.4.40. Changes in MySQL/InnoDB-3.23.46, November 30, 2001
D.4.41. Changes in MySQL/InnoDB-3.23.45, November 23, 2001
D.4.42. Changes in MySQL/InnoDB-3.23.44, November 2, 2001
D.4.43. Changes in MySQL/InnoDB-3.23.43, October 4, 2001
D.4.44. Changes in MySQL/InnoDB-3.23.42, September 9, 2001
D.4.45. Changes in MySQL/InnoDB-3.23.41, August 13, 2001
D.4.46. Changes in MySQL/InnoDB-3.23.40, July 16, 2001
D.4.47. Changes in MySQL/InnoDB-3.23.39, June 13, 2001
D.4.48. Changes in MySQL/InnoDB-3.23.38, May 12, 2001
D.5. Changes in MySQL Cluster
D.5.1. Changes in MySQL Cluster-5.0.7 (10 June 2005)
D.5.2. Changes in MySQL Cluster-5.0.6 (26 May 2005)
D.5.3. Changes in MySQL Cluster-5.0.5 (Not released)
D.5.4. Changes in MySQL Cluster-5.0.4 (16 April 2005)
D.5.5. Changes in MySQL Cluster-5.0.3 (23 March 2005: Beta)
D.5.6. Changes in MySQL Cluster-5.0.1 (27 July 2004)
D.5.7. Changes in MySQL Cluster-4.1.13 (15 July 2005)
D.5.8. Changes in MySQL Cluster-4.1.12 (13 May 2005)
D.5.9. Changes in MySQL Cluster-4.1.11 (01 April 2005)
D.5.10. Changes in MySQL Cluster-4.1.10 (12 February 2005)
D.5.11. Changes in MySQL Cluster-4.1.9 (13 January 2005)
D.5.12. Changes in MySQL Cluster-4.1.8 (14 December 2004)
D.5.13. Changes in MySQL Cluster-4.1.7 (23 October 2004)
D.5.14. Changes in MySQL Cluster-4.1.6 (10 October 2004)
D.5.15. Changes in MySQL Cluster-4.1.5 (16 September 2004)
D.5.16. Changes in MySQL Cluster-4.1.4 (31 August 2004)
D.5.17. Changes in MySQL Cluster-4.1.3 (28 June 2004)
D.6. Changes in MyODBC
D.6.1. Changes in MyODBC 3.51.13
D.6.2. Changes in MyODBC 3.51.12
D.6.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 4.1.

We are working actively on MySQL 4.1 and 5.0, and provide only critical bugfixes for MySQL 4.0. We update this section as we add new features, so that everybody can follow the development.

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 4.1.x (Production)

Version 4.1 of the MySQL server includes many enhancements and new features. Binaries for this version are available for download at http://dev.mysql.com/downloads/mysql-4.1.html.

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

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

This is a bugfix release for the recent 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:

  • For spatial data types, the server formerly returned these as VARSTRING values with a binary collation. Now the server returns spatial values as BLOB values. (Bug#10166)

  • 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)

  • The mysqldumpslow script has been moved from client RPM packages to server RPM packages. This corrects a problem where mysqldumpslow could not be used with a client-only RPM install, because it depends on my_print_defaults which is in the server RPM. (Bug#20216)

Bugs fixed:

  • For SELECT ... FOR UPDATE statements that used DISTINCT or GROUP BY over all key parts of a unique index (or primary key), the optimizer unnecessarily created a temporary table, thus losing the linkage to the underlying unique index values. This caused a Result set not updatable error. (The temporary table is unnecessary because under these circumstances the distinct or grouped columns must also be unique.) (Bug#16458)

  • Concatenating the results of multiple constant subselects produced incorrect results. (Bug#16716)

  • The use of MIN() and MAX() on columns with a partial index produced incorrect results in some queries. (Bug#18206)

  • Use of MIN() or MAX() with GROUP BY on a ucs2 column could cause a server crash. (Bug#20076)

  • INSERT INTO ... SELECT ... LIMIT 1 could be slow because the LIMIT was ignored when selecting candidate rows. (Bug#9676)

  • NDB Cluster: When attempting to restart the cluster following a data import, the cluster would fail during Phase 4 of the restart with Error 2334: Job buffer congestion. (Bug#20774)

  • NDB Cluster: A node failure during a scan could sometime cause the node to crash when restarting too quickly following the failure. (Bug#20197)

  • NDB Cluster: It was possible to use port numbers greater than 65535 for ServerPort in the config.ini file. (Bug#19164)

  • The omission of leading zeros in dates could lead to erroneous results when these were compared with the output of certain date and time functions. (Bug#16377)

  • Certain queries having a WHERE clause that included conditions on multi-part keys with more than 2 key parts could produce incorrect results and send [Note] Use_count: Wrong count for key at... messages to STDERR. (Bug#16168)

  • An invalid comparison between keys in partial indexes over multi-byte character fields could lead to incorrect result sets if the selected query execution plan used a range scan by a partial index over a UTF8 character field. This also caused incorrect results under similar circumstances with many other character sets. (Bug#14896)

  • NDB Cluster: The cluster's data nodes would fail while trying to load data when NoOfFrangmentLogFiles was equal to 1. (Bug#19894)

  • NDB Cluster: A problem with error handling when ndb_use_exact_count was enabled could lead to incorrect values returned from queries using COUNT(). A warning is now returned in such cases. (Bug#19202)

  • 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 (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)

  • A cast problem caused incorrect results for prepared statements that returned float values when MySQL was compiled with gcc 4.0. (Bug#19694)

  • Improper character set initialization in the embedded server could result in a server crash. (Bug#20318)

  • Some queries that used ORDER BY and LIMIT performed quickly in MySQL 3.23, but slowly in MySQL 4.x/5.x due to an optimizer problem. (Bug#4981)

  • Queries using an indexed column as the argument for the MIN() and MAX() functions following an ALTER TABLE .. DISABLE KEYS statement returned Got error 124 from storage engine until ALTER TABLE ... ENABLE KEYS was run on the table. (Bug#20357)

  • A number of dependency issues in the RPM bench and test packages caused installation of these packages to fail. (Bug#20078)

  • 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)

  • 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)

  • The ARCHIVE storage engine does not support TRUNCATE TABLE, but the server was not returning an appropriate error when truncation of an ARCHIVE table was attempted. (Bug#15558)

  • 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)

  • 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)

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

  • In a multiple-row INSERT statement, LAST_INSERT_ID() should return the same value for each row. However, in some cases, the value could change if the table being inserted into had its own AUTO_INCREMENT column. (Bug#6880)

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

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

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

  • Slave SQL thread cleanup was not handled properly on Mac OS X when a statement was killed, resulting in a slave crash. (Bug#16900)

  • mysqldump did not respect the order of tables named with the --tables option. (Bug#18536)

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

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

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

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

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

  • A statement containing GROUP BY and HAVING clauses could return incorrect results when the HAVING clause contained logic that returned FALSE for every row. (Bug#14927)

  • MONTHNAME(STR_TO_DATE(NULL, '%m')) could cause a server crash. (Bug#18501)

  • The ref optimizer could choose the ref_or_null access method in cases where it was not applicable. This could cause inconsistent EXPLAIN or SELECT results for a given statement. (Bug#16798)

  • ANALYZE TABLE for TEMPORARY tables had no effect. (Bug#15225)

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

  • No error message was being issued for storage engines that do not support ALTER TABLE. Now an ER_NOT_SUPPORTED_YET error occurs. (Bug#7643)

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

D.1.2. Changes in release 4.1.20 (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 (4.1.19). 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 4.1.19 (29 April 2006)

This 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.

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-4.1.X-.i386.rpm shared compatibility RPMs no longer contain libraries for MySQL 5.0 and up. It contains libraries for 3.23, 4.0, and 4.1.1. (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)

  • InnoDB now caches a list of unflushed files instead of scanning for unflushed files during a table flush operation. This improves performance when --innodb-file-per-table is set on a system with a large number of InnoDB tables. (Bug#15653)

  • New charset command added to mysql command-line client. By typing charset name or \C name (such as \C UTF8), the client character set can be changed without reconnecting. (Bug#16217)

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

  • When using the GROUP_CONCAT() function where the group_concat_max_len system variable was greater than 512, the type of the result was BLOB only if the query included an ORDER BY clause; otherwise the result was a VARCHAR.

    The result type of the GROUP_CONCAT() function is now VARCHAR only if the value of the group_concat_max_len system variable is less than or equal to 512. Otherwise, this function returns a BLOB. (Bug#14169)

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.

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

  • MySQL-shared-compat-4.1.15-0.i386.rpm, MySQL-shared-compat-4.1.16-0.i386.rpm, and MySQL-shared-compat-4.1.18-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)

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

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

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

  • 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)

  • 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)

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

  • 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)

  • 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)

  • A call to MIN() with a CASE expression as its argument could return a non-minimum value. (Bug#17896)

  • 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)

  • 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: 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)

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

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

  • 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 share-memory connections on Windows. (Bug#15846)

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

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

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

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

  • The -lmtmalloc library was removed from the output of mysql_config on Solaris, as it caused problems when building DBD::mysql (and possibly other applications) on that platform that tried to use dlopen() to access the client library. (Bug#18322)

  • 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)

  • 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. (Bug#15098)

  • SET value definitions containing commas were not rejected. Now a definition such as SET('a,b','c,d') results in an error. (Bug#15316)

  • 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)

  • 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: Restarting nodes were allowed to start and join the cluster too early. (Bug#16772)

  • 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)

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

  • 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)

  • 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)

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

  • Security Improvement: GRANTs to users with wildcards in their host information could be erroneously applied to similar users with the same username and similar wildcards. For example, a privilege granted to foo@% are also applied to user foo@192.%. (Bug#14385)

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

  • Setting the myisam_repair_threads system variable to a value larger than 1 could cause corruption of large MyISAM tables. (Bug#11527)

  • Security improvement: In grant table comparisons, improper use of a latin1 collation caused some hostname matches to be true that should have been false. Thanks to Deomid Ryabkov for finding this bug and proposing a solution. (Bug#15756)

  • NDB Cluster: ndb_delete_all would run out of memory on tables containing BLOB columns. (Bug#16693)

  • mysqldump tried to dump data from a view. (In MySQL 4.1, this applies when connecting to a server from MySQL 5.0 or higher.) (Bug#16389)

  • NDB Cluster: An UPDATE with an inner join failed to match any records if both tables in the join did not have a primary key. (Bug#17257)

  • NDB Cluster: A DELETE with a join in the WHERE clause failed to retrieve any records if both tables in the join did not have a primary key. (Bug#17249)

  • NDB Cluster: In some cases, LOAD DATA INFILE did not load all data into NDB tables. (Bug#17081)

  • NDB Cluster: The REDO log would become corrupted (and thus unreadable) in some circumstances, due to a failure in the query handler. (Bug#17295)

  • NDB Cluster: No error message was generated for setting NoOfFragmentLogFiles too low. (Bug#13966)

  • NDB Cluster: No error message was generated for setting MaxNoOfAttributes too low. (Bug#13965)

  • Binary distributions for Solaris contained files with group ownership set to the non-existing wheel group. Now the bin group is used. (Bug#15562)

  • Killing a long-running query containing a subquery could cause a server crash. (Bug#14851)

  • Repeated invocation of my_init() and my_end() caused corruption of character set data and connection failure. (Bug#6536)

  • A FULLTEXT query in a prepared statement could result in unexpected behavior. (Bug#14496)

  • A FULLTEXT query in a UNION could result in unexpected behavior. (Bug#16893)

  • Server crash when dropping InnoDB constraints named TABLENAME_ibfk_0. (Bug#16387)

  • Corrected race condition when dropping the adaptive hash index for a B-tree page in InnoDB. (Bug#16582)

  • LOAD DATA FROM MASTER produced invalid warnings and Packet out of order errors when the database already existed on the slave. (Bug#15302)

  • A key on a MEMORY table would sometimes fail to match a row. (Bug#12796)

  • MYSQL_STMT objects were not preserved following a connection reset. Attempting to operate on them afterwards caused the server to crash. (Bug#12744)

D.1.4. Changes in release 4.1.18 (27 January 2006)

Functionality added or changed:

  • NDB Cluster: More descriptive warnings are now issued when inappropriate logging parameters are set in config.ini. (Formerly, the warning issued was simply Could not add logfile destination .) (Bug#11331)

  • libmysqlclient now uses versioned symbols with GNU ld. (Bug#3074)

Bugs fixed:

  • The length of a VARCHAR() column that used the utf8 character set would increase each time the table was re-created in a stored procedure or prepared statement, eventually causing the CREATE TABLE statement to fail. (Bug#13134)

  • RPM packages had an incorrect zlib dependency. (Bug#15223)

  • STR_TO_DATE(1,NULL) caused a server crash. (CVE-2006-3081, Bug#15828)

  • The --replicate-do and --replicate-ignore options were not being enforced on multiple-table statements. (Bug#15699, Bug#16487)

  • Running out of diskspace in the location specified by the tmpdir option resulted in incorrect error message. (Bug#14634)

  • Test suite func_math test returned warnings when server not compiled with InnoDB support. (Bug#15429)

  • The MBROverlaps GIS function returned incorrect results. (Bug#14320)

  • A CREATE TABLE ... SELECT ... on an equation involving DOUBLE values could result in the table being created with columns too small to hold the equation result. (Bug#9855)

  • UPDATE statement crashed multi-byte character set FULLTEXT index if update value was almost identical to initial value only differing in some spaces being changed to &nbsp;. (Bug#16489)

  • Single table UPDATE statements without ORDER BY clauses which updated the same indexed column that was being filtered on were optimized with a full index scan instead of a more appropriate index range scan. (Bug#15935)

  • A prepared statement created from a SELECT ... LIKE query (such as PREPARE stmt1 FROM 'SELECT col_1 FROM tedd_test WHERE col_1 LIKE ?';) would begin to produce erratic results after being executed repeatedly numerous (thousands) of times. (Bug#12734)

D.1.5. Changes in release 4.1.17 (Not released)

Functionality added or changed:

  • In the latin5_turkish_ci collation, the order of the characters A WITH CIRCUMFLEX, I WITH CIRCUMLEX, and U WITH CIRCUMFLEX was changed. If you have used these characters in any indexed columns, you should rebuild those indexes. (Bug#13421)

  • Support files for compiling with Visual Studio 6 have been removed. (Bug#15094)

  • Internal sha1_result function renamed to mysql_sha1_result to prevent conflicts with other projects. (Bug#13944)

Bugs fixed:

  • CAST(... AS TIME) operations returned different results when using versus not using prepared-statement protocol. (Bug#15805)

  • Performing a RENAME TABLE on an InnoDB table when the server is started with the --innodb-file-per-table and the data directory is a symlink caused a server crash. (Bug#15991)

  • Characters in the gb2312 and euckr character sets which did not have Unicode mappings were truncated. (Bug#15377)

  • Piping the fill_help_tables.sql file into mysqld resulted in a syntax error. (Bug#15965)

  • NDBCluster: Upon the completion of a scan where a key request remained outstanding on the primary replica and a starting node died, the scan did not terminate. This caused incompleted error handling of the failed node. (Bug#15908)

  • Using CAST() to convert values with long fractional and/or exponent parts to TIME returned wrong results. (Bug#12440)

  • An INSERT ... SELECT statement between tables in a MERGE set can return errors when statement involves insert into child table from merge table or vice-versa. (Bug#5390)

  • Certain permission management statements could create a NULL hostname for a user, resulting in a server crash. (Bug#15598)

  • For InnoDB tables, using a column prefix for a utf8 column in a primary key caused Cannot find record errors when attempting to locate records. (Bug#14056)

  • Certain CREATE TABLE ... AS ... statements involving ENUM columns could cause server crash. (Bug#12913)

  • Using an aggregate function as the argument for a HAVING clause would result in the aggregate function always returning FALSE. (Bug#14274)

  • The COALESCE() function truncated data in a TINYTEXT column. (Bug#15581)

  • InnoDB: Comparison of indexed VARCHAR CHARACTER SET ucs2 COLLATE ucs2_bin columns using LIKE could fail. (Bug#14583)

  • Issuing a DROP USER command could cause some users to encounter a hostname is not allowed to connect to this MySQL server error. (Bug#15775)

  • Access Denied error could be erroneously returned with specific grant combinations under high load. (Bug#7209)

  • Symbolic links did not function properly on Windows platforms. (Bug#14960, Bug#14310)

  • BDB: A DELETE, INSERT, or UPDATE of a BDB table could cause the server to crash where the query contained a subquery using an index read. (Bug#15536)

  • DELETE could report full-text index corruption (Invalid key for table ...) if the index was built with repair-by-sort, the data in the full-text index used UCA collation, and some word appeared in the data terminated by a 0xC2A0 character as well as by other non-letter characters. (Bug#11336)

  • A race condition when creating temporary files caused a deadlock on Windows with threads in Opening tables or Waiting for table states. (Bug#12071)

  • InnoDB: If FOREIGN_KEY_CHECKS was 0, InnoDB allowed inconsistent foreign keys to be created. (Bug#13778)

  • NDB Cluster: A memory leak occurred when performing ordered index scans using indexes a columns larger than 32 bytes, which would eventually lead to the forced shutdown of all mysqld server processes used with the cluster. (Bug#13078)

  • NDB Cluster: Under some circumstances, it was possible for a restarting node to undergo a forced shutdown. (Bug#15632)

  • NDB Cluster: If an abort by the Transaction Coordinator timed out, the abort condition was incorrectly handled, causing the transacviton record to be released prematurely. (Bug#15685)

  • NDB Cluster: A node which failed during cluster startup was sometimes not removed from the internal list of active nodes. (Bug#15587)

  • NDB Cluster: There was a small window for a node failure to occur during a backup without an error being reported. (Bug#15425)

  • Multiple-table update operations were counting updates and not updated rows. As a result, if a row had several updates it was counted several times for the “rows matched” value but updated only once. (Bug#15028)

  • SELECT queries that began with an opening parenthesis were not being placed in the query cache. (Bug#14652)

D.1.6. Changes in release 4.1.16 (29 November 2005)

Functionality added or changed:

  • The CHAR() function now takes an optional USING charset clause that may be used to produce a result in a specific character set rather than in the connection character set.

  • MySQL 4.1 now supports character set conversion for seven additional cp950 characters into the big5 character set: 0xF9D6, 0xF9D7, 0xF9D8, 0xF9D9, 0xF9DA, 0xF9DB, and 0xF9DC. Note: If you move data containing these additional characters to an older MySQL installation which does not support them, you may encounter errors. (Bug#12476)

  • NDBCluster: The perror utility included with the MySQL-Server RPM now provides support for the --ndb option, and so can be used to obtain error message text for MySQL Cluster error codes. (Bug#13740)

  • When executing single-table UPDATE or DELETE queries containing an ORDER BY ... LIMIT N clause, but not having any WHERE clause, MySQL can now take advantage of an index to read the first N rows in the ordering specified in the query. If an index is used, only the first N records will be read, as opposed to scanning the entire table. (Bug#12915)

  • The MySQL-server RPM now explicitly assigns the mysql system user to the mysql user group during the postinstallation process. This corrects an issue with upgrading the server on some Linux distributions whereby a previously existing mysql user was not changed to the mysql group, resulting in wrong groups for files created following the installation. (Bug#12823)

  • When a date column is set NOT NULL and contains 0000-00-00, it will be updated for UPDATE statements that contains columnname IS NULL in the WHERE clause. (Bug#14186)

Bugs fixed:

  • NDB Cluster: REPLACE failed when attempting to update a primary key value in a Cluster table. (Bug#14007)

  • When the DATE_FORMAT() function appeared in both the SELECT and ORDER BY clauses of a query but with arguments that differ by case (i.e. %m and %M), incorrect sorting may have occurred. (Bug#14016)

  • Make failed when attempting to build MySQL in different directory than source. (Bug#11827)

  • PROCEDURE ANALYSE() could suggest a data type with a negative display width. (Bug#10716)

  • InnoDB: During replication, There was a failure to record events in the binary log that still occurred even in the event of a ROLLBACK. For example, this sequence of commands:

    BEGIN;
    CREATE TEMPORARY TABLE t1 (a INT) ENGINE=INNODB;
    ROLLBACK;
    INSERT INTO t1 VALUES (1);
    

    would succeed on the replication master as expected. However, the INSERT would fail on the slave because the ROLLBACK would (erroneously) cause the CREATE TEMPORARY TABLE statement not to be written to the binlog. (Bug#7947)

  • NDB Cluster: Creating a table with packed keys failed silently. NDB now supports the PACK_KEYS option to CREATE TABLE correctly. (Bug#14514)

  • Non-latin1 object names were written with wrong character set to grant tables. (Bug#14406)

  • Issuing STOP SLAVE after having acquired a global read lock with FLUSH TABLES WITH READ LOCK caused a deadlock. Now STOP SLAVE is generates an error in such circumstances. (Bug#10942)

  • Portability fixes to support OpenSSL 0.9.8a. (Bug#14221)

  • Closed a memory leak in the SSL code. (Bug#14780)

  • Perform character set conversion of constant values whenever possible without data loss. (Bug#10446)

  • A UNION of DECIMAL columns could produce incorrect results. (Bug#14216)

  • InnoDB: Pad UTF-8 VARCHAR columns with 0x20. Pad UCS2 CHAR columns with 0x0020. (Bug#10511)

  • Full-text indexing/searching failed for words that end with more than one apostrophe. (Bug#5686)

  • Selecting from a table in both an outer query and a subquery could cause a server crash. (Bug#14482)

  • Creating a table containing an ENUM or SET column from within a stored procedure or prepared statement caused a server crash later when executing the procedure or statement. (Bug#14410)

  • mysql_fix_privilege_tables.sql contained an erroneous comment that resulted in an error when the file contents were processed. (Bug#14469)

  • On Windows, the server could crash during shutdown if both replication threads and normal client connection threads were active. (Re-fix of Bug#11796)

  • A LIMIT-related optimization failed to take into account that MyISAM table indexes can be disabled, causing Error 124 when it tried to use such an index. (Bug#14616)

  • For a table that had been opened with HANDLER OPEN, issuing OPTIMIZE TABLE, ALTER TABLE, or REPAIR TABLE caused a server crash. (Bug#14397)

  • CREATE TABLE tbl_name (...) SELECT ... could crash the server and write invalid data into the .frm file if the CREATE TABLE and SELECT both contained a column with the same name. Also, if a default value is specified in the column definition, it is now actually used. (Bug#14480)

  • For MyISAM tables, incorrect query results or incorrect updates could occur under these conditions: There is a multiple-column index that includes a BLOB column that is not the last column in the index, and the statement performs a lookup on the index using key column values that have NULL for the BLOB column and that provide values for all columns up to the BLOB column and at least the next column in the index. (Bug#13814)

  • Deletes from a CSV table could cause table corruption. (Bug#14672)

  • An update of a CSV table could cause a server crash. (Bug#13894)

  • mysqld_safe did not correctly start the -max version of the server (if it was present) if the --ledir option was given. (Bug#13774)

  • The endian byte in for spatial values in WKB format was not consistently respected. (Bug#12839)

  • An expression in an ORDER BY clause failed with Unknown column 'col_name' in 'order clause' if the expression referred to a column alias. (Bug#11694)

  • Statements of the form CREATE TABLE ... SELECT ... that created a column with a multi-byte character set could incorrectly calculate the maximum length of the column, resulting in a Specified key was too long error. (Bug#14139)

  • Use of col_name = VALUES(col_name) in the ON DUPLICATE KEY UPDATE clause of an INSERT statement failed with an Column 'col_name' in field list is ambiguous error. (Bug#13392)

  • On Windows, the server was not ignoring hidden or system directories that Windows may have created in the data directory, and would treat them as available databases. (Bug#4375)

  • LIKE operations did not work reliably for the cp1250 character set. (Bug#13347)

  • Maximum values were handled incorrectly for command-line options of type GET_LL. (Bug#12925)

  • Use of WITH ROLLUP PROCEDURE ANALYSE() could hang the server. (Bug#14138)

  • TIMEDIFF(), ADDTIME(), and STR_TO_DATE() were not reporting that they could return NULL, so functions that invoked them might misinterpret their results. (Bug#14009)

  • The example configuration files supplied with MySQL distributions listed the thread_cache_size variable as thread_cache. (Bug#13811)

  • LOAD DATA INFILE would not accept the same character for both the ESCAPED BY and the ENCLOSED BY clauses. (Bug#11203)

  • NDB Cluster: Repeated transactions using unique index lookups could cause a memory leak leading to error 288, Out of index operations in transaction coordinator. (Bug#14199)

  • SELECT DISTINCT CHAR(col_name) returned incorrect results after SET NAMES utf8. (Bug#13233)

  • Character set conversion was not being done for FIND_IN_SET(). (Bug#13751)

  • The default value of query_prealloc_size was set to 8192, lower than its minimum of 16384. The minimum has been lowered to 8192. (Bug#13334)

  • The server did not take character set into account in checking the width of the mysql.user.Password column. As a result, it could incorrectly generate long password hashes even if the column was not long enough to hold them. (Bug#13064)

  • CAST(1E+300 TO SIGNED INT) produced an incorrect result on little-endian machines. (Bug#13344)

  • mysqladmin and mysqldump would hang on SCO OpenServer. (Bug#13238)

  • Specifying --default-character-set=cp-932 for mysqld would cause SQL scripts containing comments written using that character set to fail with a syntax error. (Bug#13487)

  • Given a column col_name defined as NOT NULL, a SELECT ... FROM ... WHERE col_name IS NULL query following SHOW TABLE STATUS would erroneously return a non-empty result. (Bug#13535)

  • Corrected a memory-copying problem for big5 values when using icc compiler on Linux IA-64 systems. (Bug#10836)

  • On BSD systems, the system crypt() call could return an error for some salt values. The error was not handled, resulting in a server crash. (Bug#13619)

  • Character set file parsing during mysql_real_connect() read past the end of a memory buffer. (Bug#6413)

  • The --interactive-timeout and --slave-net-timeout options for mysqld were not being obeyed on Mac OS X and other BSD-based platforms. (Bug#8731)

  • Queries of the form (SELECT ...) ORDER BY ... were being treated as a UNION. This improperly resulted in only distinct values being returned (because UNION by default eliminates duplicate results). Also, references to column aliases in ORDER BY clauses following parenthesized SELECT statements were not resolved properly. (Bug#7672)

  • Multiple update queries using any type of subquery would be ignored by a replication slave when a condition such as --replicate-ignore-table like condition was used. (Bug#13236)

  • An UPDATE query using a join would be executed incorrectly on a replication slave. (Bug#12618)

  • NDBCluster: Placing multiple [TCP DEFAULT] sections in the cluster config.ini file crashed ndb_mgmd. (The process now exits gracefully with an appropriate error message.) (Bug#13611)

  • Multiple race conditions existed in OpenSSL, particularly noticeable on Solaris. (Bug#9270)

  • With --log-slave-updates Exec_master_log_pos of SQL thread lagged IO (Bug#13023)

  • PURGE MASTER LOGS statement that used subquery for date crashed server. (Bug#10308)

D.1.7. Changes in release 4.1.15 (13 October 2005)

Functionality added or changed:

The limit of 255 characters on the input buffer for mysql on Windows has been lifted. The exact limit depends on what the system allows, but can be up to 64K characters. A typical limit is 16K characters. (Bug#12929)

Added the myisam_stats_method, which controls whether NULL values in indexes are considered the same or different when collecting statistics for MyISAM tables. This influences the query optimizer as described in Section 7.4.7, “MyISAM Index Statistics Collection”. (Bug#12232)

  • Better detection of connection timeout for replication servers on Windows allows elimination of extraneous Lost connection errors in the error log. (Bug#5588)

  • When using IF NOT EXISTS with CREATE DATABASE or CREATE TABLE, a warning now is generated if the database or table already exists. (Bug#6008):

  • A new command line argument was added to mysqld to ignore client character set information sent during handshake, and use server side settings instead, to reproduce 4.0 behavior (Bug#9948):

    mysqld --skip-character-set-client-handshake

Bugs fixed:

  • A prepared statement failed with Illegal mix of collations if the client character set was utf8 and the statement used a table that had a character set of latin1. (Bug#12371)

  • If special characters such as '_' , '%', or the escape character were included within the prefix of a column index, LIKE pattern matching on the indexed column did not return the correct result. (Bug#13046, Bug#13919)

  • NDBCluster: Updating a text-type column during a cluster backup could cause the ndbd process to crash, due to the incorrect use of charset-normalized reads for. This could also lead to “wrong” data in the backup if such a column was updated during the backup; for example, supposing that the column used latin_ci, then “aAa” might be stored in the backup as “AAA”. (Bug#12950)

  • NDBCluster: When performing a delete of a great many (tens of thousands of) rows at once from a Cluster table, an improperly dereferenced pointer could cause the mysqld process to crash. (Bug#9282)

  • Server could over-allocate memory when performing a FULLTEXT search for stopwords only. (Bug#13