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.23 (Not yet released)
D.1.2. Changes in release 4.1.22 (02 November 2006)
D.1.3. Changes in release 4.1.21 (19 July 2006)
D.1.4. Changes in release 4.1.20 (24 May 2006)
D.1.5. Changes in release 4.1.19 (29 April 2006)
D.1.6. Changes in release 4.1.18 (27 January 2006)
D.1.7. Changes in release 4.1.17 (Not released)
D.1.8. Changes in release 4.1.16 (29 November 2005)
D.1.9. Changes in release 4.1.15 (13 October 2005)
D.1.10. Changes in release 4.1.14 (17 August 2005)
D.1.11. Changes in release 4.1.13 (15 July 2005)
D.1.12. Changes in release 4.1.12 (13 May 2005)
D.1.13. Changes in release 4.1.11 (01 April 2005)
D.1.14. Changes in release 4.1.10 (12 February 2005)
D.1.15. Changes in release 4.1.9 (11 January 2005)
D.1.16. Changes in release 4.1.8 (14 December 2004)
D.1.17. Changes in release 4.1.7 (23 October 2004: Production)
D.1.18. Changes in release 4.1.6 (10 October 2004)
D.1.19. Changes in release 4.1.5 (16 September 2004)
D.1.20. Changes in release 4.1.4 (26 August 2004: Gamma)
D.1.21. Changes in release 4.1.3 (28 June 2004: Beta)
D.1.22. Changes in release 4.1.2 (28 May 2004)
D.1.23. Changes in release 4.1.1 (01 December 2003)
D.1.24. Changes in release 4.1.0 (03 April 2003: Alpha)
D.2. Changes in release 4.0.x
D.2.1. Changes in release 4.0.29 (11 January 2007)
D.2.2. Changes in release 4.0.28 (Not released)
D.2.3. Changes in release 4.0.27 (06 May 2006)
D.2.4. Changes in release 4.0.26 (08 September 2005)
D.2.5. Changes in release 4.0.25 (05 July 2005)
D.2.6. Changes in release 4.0.24 (04 March 2005)
D.2.7. Changes in release 4.0.23 (18 December 2004)
D.2.8. Changes in release 4.0.22 (27 October 2004)
D.2.9. Changes in release 4.0.21 (06 September 2004)
D.2.10. Changes in release 4.0.20 (17 May 2004)
D.2.11. Changes in release 4.0.19 (04 May 2004)
D.2.12. Changes in release 4.0.18 (12 February 2004)
D.2.13. Changes in release 4.0.17 (14 December 2003)
D.2.14. Changes in release 4.0.16 (17 October 2003)
D.2.15. Changes in release 4.0.15 (03 September 2003)
D.2.16. Changes in release 4.0.14 (18 July 2003)
D.2.17. Changes in release 4.0.13 (16 May 2003)
D.2.18. Changes in release 4.0.12 (15 March 2003: Production)
D.2.19. Changes in release 4.0.11 (20 February 2003)
D.2.20. Changes in release 4.0.10 (29 January 2003)
D.2.21. Changes in release 4.0.9 (09 January 2003)
D.2.22. Changes in release 4.0.8 (07 January 2003)
D.2.23. Changes in release 4.0.7 (20 December 2002)
D.2.24. Changes in release 4.0.6 (14 December 2002: Gamma)
D.2.25. Changes in release 4.0.5 (13 November 2002)
D.2.26. Changes in release 4.0.4 (29 September 2002)
D.2.27. Changes in release 4.0.3 (26 August 2002: Beta)
D.2.28. Changes in release 4.0.2 (01 July 2002)
D.2.29. Changes in release 4.0.1 (23 December 2001)
D.2.30. Changes in release 4.0.0 (October 2001: Alpha)
D.3. Changes in release 3.23.x
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. MySQL Connector/ODBC (MyODBC) Change History
D.6.1. Changes in Connector/ODBC 5.0.10 (14 December 2006)
D.6.2. Changes in Connector/ODBC 5.0.9 (22 November 2006)
D.6.3. Changes in Connector/ODBC 5.0.8 (17 November 2006)
D.6.4. Changes in Connector/ODBC 5.0.7 (08 November 2006)
D.6.5. Changes in Connector/ODBC 5.0.6 (03 November 2006)
D.6.6. Changes in Connector/ODBC 5.0.5 (17 October 2006)
D.6.7. Changes in Connector/ODBC 5.0.3 (Connector/ODBC 5.0 Alpha 3) (20 June 2006)
D.6.8. Changes in Connector/ODBC 5.0.2 (Never released)
D.6.9. Changes in Connector/ODBC 5.0.1 (Connector/ODBC 5.0 Alpha 2) (05 June 2006)
D.6.10. Changes in Connector/ODBC 3.51.13 (Not yet released)
D.6.11. Changes in Connector/ODBC 3.51.12
D.6.12. Changes in Connector/ODBC 3.51.11
D.7. Connector/NET Change History
D.7.1. Changes in MySQL Connector/NET Version 5.0.4 (Not yet released)
D.7.2. Changes in MySQL Connector/NET Version 5.0.3 (05 January 2007)
D.7.3. Changes in MySQL Connector/NET Version 5.0.2 (06 November 2006)
D.7.4. Changes in MySQL Connector/NET Version 5.0.1 (01 October 2006)
D.7.5. Changes in MySQL Connector/NET Version 5.0.0 (08 August 2006)
D.7.6. Changes in MySQL Connector/NET Version 1.0.9 (Not yet released)
D.7.7. Changes in MySQL Connector/NET Version 1.0.8 (20 October 2006)
D.7.8. Changes in MySQL Connector/NET Version 1.0.7 (21 November 2005)
D.7.9. Changes in MySQL Connector/NET Version 1.0.6 (03 October 2005)
D.7.10. Changes in MySQL Connector/NET Version 1.0.5 (29 August 2005)
D.7.11. Changes in MySQL Connector/NET Version 1.0.4 (20 January 2005)
D.7.12. Changes in MySQL Connector/NET Version 1.0.3-gamma (12 October 2004)
D.7.13. Changes in MySQL Connector/NET Version 1.0.2-gamma (15 November 2004)
D.7.14. Changes in MySQL Connector/NET Version 1.0.1-beta2 (27 October 2004)
D.7.15. Changes in MySQL Connector/NET Version 1.0.0 (01 September 2004)
D.7.16. Changes in MySQL Connector/NET Version 0.9.0 (30 August 2004)
D.7.17. Changes in MySQL Connector/NET Version 0.76
D.7.18. Changes in MySQL Connector/NET Version 0.75
D.7.19. Changes in MySQL Connector/NET Version 0.74
D.7.20. Changes in MySQL Connector/NET Version 0.71
D.7.21. Changes in MySQL Connector/NET Version 0.70
D.7.22. Changes in MySQL Connector/NET Version 0.68
D.7.23. Changes in MySQL Connector/NET Version 0.65
D.7.24. Changes in MySQL Connector/NET Version 0.60
D.7.25. Changes in MySQL Connector/NET Version 0.50
D.8. MySQL Connector/J Change History
D.8.1. Changes in MySQL Connector/J 5.1.x
D.8.2. Changes in MySQL Connector/J 5.0.x
D.8.3. Changes in MySQL Connector/J 3.1.x
D.8.4. Changes in MySQL Connector/J 3.0.x
D.8.5. Changes in MySQL Connector/J 2.0.x
D.8.6. Changes in MySQL Connector/J 1.2b (04 July 1999)
D.8.7. Changes in MySQL Connector/J 1.2.x and lower

This appendix lists the changes from version to version in the MySQL source code through the latest version of MySQL 4.1.

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

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)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

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.23 (Not yet released)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

This is a bugfix release for the MySQL 4.1 release family.

Functionality added or changed:

  • Incompatible change: Previously, the DATE_FORMAT() function returned a binary string. Now it returns a string with a character set and collation given by character_set_connection and collation_connection so that it can return month and weekday names containing non-ASCII characters. (Bug#22646)

  • Incompatible change: The prepared_stmt_count system variable has been converted to the Prepared_stmt_count global status variable (viewable with the SHOW GLOBAL STATUS statement). (Bug#23159)

  • mysqldump --single-transaction now uses START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */ rather than BEGIN to start a transaction, so that a consistent snapshot will be used on those servers that support it. (Bug#19660)

  • The --memlock option relies on system calls that are unreliable on some operating systems. If a crash occurs, the server now checks whether --memlock was specified and if so issues some information about possible workarounds. (Bug#22860)

Bugs fixed:

  • No warning was issued for use of the DATA DIRECTORY or INDEX DIRECTORY table options on a platform that does not support them. (Bug#17498)

  • Hebrew-to-Unicode conversion failed for some characters. Definitions for the following Hebrew characters (as specified by the ISO/IEC 8859-8:1999) were added: LEFT-TO-RIGHT MARK (LRM), RIGHT-TO-LEFT MARK (RLM) (Bug#24037)

  • Certain joins using Range checked for each record in the query execution plan could cause the server to crash. (Bug#24776)

  • If there was insufficient memory available to mysqld, this could sometimes cause the server to hang during startup. (Bug#24751)

  • Optimizations that are legal only for subqueries without tables and WHERE conditions were applied for any subquery without tables. (Bug#24670)

  • NDB Cluster: In some circumstances, shutting down the cluster could cause connected mysqld processes to crash. (Bug#25668)

  • mysqltest incorrectly tried to retrieve result sets for some queries where no result set was available. (Bug#19410)

  • mysqltest crashed with a stack overflow. (Bug#24498)

  • The server was built even when configure was run with the --without-server option. (Bug#23973)

  • A table created with the ROW_FORMAT = FIXED table option lost the option if an index was added or dropped with CREATE INDEX or DROP INDEX. (Bug#23404)

  • The BUILD/check-cpu script did not recognize Celeron processors. (Bug#20061)

  • InnoDB exhibited thread thrashing with more than 50 concurrent connections under an update-intensive workload. (Bug#22868)

  • InnoDB showed substandard performance with multiple queries running concurrently. (Bug#15815)

  • mysql_fix_privilege_tables did not handle a password containing embedded space or apostrophe characters. (Bug#17700)

  • Changing the value of MI_KEY_BLOCK_LENGTH in myisam.h and recompiling MySQL resulted in a myisamchk that saw existing MyISAM tables as corrupt. (Bug#22119)

  • SET lc_time_names = value allowed only exact literal values, not expression values. (Bug#22647)

  • Changes to the lc_time_names system variable were not replicated. (Bug#22645)

  • mysqldump --order-by-primary failed if the primary key name was an identifier that required quoting. (Bug#13926)

  • Re-execution of CREATE DATABASE, CREATE TABLE, and ALTER TABLE statements as prepared statements caused incorrect results or crashes. (Bug#22060)

  • The internal functions for table preparation, creation, and alteration were not re-execution friendly, causing problems in code that: repeatedly altered a table; repeatedly created and dropped a table; opened and closed a cursor on a table, altered the table, and then reopened the cursor. (Bug#4968, Bug#6895, Bug#19182, Bug#19733)

  • A deadlock could occur, with the server hanging on Closing tables, with a sufficient number of concurrent INSERT DELAYED, FLUSH TABLES, and ALTER TABLE operations. (Bug#23312)

  • Referencing an ambiguous column alias in an expression in the ORDER BY clause of a query caused the server to crash. (Bug#25427)

  • User-defined variables could consume excess memory, leading to a crash caused by the exhaustion of resources available to the MEMORY storage engine, due to the fact that this engine is used by MySQL for variable storage and intermediate results of GROUP BY queries. Where SET had been used, such a condition could instead give rise to the misleading error message You may only use constant expressions with SET, rather than Out of memory (Needed NNNNNN bytes). (Bug#23443)

  • InnoDB: During a restart of the MySQL Server that followed the creation of a temporary table using the InnoDB storage engine, MySQL failed to clean up in such a way that InnoDB still attempted to find the files associated with such tables. (Bug#20867)

  • A compressed MyISAM table that became corrupted could crash myisamchk and possibly the MySQL Server. (Bug#23139)

  • A crash of the MySQL Server could occur when unpacking a BLOB column from a row in a corrupted MyISAM table. This could happen when trying to repair a table using either REPAIR TABLE or myisamchk; it could also happen when trying to access such a “brokenâ€? row using statements like SELECT if the table was not marked as crashed. (Bug#22053)

  • Trailing spaces were not removed from Unicode CHAR column values when used in indexes. This resulted in excessive usage of storage space, and could affect the results of some ORDER BY queries that made use of such indexes.

    Note: When upgrading, it is necessary to re-create any existing indexes on Unicode CHAR columns in order to take advantage of the fix. This can be done by using a REPAIR TABLE statement on each affected table.

    (Bug#22052)

  • The stack size for NetWare binaries was increased to 128KB to prevent problems caused by insufficient stack size. (Bug#23504)

  • ALTER ENABLE KEYS or ALTER TABLE DISABLE KEYS combined with another ALTER TABLE option other than RENAME TO did nothing. In addition, if ALTER TABLE was used on a table having disabled keys, the keys of the resulting table were enabled. (Bug#24395)

  • Queries using a column alias in an expression as part of an ORDER BY clause failed, an example of such a query being SELECT mycol + 1 AS mynum FROM mytable ORDER BY 30 - mynum. (Bug#22457)

  • STR_TO_DATE() returned NULL if the format string contained a space following a non-format character. (Bug#22029)

  • Selecting into variables sometimes returned incorrect wrong results. (Bug#20836)

  • A server crash occurred when using LOAD DATA to load a table containing a NOT NULL spatial column, when the statement did not load the spatial column. Now a NULL supplied to NOT NULL column error occurs. (Bug#22372)

  • The --extern option for mysql-test-run.pl did not function correctly. (Bug#24354)

  • ALTER TABLE statements that performed both RENAME TO and {ENABLE|DISABLE} KEYS operations caused a server crash. (Bug#24089)

  • There was a race condition in the InnoDB fil_flush_file_spaces() function. (Bug#24089)

  • Some small double precision numbers (such as 1.00000001e-300) that should have been accepted were truncated to zero. (Bug#22129)

  • LAST_DAY('0000-00-00') could cause a server crash. (Bug#23653)

  • Through the C API, the member strings in MYSQL_FIELD for a query that contains expressions may return incorrect results. (Bug#21635)

  • IN() can return NULL, but did not signal that to the query processor, causing incorrect results for IS NULL operations. (Bug#17047)

  • The server could send incorrect column count information to the client for queries that produce a larger number of columns than can fit in a two-byte number. (Bug#19216)

  • SQL statements close to the size of max_allowed_packet could produce binary log events larger than max_allowed_packet that could not be read by slave servers. (Bug#19402)

  • If elements in a non-top-level IN subquery were accessed by an index and the subquery result set included a NULL value, the quantified predicate that contained the subquery was evaluated to NULL when it should return a non-NULL value. (Bug#23478)

  • Metadata for columns calculated from scalar subqueries was limited to integer, double, or string, even if the actual type of the column was different. (Bug#11032)

  • For ODBC compatibility, MySQL supports use of WHERE col_name IS NULL for DATE or DATETIME columns that are NOT NULL, to allow column values of '0000-00-00' or '0000-00-00 00:00:00' to be selected. However, this was not working for WHERE clauses in DELETE statements. (Bug#23412)

  • mysql did not check for errors when fetching data during result set printing. (Bug#22913)

  • Adding a day, month, or year interval to a DATE value produced a DATE, but adding a week interval produced a DATETIME value. Now all produce a DATE value. (Bug#21811)

  • For not-yet-authenticated connections, the Time column in SHOW PROCESSLIST was a random value rather than NULL. (Bug#23379)

  • The Handler_rollback status variable sometimes was incremented when no rollback had taken place. (Bug#22728)

  • Lack of validation for input and output TIME values resulted in several problems: SEC_TO_TIME() within subqueries incorrectly clipped large values; SEC_TO_TIME() treated BIGINT UNSIGNED values as signed; only truncation warnings were produced when both truncation and out-of-range TIME values occurred. (Bug#11655, Bug#20927)

  • Range searches on columns with an index prefix could miss records. (Bug#20732)

  • Transient errors in replication from master to slave may trigger multiple Got fatal error 1236: 'binlog truncated in the middle of event' errors on the slave. (Bug#4053)

  • If COMPRESS() returned NULL, subsequent invocations of COMPRESS() within a result set or within a trigger also returned NULL. (Bug#23254)

  • mysql would lose its connection to the server if its standard output was not writable. (Bug#17583)

  • mysql-test-run did not work correctly for RPM-based installations. (Bug#17194)

  • The return value from my_seek() was ignored. (Bug#22828)

  • MySQL would fail to build on the Alpha platform. (Bug#23256)

D.1.2. Changes in release 4.1.22 (02 November 2006)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

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

  • If the user specified the server options --max-connections=N or --table-open-cache=M, a warning would be given in some cases that some values were recalculated, with the result that --table-open-cache could be assigned greater value.

    It should be noted that, in such cases, both the warning and the increase in the --table-open-cache value were completely harmless. Note also that it is not possible for the MySQL Server to predict or to control limitations on the maximum number of open files, since this is determined by the operating system.

    The recalculation code has now been fixed to ensure that the value of --table-open-cache is no longer increased automatically, and that a warning is now given only if some values had to be decreased due to operating system limits.

    (Bug#21915)

  • The mysqld manpage has been reclassified from volume 1 to volume 8. (Bug#21220)

  • MySQL now can do stack dumps on x86_64 and i386/NPTL systems. (Bug#21250)

  • The LOAD DATA FROM MASTER and LOAD TABLE FROM MASTER statements are deprecated. See Section 13.6.2.2, “LOAD DATA FROM MASTER Syntaxâ€?, for recommended alternatives. (Bug#18822, Bug#9125, Bug#12187, Bug#14399, Bug#15025, Bug#20596)

  • A warning now is issued if the client attempts to set the SQL_LOG_OFF variable without the SUPER privilege. (Bug#16180)

Bugs fixed:

  • Deleting entries from a large MyISAM index could cause index corruption when it needed to shrink. Deletes from an index can happen when a record is deleted, when a key changes and must be moved, and when a key must be un-inserted because of a duplicate key. This can also happen in REPAIR TABLE when a duplicate key is found and in myisamchk when sorting the records by an index. (Bug#22384)

  • Setting myisam_repair_threads caused any repair operation on a MyISAM table to fail to update the cardinality of indexes, instead making them always equal to 1. (Bug#18874)

  • Within a prepared statement, SELECT (COUNT(*) = 1) (or similar use of other aggregate functions) did not return the correct result for statement re-execution. (Bug#21354)

  • DELETE IGNORE could hang for foreign key parent deletes. (Bug#18819)

  • Redundant binary log LAST_INSERT_ID events could be generated; LAST_INSERT_ID(expr) didn't return the value of expr; LAST_INSERT_ID() could return the value generated by the current statement if the call happens after value generation, as in:

    CREATE TABLE t1 (i INT AUTO_INCREMENT PRIMARY KEY, j INT);
    INSERT INTO t1 VALUES (NULL, 0), (NULL, LAST_INSERT_ID());
    

    (Bug#21726)

  • FROM_UNIXTIME() did not accept arguments up to POWER(2,31)-1, which it had previously. (Bug#9191)

  • A literal string in a GROUP BY clause could be interpreted as a column name. (Bug#14019)

  • WITH ROLLUP could group unequal values. (Bug#20825)

  • LIKE searches failed for indexed utf8 character columns. (Bug#20471)

  • The optimizer sometimes mishandled R-tree indexes for GEOMETRY data types, resulting in a server crash. (Bug#21888)

  • Entries in the slow query log could have an incorrect Rows_examined value. (Bug#12240)

  • Insufficient memory (myisam_sort_buffer_size) could cause a server crash for several operations on MyISAM tables: repair table, create index by sort, repair by sort, parallel repair, bulk insert. (Bug#23175)

  • REPAIR TABLE ... USE_FRM could cause a server crash or hang when used for a MyISAM table in a database other than the default database. (Bug#22562)

  • OPTIMIZE TABLE with myisam_repair_threads > 1 could result in MyISAM table corruption. (Bug#8283)

  • The result for CAST() when casting a value to UNSIGNED was limited to the maximum signed BIGINT value (9223372036854775808), not the maximum unsigned value (18446744073709551615). (Bug#8663)

  • For multiple-table UPDATE statements, storage engines were not notified of duplicate-key errors. (Bug#21381)

  • Successive invocations of a COUNT(*) query containing a join on two MyISAM tables and a WHERE clause of the form WHERE (table1.column1 = table2.column2) OR table2.column2 IS NULL yielded different results. (Bug#21019)

  • Using ALTER TABLE to add an ENUM column with an enumeration value containing 0xFF caused the name of the first table column to be lost. (Bug#20922)

  • PROCEDURE ANALYSE() returned incorrect values of M FLOAT(M, D) and DOUBLE(M, D). (Bug#20305)

  • A query that used GROUP BY and an ALL or ANY quantified subquery in a HAVING clause could trigger an assertion failure. (Bug#21853)

  • For an ENUM column that used the ucs2 character set, using ALTER TABLE to modify the column definition caused the default value to be lost. (Bug#20108)

  • Creating a TEMPORARY table with the same name as an existing table that was locked by another client could result in a lock conflict for DROP TEMPORARY TABLE because the server unnecessarily tried to acquire a name lock. (Bug#21096)

  • Incorporated some portability fixes into the definition of __attribute__ in my_global.h. (Bug#2717)

  • In the package of pre-built time zone tables that is available for download at http://dev.mysql.com/downloads/timezones.html, the tables now explicitly use the utf8 character set so that they work the same way regardless of the system character set value. (Bug#21208)

  • The build process incorrectly tried to overwrite sql/lex_hash.h. This caused the build to fail when using a shadow link tree pointing to original sources that were owned by another account. (Bug#18888)

  • Execution of a prepared statement that uses an IN subquery with aggregate functions in the HAVING clause could cause a server crash. (Bug#22085)

  • Selecting from a MERGE table could result in a server crash if the underlying tables had fewer indexes than the MERGE table itself. (Bug#21617, Bug#22937)

  • SUBSTR() results sometimes were stored improperly into a temporary table when multi-byte character sets were used. (Bug#20204)

  • Parallel builds occasionally failed on Solaris. (Bug#16282)

  • The source distribution failed to compile when configured with the --without-geometry option. (Bug#12991)

  • The server returns a more informative error message when it attempts to open a MERGE table that has been defined to use non-MyISAM tables. (Bug#10974)

  • On Mac OS X, zero-byte read() or write() calls to an SMB-mounted filesystem could return a non-standard return value, leading to data corruption. Now such calls are avoided. (Bug#12620)

  • For INSERT ... ON DUPLICATE KEY UPDATE, use of VALUES(col_name) within the UPDATE clause sometimes was handled incorrectly. (Bug#21555)

  • Table aliases in multiple-table DELETE statements sometimes were not resolved. (Bug#21392)

  • EXPORT_SET() did not accept arguments with coercible character sets. (Bug#21531)

  • The --collation-server server option was being ignored. With the fix for this problem, if you choose a non-default character set with --character-set-server, you should also use --collation-server to specify the collation. (Bug#15276)

  • A subquery that uses an index for both the WHERE and ORDER BY clauses produced an empty result. (Bug#21180)

  • Queries containing a subquery that used aggregate functions could return incorrect results. (Bug#16792)

  • The MD5(), SHA1(), and ENCRYPT() functions should return a binary string, but the result sometimes was converted to the character set of the argument. MAKE_SET() and EXPORT_SET() now use the correct character set for their default separators, resulting in consistent result strings which can be coerced according to normal character set rules. (Bug#20536)

  • For a MyISAM table with a FULLTEXT index, compression with myisampack or a check with myisamchk after compression resulted in table corruption. (Bug#19702)

  • The optimizer could produce an incorrect result after AND with collations such as latin1_german2_ci, utf8_czech_ci, and utf8_lithianian_ci. (Bug#9509)

  • character_set_results can be NULL to signify “no conversion,â€? but some code did not check for NULL, resulting in a server crash. (Bug#21913)

  • The myisam_stats_method variable was mishandled when set from an option file or on the command line. (Bug#21054)

  • libmysqld produced some warnings to stderr which could not be silenced. These warnings now are suppressed. (Bug#13717)

  • If a column definition contained a character set declaration, but a DEFAULT value began with an introducer, the introducer character set was used as the column character set. (Bug#20695)

  • Some Linux-x86_64-icc packages (of previous releases) mistakenly contained 32-bit binaries. Only ICC builds are affected, not gcc builds. Solaris and FreeBSD x86_64 builds are not affected. (Bug#22238)

  • For TIME_FORMAT(), the %H and %k format specifiers can return values larger than two digits (if the hour is greater than 99), but for some query results that contained three-character hours, column values were truncated. (Bug#19844)

  • For table-format output, mysql did not always calculate columns widths correctly for columns containing multi-byte characters in the column name or contents. (Bug#17939)

  • Views could not be updated within a stored function or trigger. (Bug#17591)

  • Usernames have a maximum length of 16 characters (even if they contain multi-byte characters), but were being truncated to 16 bytes. (Bug#20393)

  • Database and table names have a maximum length of 64 characters (even if they contain multi-byte characters), but were being truncated to 64 bytes. (Bug#21432)

  • When using tables created under MySQL 4.1 with a 5.0 server, if the tables contained VARCHAR columns, for some queries the metadata sent to the client could have an empty column name. (Bug#14897)

  • On 64-bit systems, use of the cp1250 character set with a primary key column in a LIKE clause caused a server crash for patterns having letters in the range 128..255. (Bug#19741)

  • A subquery in the WHERE clause of the outer query and using IN and GROUP BY returned an incorrect result. (Bug#16255)

  • COUNT(*) queries with ORDER BY and LIMIT could return the wrong result. (Bug#21787)

    Note: This problem was introduced by the fix for Bug#9676, which limited the rows stored in a temporary table to the LIMIT clause. This optimization is not applicable to non-group queries with aggregate functions. The current fix disables the optimization in such cases.

  • Running SHOW MASTER LOGS at the same time as binary log files were being switched would cause mysqld to hang. (Bug#21965)

  • Adding ORDER BY to a SELECT DISTINCT(expr) query could produce incorrect results. (Bug#21456)

  • For InnoDB tables, the server could crash when executing NOT IN () subqueries. (Bug#21077)

  • mysqld --flush failed to flush MyISAM table changes to disk following an UPDATE statement for which no updated column had an index. (Bug#20060)

  • The --with-collation option was not honored for client connections. (Bug#7192)

  • NDB Cluster: The ndb_size.pl script did not account for TEXT and BLOB column values correctly. (Bug#21204)

  • NDB Cluster: Attempting to create an NDB table on a MySQL with an existing non-Cluster table with the same name in the same database could result in data loss or corruption. MySQL now issues a warning when a SHOW TABLES or other statement causing table discovery finds such a table. (Bug#21378)

  • NDB Cluster (NDB API): Attempting to read a nonexistent tuple using Commit mode for NdbTransaction::execute() caused node failures. (Bug#22672)

  • NDB Cluster: Restoring a cluster failed if there were any tables with 128 or more columns. (Bug#23502)

  • NDB Cluster: INSERT ... ON DUPLICATE KEY UPDATE on an NDB table could lead to deadlocks and memory leaks. (Bug#23200)

  • NDB Cluster: If a node restart could not be performed from the REDO log, no node takeover took place. This could cause partitions to be left empty during a system restart. (Bug#22893)

  • NDB Cluster: Multiple node restarts in rapid succession could cause a system restart to fail (Bug#22892), or induce a race condition (Bug#23210).

  • NDB Cluster: The node recovery algorithm was missing a version check for tables in the ALTER_TABLE_COMMITTED state (as opposed to the TABLE_ADD_COMMITTED state, which has the version check). This could cause inconsistent schemas across nodes following node recovery. (Bug#21756)

  • NDB Cluster: The output for the --help option used with NDB executable programs (ndbd, ndb_mgm, ndb_restore, ndb_config, and so on) referred to the Ndb.cfg file, instead of my.cnf. (Bug#21585)

  • NDB Cluster: The ndb_mgm management client did not set the exit status on errors, always returning 0 instead. (Bug#21530)

  • NDB Cluster: Cluster logs were not rotated following the first rotation cycle. (Bug#21345)

  • NDB Cluster: When inserting a row into an NDB table with a duplicate value for a non-primary unique key, the error issued would reference the wrong key. (Bug#21072)

  • NDB Cluster: Under some circumstances, local checkpointing would hang, keeping any unstarted nodes from being started. (Bug#20895)

  • NDB Cluster: In some cases where SELECT COUNT(*) from an NDB table should have yielded an error, MAX_INT was returned instead. (Bug#19914)

  • NDB Cluster: ndb_restore did not always make clear that it had recovered successfully from temporary errors while restoring a cluster backup. (Bug#19651)

  • NDB Cluster: A problem with takeover during a system restart caused ordered indexes to be rebuilt incorrectly. (Bug#15303)

  • NDB Cluster: The ndb_mgm program was included in both the MySQL-ndb-tools and MySQL-ndb-management RPM packages, resulting in a conflict if both were installed. Now ndb_mgm is included only in MySQL-ndb-tools. (Bug#21058)

  • NDB Cluster: ndb_size.pl and ndb_error_reporter were missing from RPM packages. (Bug#20426)

  • NDB Cluster: Setting TransactionDeadlockDetectionTimeout to a value greater than 12000 would cause scans to deadlock, time out, fail to release scan records, until the cluster ran out of scan records and stopped processing. (Bug#21800)

  • NDB Cluster: The server provided a non-descriptive error message when encountering a fatally corrupted REDO log. (Bug#21615)

  • NDB Cluster: A partial rollback could lead to node restart failures. (Bug#21536)

  • NDB Cluster: The failure of a unique index read due to an invalid schema version could be handled incorrectly in some cases, leading to unpredictable results. (Bug#21384)

  • NDB Cluster: In a cluster with more than 2 replicas, a manual restart of one of the data nodes could fail and cause the other nodes in its nodegroup to shut down. (Bug#21213)

  • NDB Cluster: When the redo buffer ran out of space, a Pointer too large error was raised and the cluster could become unusable until restarted with --initial. (Bug#20892)

  • NDB Cluster: In some situations with a high disk-load, writing of the redo log could hang, causing a crash with the error message GCP STOP detected. (Bug#20904)

  • NDB Cluster: ndb_size.pl and ndb_error_reporter were missing from RPM packages. (Bug#20426)

  • NDB Cluster: The server failed with a non-descriptive error message when out of data memory. (Bug#18475)

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

  • NDB Cluster: Some queries involving joins on very large NDB tables could crash the MySQL server. (Bug#21059)

  • Character set collation was ignored in GROUP BY clauses. (Bug#20709)

  • A query using WHERE column = constant OR column IS NULL did not return consistent results on successive invocations. The column in each part of the WHERE clause could be either the same column, or two different columns, for the effect to be observed. (Bug#21019)

  • A query using WHERE NOT (column < ANY (subquery)) yielded a different result from the same query using the same column and subquery with WHERE (column > ANY (subquery)). (Bug#20975)

  • Using the extended syntax for TRIM() — that is, TRIM(... FROM ...) — caused erroneous output from EXPLAIN EXTENDED statements. (Bug#17526)

  • DELETE with WHERE condition on a BTREE-indexed column for a MEMORY table deleted only the first matched row. (Bug#9719)

  • For cross-database multiple-table UPDATE statements, a user with all privileges for the default database could update tables in another database for which the user did not have UPDATE privileges. (Bug#7391)

  • mysql_install_db incorrectly had a blank first line. (Bug#20721)

  • Under heavy load (executing more than 1024 simultaneous complex queries), a problem in the code that handles internal temporary tables could lead to writing beyond allocated space and memory corruption. (Bug#21206)

  • Multiple invocations of the REVERSE() function could return different results. (Bug#18243)

  • Conversion of TIMESTAMP values between UTC and the local time zone resulted in some values having the year 2069 rather than 1969. (Bug#16327)

  • Under certain circumstances, AVG(key_val) returned a value but MAX(key_val) returned an empty set due to incorrect application of MIN()/MAX() optimization. (Bug#20954)

  • Using aggregate functions in subqueries yielded incorrect results under certain circumstances due to incorrect application of MIN()/MAX() optimization. (Bug#20792)

  • Using > ALL with subqueries that return no rows yielded incorrect results under certain circumstances due to incorrect application of MIN()/MAX() optimization. (Bug#18503)

  • Using ANY with “non-tableâ€? subqueries such as SELECT 1 yielded incorrect results under certain circumstances due to incorrect application of MIN()/MAX() optimization. (Bug#16302)

  • The use of WHERE col_name IS NULL in SELECT statements reset the value of LAST_INSERT_ID() to zero. (Bug#14553)

  • Use of the join cache in favor of an index for ORDER BY operations could cause incorrect result sorting. (Bug#17212)

  • libmysqld returned TEXT columns to the client as number of bytes, not number of characters (which can be different for multi-byte character sets). (Bug#19983)

D.1.3. Changes in release 4.1.21 (19 July 2006)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

This is a bugfix release for the MySQL 4.1 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)

  • A new system variable, lc_time_names, specifies the locale that controls the language used to display day and month names and abbreviations. This variable affects the output from the DATE_FORMAT(), DAYNAME() and MONTHNAME() functions. See Section 5.10.9, “MySQL Server Locale Supportâ€?.

Bugs fixed:

  • Security fix: On Linux, and possibly other platforms using case-sensitive filesystems, it was possible for a user granted rights on a database to create or access a database whose name differed only from that of the first by the case of one or more letters. (CVE-2006-4226, Bug#17647)

  • Security fix: If a user has access to MyISAM table t, that user can create a MERGE table m that accesses t. However, if the user's privileges on t are subsequently revoked, the user can continue to access t by doing so through m. If this behavior is undesirable, you can start the server with the new --skip-merge option to disable the MERGE storage engine. (Bug#15195)

  • Security fix: Invalid arguments to DATE_FORMAT() caused a server crash. (CVE-2006-3469, Bug#20729) Thanks to Jean-David Maillefer for discovering and reporting this problem to the Debian project and to Christian Hammers from the Debian Team for notifying us of it.

  • Closing of temporary tables failed if binary logging was not enabled. (Bug#20919)

  • Repeated DROP TABLE statements in a stored procedure could sometimes cause the server to crash. (Bug#19399)

  • DATE_ADD() and DATE_SUB() returned NULL when the result date was on the day '9999-12-31'. (Bug#12356)

  • For a DATE parameter sent via a MYSQL_TIME data structure, mysql_stmt_execute() zeroed the hour, minute, and second members of the structure rather than treating them as read-only. (Bug#20152)

  • The DATA DIRECTORY table option did not work for TEMPORARY tables. (Bug#8706)

  • The mysql client did not ignore client-specific commands (such as use or help) that occurred as the first word on a line within multiple-line /* ... */ comments. (Bug#20432)

  • The mysql client did not understand help commands that had spaces at the end. (Bug#20328)

  • Failure to account for a NULL table pointer on big-endian machines could cause a server crash during type conversion. (Bug#21135)

  • Some memory leaks in the libmysqld embedded server were corrected. (Bug#16017)

  • When mysqldump disabled keys and locked a MyISAM table, the lock operation happened second. If another client performed a query on the table in the interim, it could take a long time due to indexes not being used. Now the lock operation happens first. (Bug#15977)

  • The length of the pattern string prefix for LIKE operations was calculated incorrectly for multi-byte character sets. As a result, the the scanned range was wider than necessary if the prefix contained any multi-byte characters. (Bug#16674, Bug#18359)

  • For very complex SELECT statements could create temporary tables that were too big, but for which the temporary files did not get removed, causing subsequent queries to fail. (Bug#11824)

  • Using SELECT and a table join while running a concurrent INSERT operation would join incorrect rows. (Bug#14400)

  • Using SELECT on a corrupt MyISAM table using the dynamic record format could cause a server crash. (Bug#19835)

  • Checking a MyISAM table (using CHECK TABLE) having a spatial index and only one row would wrongly indicate that the table was corrupted. (Bug#17877)

  • 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: A Cluster whose storage nodes were installed from the MySQL-ndb-storage-* RPMs could not perform CREATE or ALTER operations that made use of non-default character sets or collations. (Bug#14918)

  • NDB Cluster: The repeated creating and dropping of a table would eventually lead to NDB Error 826, Too many tables and attributes ... Insufficient space. (Bug#20847)

  • 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: 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 “staleâ€? mysqld .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)

  • SHOW CREATE TABLE did not display the AUTO_INCREMENT column attribute if the SQL mode was MYSQL323 or MYSQL40. This also affected mysqldump, which uses SHOW CREATE TABLE to get table definitions. (Bug#14515)

D.1.4. Changes in release 4.1.20 (24 May 2006)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

This is a security fix release for the MySQL 4.1 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 dropping of a temporary table whose name contained a backtick ('`') character was not correctly written to the binary log, which also caused it not to be replicated correctly. (Bug#19188)

  • The client libraries had not been compiled for position-independent 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)

  • RPM packages had spurious dependencies on Perl modules and other programs. (Bug#13634)

D.1.5. Changes in release 4.1.19 (29 April 2006)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

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, caused the wrong number of rows to be returned. (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)

  • CAST(double 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.6. Changes in release 4.1.18 (27 January 2006)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

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.7. Changes in release 4.1.17 (Not released)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

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 option 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.8. Changes in release 4.1.16 (29 November 2005)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

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.9. Changes in release 4.1.15 (13 October 2005)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

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#13582)

  • UNION of two DECIMAL columns returned wrong field type. (Bug#13372)

  • CHECKSUM TABLE locked InnoDB tables and did not use a consistent read. (Bug#12669)

  • SHOW CREATE TABLE did not display any FOREIGN KEY clauses if a temporary file could not be created. Now SHOW CREATE TABLE displays an error message in an SQL comment if this occurs. (Bug#13002)

  • Display of the AUTO_INCREMENT attribute by SHOW CREATE TABLE was not controlled by the NO_FIELD_OPTIONS SQL mode as it should have been. (Bug#7977)

  • For VARCHAR columns with the ucs2 character set, InnoDB trimmed trailing 0x20 bytes rather than 0x0020 words, resulting in incorrect index lookups later. (Bug#12178)

  • MySQL programs in binary distributions for Solaris 8/9/10 x86 systems would not run on Pentium III machines. (Bug#6772)

  • NDB Cluster: Multiple ndb_mgmd processes in a cluster would not know each other's IP addresses. (Bug#12037)

  • NDB Cluster: With two mgmd processes in a cluster, ndb_mgm output for SHOW would display the same IP address for both processes, even when they were on different hosts. (Bug#11595)

  • The --replicate-rewrite-db and --replicate-do-table options did not work for statements in which tables were aliased to names other than those listed by the options. (Bug#11139)

  • After running configure with the --with-embedded-privilege-control option, the embedded server failed to build. (Bug#13501)

  • Queries against a MERGE table that has a composite index could produce incorrect results. (Bug#9112)

  • Comparisons involving row constructors containing constants could cause a server crash. (Bug#13356)

  • MySQL would pass an incorrect key length to storage engines for MIN(). This could cause warnings such as InnoDB: Warning: using a partial-field key prefix in search. in the .err log. (Bug#13218, same as Bug#11039 in MySQL 5.0.7)

  • NDB Cluster: LOAD DATA INFILE with a large data file failed. (Bug#10694)

  • NDB Cluster: Adding an index to a table with a large number of columns (more then 100) crashed the storage node. (Bug#13316)

  • Aggregate functions sometimes incorrectly were allowed in the WHERE clause of UPDATE and DELETE statements. (Bug#13180)

  • MIN() and MAX() sometimes returned a non-NULL value for an empty row set (for example, SELECT MAX(1) FROM empty_table). (Bug#12882)

  • LOAD DATA INFILE did not respect the NO_AUTO_VALUE_ON_ZERO SQL mode setting. (Bug#12053)

  • Use of a user-defined function within the HAVING clause of a query resulted in an Unknown column error. (Bug#11553)

  • The data type for DECIMAL columns was not respected when updating the column from another column. For example, updating a DECIMAL(10,1) column with the value from a DECIMAL(10,5) column resulted in a DECIMAL(10,5) value being stored. Similarly, altering a column with a DECIMAL(10,5) datatype to a DECIMAL(10,1) data type did not properly convert data values. (Bug#7598)

  • NDB: A cluster shutdown following the crash of a data node would fail to terminate the remaining node processes, even though ndb_mgm showed the shutdown request as having been completed. (Bug#10938, Bug#9996, Bug#11623)

  • For queries with DISTINCT and WITH ROLLUP, the DISTINCT should be applied after the rollup operation, but was not always. (Bug#12887)

  • The counters for the Key_read_requests, Key_reads, Key_write_requests, and Key_writes status variables were changed from unsigned long to unsigned longlong to accommodate larger values before the variables roll over and restart from 0. (Bug#12920)

  • A column that can be NULL was not handled properly for WITH ROLLUP in a subquery or view. (Bug#12885)

  • Shared-memory connections were not working on Windows. (Bug#12723)

  • A concurrency problem for CREATE ... SELECT could cause a server crash. (Bug#12845)

  • Performing an IS NULL check on the MIN() or MAX() of an indexed column in a complex query could produce incorrect results. (Bug#12695)

  • The NDB START BACKUP command could be interrupted by a SHOW command. (Bug#13054)

  • The LIKE ... ESCAPE syntax produced invalid results when escape character was larger than one byte. (Bug#12611)

  • A client connection thread cleanup problem caused the server to crash when closing the connection if the binary log was enabled. (Bug#12517)

  • CHECKSUM TABLE command returned incorrect results for tables with deleted rows. After upgrading, users who used stored checksum information to detect table changes should rebuild their checksum data. (Bug#12296)

  • The value of character_set_results could be set to NULL, but returned the string "NULL" when retrieved. (Bug#12363)

  • GROUP_CONCAT() ignored an empty string if it was the first value to occur in the result. (Bug#12863)

  • Outer join elimination was erroneously applied for some queries that used a NOT BETWEEN condition, an IN(value_list) condition, or an IF() condition. (Bug#12101, Bug#12102)

  • Reverted a change introduced in MySQL 4.1.13 to fix a problem of SHOW FIELDS truncating the TYPE column to 40 characters. This fix was reverted for MySQL 4.1 because it broke existing applications. The fix will be made to MySQL 5.0 instead (5.0.13). (Bug#7142, Bug#12817)

  • On HP-UX 11.x (PA-RISC), the -L option caused mysqlimport to crash. (Bug#12958)

  • After changing the character set with SET CHARACTER SET, the result of the GROUP_CONCAT() function was not converted to the proper character set. (Bug#12829)

  • myisampack did not properly pack BLOB values larger than 224 bytes. (Bug#4214)

  • The server crashed when one thread resized the query cache while another thread was using it. (Bug#12848)

  • mysqld_multi now quotes arguments on command lines that it constructs to avoid problems with arguments that contain shell metacharacters. (Bug#11280)

  • When any --replicate-wild-* option is used, the slave ignores SET ONE_SHOT TIME_ZONE statements as belonging to a non-replicated table. (Bug#12542)

  • Deadlock occurred when several account management statements were run (particularly between FLUSH PRIVILEGES/SET PASSWORD and GRANT/REVOKE statements). (Bug#12423)

  • On Windows, the server was preventing tables from being created if the table name was a prefix of a forbidden name. For example, nul is a forbidden name because it's the same as a Windows device name, but a table with the name of n or nu was being forbidden as well. (Bug#12325)

  • InnoDB was too permissive with LOCK TABLE ... READ LOCAL and allowed new inserts into the table. Now READ LOCAL is equivalent to READ for InnoDB. This will cause slightly more locking in mysqldump, but makes InnoDB table dumps consistent with MyISAM table dumps. (Bug#12410)

  • The have_innodb read-only system variable could not be selected with SELECT @@have_innodb. (Bug#9613)

  • A UNION of long utf8 VARCHAR columns was sometimes returned as a column with a LONGTEXT data type rather than VARCHAR. This could prevent such queries from working at all if selected into a MEMORY table because the MEMORY storage engine does not support the TEXT data types. (Bug#12537)

  • NDB Cluster: Corrected the parsing of the CLUSTERLOG command by ndb_mgm to allow multiple items. (Bug#12833)

  • NDB Cluster: Improved error messages related to filesystem issues. (Bug#11218)

  • NDB Cluster: When a schema was detected to be corrupt, ndb neglected to close it, resulting in a “file already openâ€? error if the schema was opened again later. written. (Bug#12027)

  • NDB Cluster: When it could not copy a fragment, ndbd exited without printing a message about the condition to the error log. Now the message is written. (Bug#12900)

  • NDB Cluster: When a disk full condition occurred, ndbd exited without printing a message about the condition to the error log. Now the message is written. (Bug#12716)

  • If a client has opened an InnoDB table for which the .ibd file is missing, InnoDB would not honor a DROP TABLE statement for the table. (Bug#12852)

  • SELECT GROUP_CONCAT(...) FROM DUAL in a subquery could cause the client to hang. (Bug#12861)

  • NDB Cluster: Bad values in config.ini caused ndb_mdmd to crash. (Bug#12043)

  • TRUNCATE TABLE did not work with TEMPORARY InnoDB tables. (Bug#11816)

  • ALTER TABLE db_name.t RENAME t did not move the table to default database unless the new name was qualified with the database name. (Bug#11493)

  • Spatial index corruption could occur during updates. (Bug#9645)

  • If a DROP DATABASE fails on a master server due to the presence of a non-database file in the database directory, the master have the database tables deleted, but not the slaves. To deal with failed database drops, we now write DROP TABLE statements to the binary log for the tables so that they are dropped on slaves. (Bug#4680)

  • DELETE or UPDATE for an indexed MyISAM table could fail. This was due to a change in end-space comparison behavior from 4.0 to 4.1. (Bug#12565)

  • The ARCHIVE storage engine does not support deletes, but it was possible to delete by using DELETE or TRUNCATE TABLE with a FEDERATED table that points to an ARCHIVE table. (Bug#12836)

  • Queries that created implicit temporary tables could return incorrect data types for some columns. (Bug#11718)

  • An optimizer estimate of zero rows for a non-empty InnoDB table used in a left or right join could cause incomplete rollback for the table. (Bug#12779)

  • A SELECT DISTINCT query with a constant value for one of the columns would return only a single row. (Bug#12625)

  • Users created using an IP address or other alias rather than a hostname listed in /etc/hosts could not set their own passwords. (Bug#12302)

  • NDB Cluster: An ALTER TABLE command caused loss of data stored prior to the issuing of the command. (Bug#12118)

  • MEMORY tables using B-Tree index on 64-bit platforms could produce false table is full errors. (Bug#12460)

  • MySQL failed to compile when --with-ndb-ccflags was specified. (Bug#11538)

  • On Windows when the --innodb_buffer_pool_awe_mem_mb option has been given, the server detects whether AWE support is available and has been compiled into the server, and displays an appropriate error message if not. (Bug#6581)

D.1.10. Changes in release 4.1.14 (17 August 2005)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

Functionality added or changed:

  • SHOW CHARACTER SET and INFORMATION_SCHEMA now properly report the Latin1 character set as cp1252. (Bug#11216)

  • MySQL Cluster: A new -P option is available for use with the ndb_mgmd client. When called with this option, ndb_mgmd prints all configuration data to stdout, then exits.

  • The output of perror --help now displays the --ndb option. (Bug#11999)

  • NDB: Improved handling of the configuration variables NoOfPagesToDiskDuringRestartACC, NoOfPagesToDiskAfterRestartACC, NoOfPagesToDiskDuringRestartTUP, and NoOfPagesToDiskAfterRestartTUP should result in noticeably faster startup times for MySQL Cluster. (Bug#12149)

  • Added support of where clause for queries with FROM DUAL. (Bug#11745)

  • Added an optimization that avoids key access with NULL keys for the ref method when used in outer joins. (Bug#12144)

  • Added new query cache test for the embedded server to the test suite, there are now specific tests for the embedded and non-embedded servers. (Bug#9508)

Bugs fixed:

  • If a thread (connection) has tables locked, the query cache is switched off for that thread. This prevents invalid results where the locking thread inserts values between a second thread connecting and selecting from the table. (Bug#12385)

  • Prepared statement parameters could cause errors in the binary log if the character set was cp932. (Bug#11338)

  • Queries with subqueries that contain outer joins could return wrong results. (Bug#11479)

  • Slave I/O threads were considered to be in the running state when launched (rather than after successfully connecting to the master server), resulting in incorrect SHOW SLAVE STATUS output. (Bug#10780)

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

  • Some subqueries of the form SELECT ... WHERE ROW(...) IN (subquery) were being handled incorrectly. (Bug#11867)

  • The mysql_info() C API function could return incorrect data when executed as part of a multi-statement that included a mix of statements that do and do not return information. (Bug#11688)

  • Renamed the rest() macro in my_list.h to list_rest() to avoid name clashes with user code. (Bug#12327)

  • myisampack failed to delete .TMD temporary files when run with -T option. (Bug#12235)

  • Concatenating USER()/DATEBASE() with a column produces invalid results. (Bug#12351)

  • For PKG installs on Mac OS X, the preinstallation and postinstallation scripts were being run only for new installations and not for upgrade installations, resulting in an incomplete installation process. (Bug#11380)

  • User variables were not automatically cast for comparisons, causing queries to fail if the column and connection character sets differed. Now when mixing strings with different character sets but the same coercibility, allow conversion if one character set is a superset of the other. (Bug#10892)

  • Pathame values for options such as ---basedir or --datadir didn't work on Japanese Windows machines for directory names containing multi-byte characters having a second byte of 0x5C (‘\’). (Bug#5439)

  • Mishandling of comparison for rows containing NULL values against rows produced by an IN subquery could cause a server crash. (Bug#12392)

  • INSERT ... SELECT ... ON DUPLICATE KEY UPDATE could fail with an erroneous “Column 'col_name' specified twiceâ€? error. (Bug#10109)

  • myisam.test failed when server compiled using --without-geometry option. (Bug#11083)

  • Creation of the mysql group account failed during the RPM installation. (Bug#12348)

  • FLUSH TABLES WITH READ LOCK combined with LOCK TABLE .. WRITE caused deadlock. (Bug#9459)

  • GROUP_CONCAT ignores the DISTINCT modifier when used in a query joining multiple tables where one of the tables has a single row. (Bug#12095)

  • UNION query with FULLTEXT could cause server crash. (Bug#11869)

  • Performing DATE(LEFT(column,8)) on a DATE column produces incorrect results. (Bug#12266)

  • max_connections_per_hour setting was being capped by unrelated max_user_connections setting. (Bug#9947)

  • big5 strings were not being stored in FULLTEXT index. (Bug#12075)

  • Updated dependency list for RPM builds to include missing dependencies such as useradd and groupadd. (Bug#12233)

  • Multiplying ABS() output by a negative number would return incorrect results. (Bug#11402)

  • SELECT @@local... returned @@session... in the column header. (Bug#10724)

  • Character data truncated when GBK characters 0xA3A0 and 0xA1 are present. (Bug#11987)

  • Comparisons like SELECT "A\\" LIKE "A\\"; fail when using SET NAMES utf8;. (Bug#11754)

  • Attempting to repair a table having a fulltext index on a column containing words whose length exceeded 21 characters and where myisam_repair_threads was greater than 1 would crash the server. (Bug#11684)

  • Two threads could potentially initialize different characters sets and overwrite each other. (Bug#12109)

  • NDB: Attempting to create or drop tables during a backup would cause the cluster to shut down. (Bug#11942)

  • NDB_MGMD was leaking file descriptors. (Bug#11898)

  • NDB ignored the Hostname option in the NDBD DEFAULT section of the NDB configuration file. (Bug#12028)

  • The temporary tables created by an ALTER TABLE on a cluster table were visible to all MySQL servers. (Bug#12055)

  • For prepared statements, the SQL parser did not disallow ‘?’ parameter markers immediately adjacent to other tokens, which could result in malformed statements in the binary log. (For example, SELECT * FROM t WHERE? = 1 could become SELECT * FROM t WHERE0 = 1.) (Bug#11299)

  • GROUP_CONCAT() sometimes returned a result with a different collation from that of its arguments. (Bug#10201)

  • When two threads compete for the same table, a deadlock could occur if one thread has also a lock on another table through LOCK TABLES and the thread is attempting to remove the table in some manner and the other thread want locks on both tables. (Bug#10600)

  • Incorrect error message displayed if user attempted to create a table in a non-existing database using CREATE database_name.table_name syntax. (Bug#10407)

  • The LPAD() and RPAD() functions returned the wrong length to mysql_fetch_fields(). (Bug#11311)

  • The C API function mysql_statement_reset() did not clear error information. (Bug#11183)

  • Multiple-table UPDATE queries using CONVERT_TZ() would fail with an error. (Bug#9979)

  • mysql_fetch_fields() returned incorrect length information for MEDIUM and LONG TEXT and BLOB columns. (Bug#9735)

  • LIKE pattern matching using prefix index didn't return correct result. (Bug#11650)

  • The MySQL server had issues with certain combinations of basedir and datadir. (Bug#7249)

  • mysql_next_result() returns incorrect value if final query in a batch fails. (Bug#12001)

  • SHOW BINARY LOGS displayed a file size of 0 for all log files but the current one if the files were not located in the data directory. (Bug#12004)

  • Server-side prepared statements failed for columns with a character set of ucs2. (Bug#9442)

  • References to system variables in an SQL statement prepared with PREPARE were evaluated during EXECUTE to their values at prepare time, not to their values at execution time. (Bug#9359)

  • For server shutdown on Windows, error messages of the form Forcing close of thread n user: 'name' were being written to the error log. Now connections are closed more gracefully without generating error messages. (Bug#7403)

  • Corrected a problem with the optimizer incorrectly adding NOT NULL constraints, producing in incorrect results for complex queries. (Bug#11482)

  • Corrected an optimizer problem with NOT NULL constraints within a subquery in an UPDATE statement that resulted in a server crash. (Bug#11868)

  • Creating a table with a SET or ENUM column with the DEFAULT 0 clause caused a server crash if the table's character set was utf8. (Bug#11819)

  • In SQL prepared statements, comparisons could fail for values not equally space-padded. For example, SELECT 'a' = 'a '; returns 1, but PREPARE s FROM 'SELECT ?=?'; SET @a = 'a', @b = 'a '; PREPARE s FROM 'SELECT ?=?'; EXECUTE s USING @a, @b; incorrectly returned 0. (Bug#9379)

  • InnoDB: Do not flush after each write, not even before setting up the doublewrite buffer. Flushing can be extremely slow on some systems. (Bug#12125)

  • ISO-8601 formatted dates were not being parsed correctly. (Bug#7308)

D.1.11. Changes in release 4.1.13 (15 July 2005)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

Functionality added or changed:

  • Security improvement: Applied a patch that addresses a zlib data vulnerability that could result in a buffer overflow and code execution. (CVE-2005-2096) (Bug#11844). Shortly after MySQL 4.1.13 was released, a second potential zlib security flaw was discovered and fixed - the issue is tracked by the Mitre CVE ID (CVE-2005-1849). A patch for this flaw was applied on top of the 4.1.13 sources and published as 4.1.13a. The affected binaries have been rebuilt.

  • Security improvement: Applied a patch to fix a UDF library-loading vulnerability that could result in a buffer overflow and code execution. (http://www.appsecinc.com/resources/alerts/mysql/2005-002.html)

  • Warning: Incompatible change: Previously, conversion of DATETIME values to numeric form by adding zero produced a result in YYYYMMDDHHMMSS format. The result of DATETIME+0 is now in YYYYMMDDHHMMSS.000000 format. (Bug#12268)

  • Added the --add-drop-database option to mysqldump. (Bug#3716)

  • Added mysql_set_character_set() C API function for setting the default character set of the current connection. This allows clients to affect the character set used by mysql_real_escape_string(). (Bug#8317)

  • MEMORY tables now support indexes of up to 500 bytes. See Section 14.4, “The MEMORY (HEAP) Storage Engineâ€?. (Bug#10566)

  • System variables are now treated as having SYSVAR (system constant) coercibility. For example, @@version is now treated like VERSION() and @@character_set_client is now treated like CHARSET( USER() ). See Section 10.5.4, “Some Special Cases Where the Collation Determination Is Trickyâ€?. (Bug#10904)

  • The statements CREATE TABLE, TRUNCATE TABLE, DROP DATABASE, and CREATE DATABASE cause an implicit commit. (Bug#6883)

  • Added the --log-slow-admin-statements server option to request logging of slow administrative statements such as OPTIMIZE TABLE, ANALYZE TABLE, and ALTER TABLE to the slow query log. These statements were logged in MySQL 4.0, but not in 4.1. (Bug#9141)

  • SHOW BINARY LOGS now displays a File_size column that indicates the size of each file.

  • You can again refer to other tables in the ON DUPLICATE KEY UPDATE part of an INSERT ... SELECT statement as long as there is no GROUP BY in the SELECT part. One side effect of this is that you may have to qualify non-unique column names in the values part of ON DUPLICATE KEY UPDATE. (Bug#9728, Bug#8147)

  • The table, type, and rows columns of EXPLAIN output can now be NULL. This is required for using EXPLAIN on SELECT queries that use no tables, such as EXPLAIN SELECT 1). (Bug#9899)

  • Expanded on information provided in general log and slow query log for prepared statements. (Bug#8367, Bug#9334)

  • InnoDB: When creating or extending an InnoDB data file, allocate at most one megabyte at a time for initializing the file. Previously, InnoDB used to allocate and initialize 1 or 8 megabytes of memory, even if a few 16-kilobyte pages were to be written. This fix improves the performance of CREATE TABLE in innodb_file_per_table mode.

Bugs fixed:

  • Security fix: On Windows systems, a user with any of the following privileges

    • REFERENCES

    • CREATE TEMPORARY TABLES

    • GRANT OPTION

    • CREATE

    • SELECT

    on *.* could crash mysqld by issuing a USE LPT1; or USE PRN; command. In addition, any of the commands USE NUL;, USE CON;, USE COM1;, or USE AUX; would report success even though the database was not in fact changed. (Bug#9148, CVE-2005-0799

  • When applying the group_concat_max_len limit, GROUP_CONCAT() could truncate multi-byte characters in the middle. (Bug#23451)

  • A CREATE TABLE db_name.tbl_name LIKE ... statement would crash the server when no database was selected. (Bug#11028)

  • IP addresses not shown in ndb_mgm SHOW command on second ndb_mgmd (or on ndb_mgmd restart). (Bug#11596)

  • SHOW FIELDS truncated the TYPE column to 40 characters. (Bug#7142, Bug#12817) (Note: This fix was reverted in MySQL 4.1.15 because it broke existing applications.)

  • Prepared statement with subqueries returned corrupt data. (Bug#11458)

  • A ROLLUP query could return a wrong result set when its GROUP BY clause contained references to the same column. (Bug#11543)

  • Queries with subqueries in the FROM clause were not being added to the query cache. (Bug#11522)

  • Possible crash on Windows when performing GROUP BY on a calculated field. (Bug#11414)

  • The mysql_config script did not handle symbolic linking properly. (Bug#10986)

  • When used within a subquery, SUBSTRING() returned an empty string. (Bug#10269)

  • On Mac OS X, libmysqlclient_r.a now is built with --fno-common to make it possible to link a shared two-level namespace library against libmysqlclient_r.a. (Bug#10638)

  • The handling by the HEX() function of numbers larger than 264 was improved. (Bug#9854)

  • Added a missing mutex when rotating the relay logs. Also, the server now logs an error message if the size of a relay log cannot be read. (Bug#6987)

  • Added a missing mutex when rotating the relay logs. Also, the server now logs an error message if the size of a relay log cannot be read. (Bug#6987)

  • mysqldump could crash for illegal or non-existent table names. (Bug#9358)

  • The --no-data option for mysqldump was being ignored if table names were given after the database name. (Bug#9558)

  • mysqldump now exports HASH index definitions using USING rather than TYPE when the index name is optional. This corrects a problem when reloading the output for PRIMARY KEY definition, because TYPE must be preceded an index name, which is not given for a PRIMARY KEY. (Bug#11635)

  • The --master-data option for mysqldump resulted in no error if the binary log was not enabled. Now an error occurs unless the --force option is given. (Bug#11678)

  • Corrected an optimization failure where a query returned an incorrect result for use of a newly populated table until the table was flushed. (Bug#11700)

  • Modifying a CHAR column with the utf8 character set to a shorter length did not properly truncate values due to not computing their length in utf8 character units. (Bug#11591)

  • DES_ENCRYPT() and DES_DECRYPT() require SSL support to be enabled, but were not checking for it. Checking for incorrect arguments or resource exhaustion was also improved for these functions. (Bug#10589)

  • Invoking the DES_ENCRYPT() function could cause a server crash if the server was started without the --des-key-file option. (Bug#11643)

  • Selecting the result of an aggregate function for an ENUM or SET column within a subquery could result in a server crash. (Bug#11821)

  • When used in joins, SUBSTRING() failed to truncate to zero those string values that could not be converted to numbers. (Bug#10124)

  • Error when performing GROUP BY on calculated values of a single row table. (Bug#11414)

  • mysqldump --xml did not format NULL column values correctly. (Bug#9657)

  • SHOW WARNINGS did not properly display warnings generated by executing a cached query. (Bug#9414)

  • Temporary tables were created in the data directory instead of tmpdir. (Bug#11440)

  • LOAD DATA ... REPLACE INTO ... on a replication slave failed for an InnoDB table having a unique index in addition to the primary key. (Bug#11401)

  • MySQL would not compile correctly on QNX due to missing rint() function. (Bug#11544)

  • Incorrect results when searching using IN() where search items included NULL and 0. (Bug#9393)

  • NDB Cluster: When trying to open a table that could not be discovered or unpacked, cluster would return error codes which the MySQL server falsely interpreted as operating system errors. (Bug#103651)

  • Manually inserting a row with host='' into mysql.tables_priv and performing a FLUSH PRIVILEGES would cause the server to crash. (Bug#11330)

  • MySQL sometimes reported erroneously that certain character values had crashed a table when trying to convert other character sets to UTF-8. (Bug#9557)

  • Using CONCAT_WS() on a column set NOT NULL caused incorrect results when used in a LEFT JOIN. (Bug#11469)

  • mysqld_safe would sometimes fail to remove the pid file for the old mysql process after a crash. As a result, the server would fail to start due to a false A mysqld process already exists... error. (Bug#11122)

  • For MEMORY tables, it was possible for updates to be performed using outdated key statistics when the updates involved only very small changes in a very few rows. This resulted in the random failures of queries such as UPDATE t SET col = col + 1 WHERE col_key = 2; where the same query with no WHERE clause would succeed. (Bug#10178)

  • The NULLIF() function could produce incorrect results if the first argument was NULL. (Bug#11142)

  • Optimizer performed range check when comparing unsigned integers to negative constants, could cause errors. (Bug#11185)

  • Cluster failed to build with gcc 4.0. (Bug#11377)

  • The LAST_DAY() failed to return NULL when supplied with an invalid argument. See Section 12.5, “Date and Time Functionsâ€?. (Bug#10568)

  • Setting @@SQL_MODE = NULL caused an erroneous error message. (Bug#10732)

  • Server crashed when using GROUP BY on the result of a DIV operation on a DATETIME value. (Bug#11385)

  • Possible NULL values in BLOB columns could crash server when BLOB used in GROUP BY. (Bug#11295)

  • Fixed 64 bit compiler warning for packet length in replication. (Bug#11064)

  • CASE function returns incorrect result when its arguments are not constants and its return value is put into a regular or temporary table (temporary == created by SQL engine for UNION/non-indexed GROUP BY and such operations). (Bug#10151)

  • A problem with the my_global.h file caused compilation of MySQL to fail on single-processor Linux systems running 2.6 kernels. (Bug#10364)

  • Queries against a table using a compound index based on the length of a UTF-8 text column produced incorrect results. For example, given a table with an index defined as shown:

    CREATE TABLE t (
      id INT NOT NULL,
      city VARCHAR(20) NOT NULL,
      KEY (city(7),id)
    ) TYPE=MYISAM CHARACTER SET=utf8;
    

    Assuming that suitable data has been inserted into the table, then a query such as SELECT * FROM t WHERE city = 'Durban'; would fail. (Bug#10253)

  • The mysqlhotcopy script was not parsing the output of SHOW SLAVE STATUS correctly when called with the --record_log_pos option. (Bug#7967)

  • An UPDATE query containing a subquery caused replication to fail. (Bug#9361)

  • Last insert expected from a query of the form INSERT ... SELECT ... ON DUPLICATE KEY UPDATE would fail. (Bug#9728)

  • INSERT ... SELECT ... ON DUPLICATE KEY UPDATE produced inaccurate results. (Bug#10886)

  • SELECT DISTINCT ... GROUP BY constant returned multiple rows (it should return a single row). (Bug#8614)

  • Queries of the form UPDATE ... (SELECT ... ) SET ... run on a replication master would crash all the slaves. (CVE-2004-4380, Bug#10442)

  • OPTIMIZE of InnoDB table did not return 'Table is full' if out of tablespace. (Bug#8135)

  • Queries with ROLLUP returned wrong results for expressions containingGROUP BY columns. (Bug#7894)

  • Fixed hang/crash with Boolean full-text search where a query contained more query terms that one-third of the query length (it could be achieved with truncation operator: 'a*b*c*d*'). (Bug#7858)

  • The mysql client would output a prompt twice following input of very long strings, because it incorrectly assumed that a call to the _cgets() function would clear the input buffer. (Bug#10840)

  • A bug in FIELD() function caused the value list to contain NULL. (Bug#10944)

  • A three byte buffer overflow in the client functions could cause improper exiting of the client when reading a command from the user. (Bug#10841)

  • Fixed a problem with the cp1250_czech_cs collation that caused some LIKE comparisons to fail. (Bug#9759)

  • Fixed a problem resolving table names with lower_case_table_names=2 when the table name lettercase differed in the FROM and WHERE clauses. (Bug#9500)

  • Fixed server crash due to some internal functions not taking into account that for multi-byte character sets, CHAR and VARCHAR columns could exceed 255 bytes. (Bug#11167)

  • Fixed a portability problem testing for crypt() support that caused compilation problems when using OpenSSL/yaSSL on HP-UX and Mac OS X. (Bug#10675, Bug#11150)

  • The hostname cache was not working. (Bug#10931)

  • For a MERGE table with MyISAM tables in other, symlinked, databases, SHOW CREATE TABLE reported the MyISAM tables using the name of the symlinked directory rather than the database name. (Bug#8183)

  • Fixed a server crash resulting from an attempt to allocate too much memory when GROUP BY blob_col and COUNT(DISTINCT) were used. (Bug#11088)

  • The incorrect sequence of statements HANDLER tbl_name READ index_name NEXT without a preceding HANDLER tbl_name READ index_name = (value_list) for an InnoDB table resulted in a server crash rather than an error. (Bug#5373)

  • SHOW WARNINGS with a LIMIT 0 clause returned all messages rather than an empty result set. (Bug#11095)

  • On Windows, with lower_case_table_names set to 2, using ALTER TABLE to alter a MEMORY or InnoDB table that had a mixed-case name also improperly changed the name to lowercase. (Bug#9660)

  • The server timed out SSL connections too quickly on Windows. (Bug#8572)

  • Inserting a DOUBLE value into a utf8 string column crashed the server on Windows. (Bug#10714)

  • Executing LOAD INDEX INTO CACHE for a table while other threads where selecting from the table caused a deadlock. (Bug#10602)

  • Fixed a server crash resulting from CREATE TABLE ... SELECT that selected from a table being altered by ALTER TABLE. (Bug#10224)

  • Fixed a server crash resulting from invalid string pointer when inserting into the mysql.host table. (Bug#10181)

  • GROUP_CONCAT() with DISTINCT and WITH ROLLUP ignored DISTINCT for some rows. (Bug#7405)

  • Fixed a problem creating the result set for a UNION that involved long string values. Values were not being converted correctly to TEXT values. (Bug#10025)

  • Locking for CREATE TABLE ... SELECT for InnoDB tables was too weak. It allowed INSERT statements issued for the created table while the CREATE TABLE statement was still running to appear in the binary log before the CREATE TABLE statement. (Bug#6678)

  • InnoDB: In DROP DATABASE, check for all referencing tables from other databases before dropping any tables. (Bug#10335)

  • InnoDB: Fix bug: InnoDB wrongly complained in the .err log that MySQL is trying to drop a non-existent table, if tablespace ran out. (Bug#10607)

  • Fixed an overly strict debugging assertion that caused debug server builds to fail for some col_name = const_expr, where const_expr was a constant expression such as a subquery. (Bug#10020)

  • SUBSTR() did not work properly for input in the ucs2 character set. (Bug#10344)

  • Fixed a problem causing an incorrect result for columns that include an aggregate function as part of an expression when WITH ROLLUP is added to GROUP BY. (Bug#7914)

  • Fixed a server crash for INSERT ... ON DUPLICATE KEY UPDATE with MERGE tables, which do not have unique indexes. (Bug#10400)

  • CREATE TABLE t AS SELECT UUID() created a VARCHAR(12) column, which is too small to hold the 36-character result from UUID(). (Bug#9535)

  • Portability fix for Cygwin: Don't use #pragma interface or #pragma implementation in source files. (Bug#10241)

  • Fixed a mysqldump crash that occurred with the --complete-insert option when dumping tables with a large number of long column names. (Bug#10286)

  • ALTER TABLE ... ENABLE INDEXES treated NULL values as equal when collecting index statistics for MyISAM tables, resulting in different statistics from those generated by ANALYZE TABLE and causing the optimizer to make poor index choices later. The same problem occurred for bulk insert statistics collection. Now NULL values are treated as unequal, just as for ANALYZE TABLE. (Bug#9622)

D.1.12. Changes in release 4.1.12 (13 May 2005)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

Note: The fix for interpretation of MERGE table .MRG files (Bug#10687) was made for Windows builds after MySQL 4.1.12 was released and is present in MySQL 4.1.12a.

Functionality added or changed:

  • Incompatible change: The behavior of LOAD DATA INFILE and SELECT ... INTO OUTFILE has changed when the FIELDS TERMINATED BY and FIELDS ENCLOSED BY values both are empty. Formerly, a column was read or written the display width of the column. For example, INT(4) was read or written using a field with a width of 4. Now columns are read and written using a field width wide enough to hold all values in the field. However, data files written before this change was made might not be reloaded correctly with LOAD DATA INFILE for MySQL 4.1.12 and up. This change also affects data files read by mysqlimport and written by mysqldump --tab, which use LOAD DATA INFILE and SELECT ... INTO OUTFILE. For more information, see Section 13.2.5, “LOAD DATA INFILE Syntaxâ€?. (Bug#12564)

  • Added --debug option to my_print_defaults.

  • When the server cannot read a table because it cannot read the .frm file, print a message that the table was created with a different version of MySQL. (This can happen if you create tables that use new features and then downgrade to an older version of MySQL.) (Bug#10435)

  • New /*> prompt for mysql. This prompt indicates that a /* ... */ comment was begun on an earlier line and the closing */ sequence has not yet been seen. (Bug#9186)

  • Added cp1250_croatian_ci collation. (Bug#6505)

  • Updated version of libedit to 2.9. (Bug#2596)

  • InnoDB: When the maximum length of SHOW INNODB STATUS output would be exceeded, truncate the beginning of the list of active transactions, instead of truncating the end of the output. (Bug#5436)

  • InnoDB: When FOREIGN_KEY_CHECKS=0, ALTER TABLE and RENAME TABLE will ignore any type incompatibilities between referencing and referenced columns. Thus, it will be possible to convert the character sets of columns that participate in a foreign key. Be sure to convert all tables before modifying any data! (Bug#9802)

  • InnoDB: Setting the initial AUTO_INCREMENT value for an InnoDB table using CREATE TABLE ... AUTO_INCREMENT = n now works, and ALTER TABLE ... AUTO_INCREMENT = n resets the current value. (Bug#7061)

  • InnoDB: If innodb_locks_unsafe_for_binlog option set and isolation level of the transaction is not set to serializable then InnoDB uses a consistent read for select in clauses like INSERT INTO ... SELECT and UPDATE ... (SELECT) that do not specify FOR UPDATE or IN SHARE MODE. Thus no locks are set to rows read from selected table.

  • Previously in MySQL 4.1, an Illegal mix of collations error occurred when mixing strings from same character set when one had a non-binary collation and the other a binary collation. Now the binary collation takes precedence, so that both strings are treated as having the binary collation. This restores compatibility with MySQL 4.0 behavior.

  • Added the cp932 Japanese character set.

Bugs fixed:

  • Security fix: If mysqld was started with --user=non_existent_user, it would run using the privileges of the account it was invoked from, even if that was root. (Bug#9833)

  • Fixed handling of floats and doubles when using prepared statement API in the embedded server. (Bug#10443)

  • An error in the implementation of the MyISAM compression algorithm caused myisampack to fail with very large sets of data (total size of all the records in a single column needed to be >= 3 GB in order to trigger this issue). (Bug#8321)

  • When SELECT constant was the final SELECT in a UNION, a trailing LIMIT ... worked, but a trailing ORDER BY ... or ORDER BY ... LIMIT ... did not. (Bug#10032)

  • MERGE tables could fail on Windows due to incorrect interpretation of pathname separator characters for filenames in the .MRG file. (Bug#10687)

  • CHAR and VARCHAR columns that used the sjis character set were not being saved correctly, causing the following columns to be corrupted. (Bug#10493)

  • For a user-defined function invoked from within a prepared statement, the UDF's initialization routine was invoked for each execution of the statement, but the deinitialization routine was not. (It was invoked only when the statement was closed.) For UDFs that have an expensive deinit function (such as myperl), this bugfix will have negative performance consequences. (Bug#9913)

  • Fix CREATE TABLE ... LIKE to work when lower_case_table_names is set on a case-sensitive filesystem and the source table name is not given in lowercase. (Bug#9761)

  • my_print_defaults was ignoring the --defaults-extra-file option or crashing when the option was given. (Bug#9136, Bug#9851)

  • For MERGE tables, avoid writing absolute pathnames in the .MRG file for the names of the constituent MyISAM tables so that if the data directory is moved, MERGE tables will not break. For mysqld, write just the MyISAM table name if it is in the same database as the MERGE table, and a path relative to the data directory otherwise. For the embedded servers, absolute pathnames may still be used. (Bug#5964)

  • Corrected the error message for exceeding the MAX_CONNECTIONS_PER_HOUR limit to say max_connections_per_hour instead of max_connections. (Bug#9947)

  • Fixed incorrect memory block allocation for the query cache in the embedded server. (Bug#9549)

  • Fixed a configure problem in checking for capability of performing atomic operations. (Bug#7970)

  • net_read_timeout and net_write_timeout were not being respected on Windows. (Bug#9721)

  • An error occurred if you specified a default value of TRUE or FALSE for a BOOL column. (Bug#9666)

  • Corrected some failures of prepared statements for SQL (PREPARE plus EXECUTE) to return all rows for some SELECT statements. (Bug#9096, Bug#9777)

  • Remove extra slashes in --tmpdir value (for example, convert /var//tmp to /var/tmp, because they caused various errors. (Bug#8497)

  • Fixed a sort order problem with the latin2_croatian_ci collation. All tables that have indexes that use this collation will be treated as crashed. After upgrading, for each such table, you must use CHECK TABLE and possibly repair the table. (Bug#6505)

  • mysqld was not checking whether the PID file was successfully created. (Bug#5843)

  • With DISTINCT CONCAT(col,...) returned incorrect results when the arguments to CONCAT() were columns with an integer data type declared with a display width narrower than the values in the column. (For example, if an INT(1) column contain 1111.) (Bug#4082)

  • Fixed configure to properly recognize whether NPTL is available on Linux. (Bug#2173)

  • Fixed a portability problem in compiling mysql.cc with VC++ on Windows. (Bug#10245)

  • CAST(string_argument AS UNSIGNED) didn't work for big integers above the signed range. Now this function and CAST(string_argument AS SIGNED) also produces warnings for wrong string arguments. (Bug#7036)

  • Fixed compile problem with MinGW. Thanks to Nils Durner for patch! (Bug#8872)

  • MySQL no longer automatically blocks IP numbers for which gethostbyname_r() fails when the reason is that the DNS server is down. Thanks to Jeremy Cole for patch. (Bug#8467)

  • Fixed a bug in the key cache that caused a core dump. (Bug#10167)

  • The --delimiter option for the nds_select program was non-functional. (Bug#10287)

  • MAX() for an INT UNSIGNED (unsigned 4-byte integer) column could return negative values if the column contained values larger than 231. (Bug#9298)

  • Fixed a deadlock resulting from use of FLUSH TABLES WITH READ LOCK while an INSERT DELAYED statement is in progress. (Bug#7823)

  • Multiple-table updates could produce spurious data-truncation warnings if they used a join across columns that are indexed using a column prefix. (Bug#9103)

  • Use of a subquery that used WITH ROLLUP in the FROM clause of the main query sometimes resulted in a Column cannot be null error. (Bug#9681)

  • RENAME TABLE for an ARCHIVE table failed if the .arn file was not present. (Bug#9911)

  • Fixed an optimizer problem where extraneous comparisons between NULL values in indexed columns were being done for operators such as = that are never true for NULL. (Bug#8877)

  • SELECT ROUND(expr) produced a different result from CREATE TABLE ... SELECT ROUND(expr). (Bug#9837)

  • Fixed some awk script portability problems in cmd-line-utils/libedit/makelist.sh. (Bug#9954)

  • Changed metadata for result of SHOW KEYS: Data type for Sub_part column now is SMALLINT rather than TINYINT because key part length can be longer than 255. (Bug#9439)

  • Fixed some problems with myisampack on 64-bit systems that resulted in segmentation violations. (Bug#9487)

  • Fixed an optimizer bug in computing the union of two ranges for the OR operator. (Bug#9348)

  • Fixed an index corruption problem for MyISAM tables that resulted from the 4.1 behavior of padding values with blanks for comparison: Dumping a table with mysqldump, reloading it, and then re-running the binary log against it crashed the index and necessitated a repair. (Bug#9188)

  • Fixed a segmentation fault in mysqlcheck that occurred when the last table checked in --auto-repair mode returned an error (such as the table being a MERGE table). (Bug#9492)

  • Fixed the client/server protocol for prepared statements so that reconnection works properly when the connection is killed while reconnect is enabled. (Bug#8866)

  • INSERT ... ON DUPLICATE KEY UPDATE incorrectly updated a TIMESTAMP column to the current timestamp, even if the update list included col_name = col_name for that column to prevent the update. (Bug#7806)

  • Starting mysqld with the --skip-innodb and --default-storage-engine=innodb (or --default-table-type=innodb caused a server crash. (Bug#9815)

  • Queries containing CURRENT_USER() incorrectly were registered in the query cache. (Bug#9796)

  • A server installed as a Windows service and started with --shared-memory could not be stopped. (Bug#9665)

  • mysqldump dumped core when invoked with --tmp and --single-transaction options and a non-existent table name. (Bug#9175)

  • Additional fix for mysql_server_init() and mysql_server_end() C API functions so that stopping and restarting the embedded server will not cause a crash. (Bug#7344)

  • mysql.server no longer uses non-portable alias command or LSB functions. (Bug#9852)

  • Fixed a readline-related crash in mysql when the user pressed Control-R. (Bug#9568)

  • TIMEDIFF() with a negative time first argument and positive time second argument produced incorrect results. (Bug#8068)

  • Fixed a bug that caused concurrent inserts to be allowed into the tables in the SELECT ... UNION ... part of INSERT ... SELECT ... UNION .... This could result in the incorrect order of queries in the binary log. (Bug#9922)

  • The warning message from GROUP_CONCAT() did not always indicate the correct number of lines. (Bug#8681)

  • InnoDB: ENUM and SET columns were treated incorrectly as character strings. This bug did not manifest itself with latin1 collations, but it caused malfunction with utf8. Old tables will continue to work. In new tables, ENUM and SET will be internally stored as unsigned integers. (Bug#9526)

  • InnoDB: Avoid test suite failures caused by a locking conflict between two server instances at server shutdown/startup. This conflict on advisory locks appears to be the result of a bug in the operating system; these locks should be released when the files are closed, but somehow that does not always happen immediately in Linux. (Bug#9381)

  • InnoDB: Prevent ALTER TABLE from changing the storage engine if there are foreign key constraints on the table. (Bug#5574, Bug#5670)

  • InnoDB: Fixed a deadlock without any locking, simple select and update. (Bug#7975) InnoDB now takes an exclusive lock when INSERT ON DUPLICATE KEY UPDATE is checking duplicate keys.

  • InnoDB: Fix a problem in crash recovery of .ibd files on Windows if the user used lower_case_table_names=0 or 2; the directory scan in crash recovery forgot to put all paths to lower case, so that the tablespace name would be consistent with the internal data dictionary of InnoDB.

  • InnoDB: Add fault tolerance in the scan of .ibd files at a crash recovery; formerly a single failure of readdir_get_next caused the rest of the directory to be skipped.

  • InnoDB: Fix assertion failures of type ut_a(cursor->old_stored == BTR_PCUR_OLD_STORED) and prebuilt->template_type == 0. This bug was introduced in 4.1.10 and 4.0.24. (Bug#9670)

  • InnoDB: Fix a performance bug: At the shutdown, write the latest lsn only to the first pages of the ibdata files of the system tablespace, NOT to the .ibd files; writing to tens of thousands .ibd files can take minutes.

  • Fix for auto-increment not working with INSERT..SELECT and NDB storage engine. (Bug#9675)

D.1.13. Changes in release 4.1.11 (01 April 2005)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

Functionality added or changed:

  • ONLY_FULL_GROUP_BY no longer is included in the ANSI composite SQL mode. (Bug#8510)

  • mysqld_safe will create the directory where the UNIX socket file is to be located if the directory does not exist. This applies only to the last component of the directory pathname. (Bug#8513)

  • The coercibility for the return value of functions such as USER() or VERSION() now is “system constantâ€? rather than “implicit.â€? This makes these functions more coercible than column values so that comparisons of the two do not result in Illegal mix of collations errors. COERCIBILITY() was modified to accommodate this new coercibility value. See Section 12.9.3, “Information Functionsâ€?.

  • User variable coercibility has been changed from “coercibleâ€? to “implicit.â€? That is, user variables have the same coercibility as column values.

  • NULL now is considered more coercible than string constants. This resolves some Illegal mix of collations conflicts.

  • Modified the parser to allow SELECT statements following the UNION keyword to be subqueries in parentheses. (Bug#2435)

  • For slave replication servers started with --replicate-* options, statements that should not be replicated according those options no longer are written to the slave's general query log. (Bug#8297)

  • Added SQL_NOTES session variable to cause Note-level warnings not to be recorded. (Bug#6662)

  • InnoDB: Commit after every 10,000 copied rows when executing CREATE INDEX, DROP INDEX or OPTIMIZE TABLE, which are internally implemented as ALTER TABLE. This makes it much faster to recover from an aborted operation.

  • Added a new global system variable slave_transaction_retries: If the replication slave SQL thread fails to execute a transaction because of an InnoDB deadlock or exceeded InnoDB's innodb_lock_wait_timeout or NDBCluster's TransactionDeadlockDetectionTimeout or TransactionInactiveTimeout, it automatically retries slave_transaction_retries times before stopping with an error. The default in MySQL 4.1 is 0. You must explicitly set the value greater than 0 to enable the “retryâ€? behavior. (In MySQL 5.0.3 or newer, the default is 10.) (Bug#8325)

  • Added --with-big-tables compilation option to configure. (Previously it was necessary to pass -DBIG_TABLES to the compiler manually in order to enable large table support.) See Section 2.9.2, “Typical configure Optionsâ€?, for details.

  • Added configuration directives !include and !includedir for including option files and searching directories for option files. See Section 4.3.2, “Using Option Filesâ€?, for usage.

Bugs fixed:

  • Disallow use of SESSION or GLOBAL for user variables. (Bug#9286)

  • The use of XOR together with NOT ISNULL() erroneously resulted in some outer joins being converted to inner joins by the optimizer. (Bug#9017)

  • Fixed utf8_spanish2_ci and ucs2_spanish2_ci collations to not consider ‘r’ equal to ‘rr’. If you upgrade to this version from an earlier version, you should rebuild the indexes of affected tables. (Bug#9269)

  • Allow extra HKSCS and cp950 characters (big5 extension characters) to be accepted in big5 columns. (Bug#9357)

  • BLOB(M) and TEXT(M) columns, with M less than 256, were being created as BLOB and TEXT columns rather than TINYBLOB or TINYTEXT columns. (Bug#9303)

  • Fixed a problem with INSERT ... SELECT ... ON DUPLICATE KEY UPDATE where a column named in the insert list and in the ON DUPLICATE KEY UPDATE clause was erroneously declared to be ambiguous. (Bug#8147)

  • In prepared statements, subqueries containing parameters were erroneously treated as const tables during preparation, resulting in a server crash. (Bug#8807)

  • Fixed a problem with OPTIMIZE TABLE for InnoDB tables being written twice to the binary log. (Bug#9149)

  • Provide more informative error messages in clustered setting when a query is issued against a table that has been modified by another mysqld server. (Bug#6762)

  • For MyISAM tables, REPAIR TABLE no longer discard rows that have incorrect checksum. (Bug#9824)

  • Depending on index statistics, GROUP BY col1, col2, ... could return incorrect results if the first table processed for a join had several indexes that cover the grouped columns. (Bug#9213)

  • Fixed incorrect evaluation of ALL/ANY subqueries that contain a HAVING clause. (Bug#9350)

  • Fixed server crash when left expression of IN/ALL/ANY comparison was a subquery. (Bug#8888)

  • Fixed option-parsing code for the embedded server to understand K, M, and G suffixes for the net_buffer_length and max_allowed_packet options. (Bug#9472)

  • Fixed a crash when using TIMESTAMP columns with no minute or second parts in GROUP BY with the new system variable set to 1. (Bug#9401)

  • If a MyISAM table on Windows had INDEX DIRECTORY or DATA DIRECTORY table options, mysqldump dumped the directory pathnames with single-backslash pathname separators. This would cause syntax errors when importing the dump file. mysqldump now changes ‘\’ to ‘/’ in the pathnames on Windows. (Bug#6660)

  • Fixed a server crash caused by use of NOW() is a subquery. (Bug#8824)

  • Fixed problems with static variables to allow building on Fedora Core 3. (Bug#6554)

  • Some user variables were not being handled with “implicitâ€? coercibility. (Bug#9425)

  • Setting the max_error_count system variable to 0 resulted in a setting of 1. (Bug#9072)

  • Fixed a collation coercibility problem that caused a union between binary and non-binary columns to fail. (Bug#6519)

  • Fixed a problem with the tee command in mysql that resulted in mysql crashing. (Bug#8499)

  • On Windows, create shared memory objects with the proper access rights to make them usable when the client and server are running under different accounts. (Bug#8226)

  • Bundled zlib in the source distribution was upgraded to 1.2.2. (Bug#9118)

  • Fixed server crash resulting from queries that combined SELECT DISTINCT, SUM(), and ROLLUP. (Bug#8615)

  • Incorrect results were returned from queries that combined SELECT DISTINCT, GROUP BY , and ROLLUP. (Bug#8616)

  • Fixed a bug that under certain circumstances could allow a privilege escalation via database wildcards in GRANT. (CVE-2004-0957)

  • Too many rows were returned from queries that combined ROLLUP and LIMIT if SQL_CALC_FOUND_ROWS was given. (Bug#8617)

  • mysqldump misinterpreted ‘_’ and ‘%’ characters in the names of tables to be dumped as wildcard characters. (Bug#9123)

  • Made the relay_log_space_limit system variable show up in the output of SHOW VARIABLES. (Bug#7100)

  • Use of GROUP_CONCAT(x) in a subquery, where x was an alias to a column in the outer query, resulted in a server crash. (Bug#8656)

  • The CHARSET(), COLLATION(), and COERCIBILITY() functions sometimes returned NULL. CHARSET() and COLLATION() returned NULL when given any of these arguments that evaluated to NULL: A system function such as DATABASE(); a column value; and a user variable. Now CHARSET() and COLLATION() return the system character set and collation; the column character set and collation; and binary. COERCIBILITY(NULL) now returns “ignorableâ€? coercibility rather than NULL. (Bug#9129)

  • Expressions involving nested CONCAT() calls and character set conversion of string constants could return an incorrect result. (Bug#8785)

  • The MEMORY storage engine did not properly increment an AUTO_INCREMENT column if there was a second composite index that included the column. (Bug#8489)

  • Fixed a bug in the filesort routine such that killing a filesort could cause an assertion failure. (Bug#8799)

  • REPAIR TABLE did not invalidate query results in the query cache that were generated from the table. (Bug#8480)

  • If max_join_size was set, a query containing a subquery that exceeded the examined-rows limit could hang. (Bug#8726)

  • Mixed-case database and table names in the grant tables were ignored for authentication if the lower_case_table_names system variable was set. GRANT will not create such privileges when lower_case_table_names is set, but it is possible to create them by direct manipulation of the grant tables, or that old grant records were present before setting the variable. (Bug#7989)

  • AES_DECRYPT(col_name,key) could fail to return NULL for invalid values in col_name, if col_name was declared as NOT NULL. (Bug#8669)

  • Ordering by unsigned expression (more complex than a column reference) was treating the value as signed, producing incorrectly sorted results. (Bug#7425)

  • HAVING was treating unsigned columns as signed. (Bug#7425)

  • Fixed a problem with boolean full-text searches on utf8 columns where a double quote in the search string caused a server crash. (Bug#8351)

  • MIN(col_name) and MAX(col_name) could fail to produce the correct result if col_name was contained in multiple indexes and the optimizer did not choose the first index that contained the column. (Bug#8893)

  • Table creation for a MyISAM table failed if DATA DIRECTORY or INDEX DIRECTORY options were given that specified the pathname to the database directory where the table files would be created by default. (Bug#8707)

  • Fixed a problem with LIKE pattern-matching for strings with the cp1251_bin binary collation. (Bug#8560)

  • A join on two tables failed when each contained a BIGINT UNSIGNED column that were compared when their values exceeded 263 – 1. The match failed and the join returned no rows. (Bug#8562)

  • For a query with both GROUP BY and COUNT(DISTINCT) clauses and a FROM clause with a subquery, NULL was returned for any VARCHAR column selected by the subquery. (Bug#8218)

  • Fixed an optimizer bug that caused incorrectly ordered result from a query that used a FULLTEXT index to retrieve rows and there was another index that was usable for ORDER BY. For such a query, EXPLAIN showed fulltext join type, but regular (not FULLTEXT) index in the Key column. (Bug#6635)

  • For a statement string that contained multiple slow queries, only the last one would be written to the slow query log. (Bug#8475)

  • When the server was started with --skip-name-resolve, specifying hostname values that included netmasks in GRANT statements did not work. (Bug#8471)

  • The --set-character-set option for myisamchk was changed to --set-collation. The value needed for specifying how to sort indexes is a collation name, not a character set name. (Bug#8349)

  • Hostname matching didn't work if a netmask was specified for table-specific privileges. (Bug#3309)

  • Binary data stored in BLOB or BINARY columns would be erroneously dumped if mysqldump was invoked with --hex-blob and --skip-extended-insert arguments. This happened if data contained characters larger then 0x7F (Bug#8830).

  • Corruption of MyISAM table indexes could occur with TRUNCATE TABLE if the table had already been opened. For example, this was possible if the table had been opened implicitly by selecting from a MERGE table that mapped to the MyISAM table. The server now issues an error message for TRUNCATE TABLE under these conditions. (Bug#8306)

  • Fixed handling of table-name matching in mysqlhotcopy to accommodate DBD::mysql 2.9003 and up (which implement identifier quoting). (Bug#8136)

  • In the mysql_real_escape_string() C API function, when a multi-byte character is encountered that is illegal in the current character set, escape only the first byte, not each byte. This avoids creating a valid character from an invalid one. (Bug#8378)

  • Fixed a problem with the cp1250_czech_cs collation that caused empty literal strings not to compare equal to empty character columns. (Bug#8840)

  • Fixed a problem in index cost calculation that caused a USE INDEX or FORCE INDEX hint not to be used properly for a LEFT JOIN across indexed BLOB columns. (Bug#7520)

  • The data type for MAX(datetime_col) was returned as VARCHAR rather than DATETIME if the query included a GROUP BY clause. (Bug#5615)

  • FOUND_ROWS() returned an incorrect value for preceding SELECT statements that used no table or view. (Bug#6089)

  • 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 character now is escaped, not just the next byte. (Bug#8303)

  • InnoDB: Work around a problem in AIX 5.1 patched with ML7 security patch: InnoDB would refuse to open its ibdata files, complaining about an operating system error 0.

  • InnoDB: Fixed a memory corruption bug if one created a table with a primary key that contained at least two column prefixes. An example: CREATE TABLE t(a char(100), b tinyblob, PRIMARY KEY(a(5), b(10))).

  • InnoDB: Do not try to space-pad BLOB columns containing ucs2 characters. This avoids an assertion failure that was introduced when fixing Bug#7350. (Bug#8771)

  • InnoDB: Fixed a bug: MySQL 4.1.8 to 4.1.10 could complain that an InnoDB table created with MySQL 3.23.49 or earlier was in the new compact InnoDB table format of 5.0.3 or later, and InnoDB would refuse to use that table. There is nothing wrong with the table, it is mysqld that is in error. Workaround: wait that 4.1.11 is released before doing an upgrade, or dump the table and re-create it with any MySQL version >= 3.23.50 before upgrading.

  • InnoDB: Honor the --tmpdir startup option when creating temporary files. Previously, InnoDB temporary files were always created in the temporary directory of the operating system. On Netware, InnoDB will continue to ignore --tmpdir. (Bug#5822)

  • InnoDB: If MySQL wrote to its binlog, but for some reason trx->update_undo and trx->insert_undo were NULL in InnoDB, then trx->commit_lsn was garbage, and InnoDB could assert in the log flush of trx_commit_complete_for_mysql(). (Bug#9277)

  • InnoDB: If InnoDB cannot allocate memory, keep retrying for 60 seconds before we intentionally crash mysqld; maybe the memory shortage is just temporary.

  • InnoDB: If one used LOCK TABLES, created an InnoDB temp table, and did a multiple-table update where a MyISAM table was the update table and the temp table was a read table, then InnoDB asserted in row0sel.c because n_mysql_tables_in_use was 0. Also, we remove the assertion altogether and just print an error to the .err log if this important consistency check fails. (Bug#8677)

  • mysqldump now avoids writing SET NAMES to the dump output if the server is older than version 4.1 and would not understand that statement. (Bug#7997)

  • Fixed a bug in my_print_defaults that made it ignore the --defaults-extra-file and --defaults-file options.

  • Retrieving from a view defined as a SELECT that mixed UNION ALL and UNION DISTINCT resulted in a different result than retrieving from the original SELECT. (Bug#6565)

  • Worked around a bug in support for NSS support in glibc when static linking is used and LDAP is one of the NSS sources. The workaround is to detect when the bug causes a segmentation fault and issue a diagnostic message with information about the problem. (Bug#3037, Bug#4872)

  • If the mysql prompt was configured to display the default database name, and that database was dropped, mysql did not update the prompt. (Bug#4802)

  • perror was printing a spurious extra line of output ("Error code ###: Unknown error ###" printed directly before the correct line with the error message). (Bug#8517)

  • The CHAR() function was not ignoring NULL arguments, contrary to the documentation. (Bug#6317)

  • Neither SHOW ERRORS nor SHOW WARNINGS were displaying Error-level messages. (Bug#6572)

  • Creating a table using a name containing a character that is illegal in character_set_client resulted in the character being stripped from the name and no error. The character now is considered an error. (Bug#8041)

  • Fixed a problem with the Cyrillic letters I and SHORT I being treated the same by the utf8_general_ci collation. (Bug#8385)

  • The MAX_CONNECTIONS_PER_HOUR resource limit was not being reset hourly and thus imposed an absolute limit on number of connections per account until the server is restarted or the limits flushed. (Bug#8350)

  • With a database was dropped with lower_case_table_names=2, tables in the database also were dropped but not being flushed properly from the table cache. If the database was re-created, the tables also would appear to have been re-created. (Bug#8355)

  • Changed mysql_server_end() C API function to restore more variables to their initial state so that a subsequent call to mysql_server_init() would not cause a client program crash. (Bug#7344)

  • Fixed a problem with accented letters improperly being treated as distinct with the utf_general_ci collation. (Bug#7878)

  • ENUM and SET columns in privilege tables incorrectly had a case-sensitive collation, resulting in failure of assignments of values that did not have the same lettercase as given in the column definitions. The collation was changed to be case insensitive. (Bug#7617)

  • An expression that tested a case-insensitive character column against string constants that differed in lettercase could fail because the constants were treated as having a binary collation. (For example, WHERE city='London' AND city='london' could fail.) (Bug#7098, Bug#8690)

  • The output of the STATUS (\s) command in mysql had the values for the server and client character sets reversed. (Bug#7571)

  • If the slave was running with --replicate-*-table options which excluded one temporary table and included another, and the two tables were used in a single DROP TEMPORARY TABLE IF EXISTS statement, as the ones the master automatically writes to its binary log upon client's disconnection when client has not explicitly dropped these, the slave could forget to delete the included replicated temporary table. Only the slave needs to be upgraded. (Bug#8055)

  • Treat user variables as having IMPLICIT derivation (coercibility) to avoid “Illegal mix of collationsâ€? errors when replicating user variables. (Bug#6676)

  • When setting integer system variables to a negative value with SET VARIABLES, the value was treated as a positive value modulo 232. (Bug#6958)

  • Fixed a bug in bundled readline library that caused segmentation fault in mysql when user entered Shift+Enter. (Bug#5672)

  • Fix conversion of strings -> double to get higher accuracy for floating point values that are integers, like: 123.45E+02 (Bug#7840).

  • Fixed a bug in MATCH ... AGAINST in natural language mode that could cause a server crash if the FULLTEXT index was not used in a join (EXPLAIN did not show fulltext join mode) and the search query matched no rows in the table (Bug#8522).

  • Platform and architecture information in version information produced for --version option on Windows was always Win95/Win98 (i32). More accurately determine platform as Win32 or Win64 for 32-bit or 64-bit Windows, and architecture as ia32 for x86, ia64 for Itanium, and axp for Alpha. (Bug#4445)

  • Fixed a rare race condition which could lead to FLUSH TABLES WITH READ LOCK hanging. (Bug#8682)

  • Fixed a bug in replication that caused the master to stamp generated statements (such as SET commands) with an error_code intended only for another statement. This could happen, for example, when a statements generates a duplicate key error on the master but must be replicated. (Bug#8412)

  • If multiple semicolon-separated statements were received in a single packet, they were written to the binary log as a single event rather than as separate per-statement events. For a server serving as a replication master, this caused replication to fail when the event was sent to slave servers. (Bug#8436)

D.1.14. Changes in release 4.1.10 (12 February 2005)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

Note: The security improvements related to creation of table files and to user-defined functions were made after MySQL 4.1.10 was released and are present in MySQL 4.1.10a. We would like to thank Stefano Di Paola for making us aware of these.

Functionality added or changed:

  • Added back faster subquery execution from 4.1.8. This adds also back a bug from 4.1.8 in comparing NULL to the value of a subquery. See Section A.8.4, “Open Issues in MySQLâ€?.

  • Security improvement: The server creates .frm, .MYD, .MYI, .MRG, .ISD, and .ISM table files only if a file with the same name does not already exist. Thanks to Stefano Di Paola for finding and informing us about this issue. (CVE-2005-0711)

  • Security improvement: User-defined functions should have at least one symbol defined in addition to the xxx symbol that corresponds to the main xxx() function. These auxiliary symbols correspond to the xxx_init(), xxx_deinit(), xxx_reset(), xxx_clear(), and xxx_add() functions. mysqld by default no longer loads UDFs unless they have at least one auxiliary symbol defined in addition to the main symbol. The --allow-suspicious-udfs option controls whether UDFs that have only an xxx symbol can be loaded. By default, the option is off. mysqld also checks UDF filenames when it reads them from the mysql.func table and rejects those that contain directory pathname separator characters. (It already checked names as given in CREATE FUNCTION statements.) See Section 19.2.4.1, “UDF Calling Sequences for Simple Functionsâ€?, Section 19.2.4.2, “UDF Calling Sequences for Aggregate Functionsâ€?, and Section 19.2.4.6, “User-Defined Function Security Precautionsâ€?. Thanks to Stefano Di Paola for finding and informing us about this issue. (CVE-2005-0709, CVE-2005-0710)

  • Setting the connection collation to a value different from the server collation followed by a CREATE TABLE statement that included a quoted default value resulted in a server crash. (Bug#8235)

  • Thread stack size was increased from 192KB to 256KB on Linux/IA-64 (too small stack size was causing server crashes on some queries). (Bug#8391)

  • From the Windows distribution, predefined accounts without passwords for remote users ("root@%", "@%") were removed (other distributions never had them).

  • Added mysql_library_init() and mysql_library_end() as synonyms for the mysql_server_init() and mysql_server_end() C API functions. mysql_library_init() and mysql_library_end() are #define symbols, but the names more clearly indicate that they should be called when beginning and ending use of a MySQL C API library no matter whether the application uses libmysqlclient or libmysqld. (Bug#6149)

  • The server now issues a warning when lower_case_table_names=2 and the data directory is on a case-sensitive filesystem, just as when lower_case_table_names=0 on a case-insensitive filesystem. (Bug#7887)

  • The server now issues a warning to the error log when it encounters older tables that contain character columns that might be interpreted by newer servers to have a different column length. (Bug#6913) See Section 2.11.1, “Upgrading from MySQL 4.0 to 4.1â€?, for a discussion of this problem and what to do about it.

  • InnoDB: When MySQL/InnoDB is compiled on Mac OS X 10.2 or earlier, detect the operating system version at run time and use the fcntl() file flush method on Mac OS X versions 10.3 and later. In Mac OS X, fsync() does not flush the write cache in the disk drive, but the special fcntl() does; however, the flush request is ignored by some external devices. Failure to flush the buffers may cause severe database corruption at power outages.

  • InnoDB: A shared record lock (LOCK_REC_NOT_GAP) is now taken for a matching record in the foreign key check because inserts can be allowed into gaps.

  • InnoDB: Relaxed locking in INSERT…SELECT, single table UPDATE…SELECT and single table DELETE…SELECT clauses when innodb_locks_unsafe_for_binlog is used and isolation level of the transaction is not serializable. InnoDB uses consistent read in these cases for a selected table.

Bugs fixed:

  • FOUND_ROWS() returned an incorrect value after a SELECT SQL_CALC_FOUND_ROWS DISTINCT statement that selected constants and included GROUP BY and LIMIT clauses. (Bug#7945)

  • Fixed a bug in cardinality estimations for HASH indexes of TEMPORARY tables created using MEMORY storage engine. As a result queries that were using this index (as shown by EXPLAIN) could have returned incorrect results. (Bug#8371)

  • Corrected a problem with references to DUAL where statements such as SELECT 1 AS a FROM DUAL would succeed but statements such as SELECT 1 AS a FROM DUAL LIMIT 1 would fail. (Bug#8023)

  • Fixed a server crash caused by DELETE FROM tbl_name ... WHERE ... ORDER BY tbl_name.col_name when the ORDER BY column was qualified with the table name. (Bug#8392)

  • mysqld had problems finding its language files if the basedir value was specified as a very long pathname. (Bug#8015)

  • Updates were being written to the binary log when there were binlog-do-db or binlog-ignore-db options even when there was no current database, contrary to Section 5.11.4, “The Binary Logâ€?. (Bug#6749)

  • Fixed conversion of floating-point values to character fields when the absolute value of the float was less than 1, and also fixed calculation of length for negative values. (Bug#7774)

  • Column headers in query results retrieved from the query cache could be corrupted when a non-4.1 client was served a result originally generated for a 4.1 client. The query cache was not keeping track of which client/server protocol was being used. (Bug#6511)

  • Fixed LOAD INDEX statement to actually load index in memory. (Bug#8452)

  • If multiple prepared statements were executed without retrieving their results, executing one of them again would cause the client program to crash. (Bug#8330)

  • Non-numeric values inserted into a YEAR column were being stored as 2000 rather than as 0000. (Bug#6067)

  • Fixed a failure of multiple-table updates to replicate properly on slave servers when --replicate-*-table options had been specified. (Bug#7011)

  • mysql_stmt_close() C API function was not clearing an error indicator when a previous prepare call failed, causing subsequent invocations of error-retrieving calls to indicate spurious error values. (Bug#7990)

  • Fixed failure of CREATE TABLE ... LIKE Windows when the source or destination table was located in a symlinked database directory. (Bug#6607)

  • With lower_case_table_names set to 1, mysqldump on Windows could write the same table name in different lettercase for different SQL statements. Fixed so that consistent lettercase is used. (Bug#5185) HAVING that referred to RAND() or a user-defined function in the SELECT part through an alias could cause a crash or wrong value. (Bug#8216)

  • If one used CONVERT_TZ() function in SELECT, which in its turn was used in CREATE TABLE statements, then system time zone tables were added to list of tables joined in SELECT and thus erroneous result was produced. (Bug#7899)

  • Fixed a bug in CONV() function returning unsigned BIGINT number (third argument is positive, and return value does not fit in 32 bits). (Bug#7751)

  • Fixed a failure of the IN() operator to return correct result if all values in the list were constants and some of them were using substring functions, for example, LEFT(), RIGHT(), or MID().

  • Fixed problem with SHOW INDEX reporting Sub_part values in bytes rather than characters for columns with a multi-byte character set. (Bug#7943)

  • Fixed a crash in CONVERT_TZ() function when its second or third argument was from a const table (see Section 7.2.1, “Optimizing Queries with EXPLAINâ€?). (Bug#7705)

  • Correct a problem with mysql_config, which was failing to produce proper zlib option for linking under some circumstances. (Bug#6273)

  • Fixed a problem with calculation of number of columns in row comparison against a subquery. (Bug#8020)

  • Fixed erroneous output resulting from SELECT DISTINCT combined with a subquery and GROUP BY. (Bug#7946)

  • Fixed server crash in comparing a nested row expression (for example row(1,(2,3))) with a subquery. (Bug#8022)

  • Fixed server crash resulting from certain correlated subqueries with forward references (referring to an alias defined later in the outer query). (Bug#8025)

  • Fixed server crash resulting from re-execution of prepared statements containing subqueries. (Bug#8125)

  • Removed a dependence of boolean full-text search on --default-character-set option. (Bug#8159)

  • Fixed a crash in a boolean full-text search in certain joins. (Bug#8234)

  • Fixed erroneous comparison where strings that began with CHAR(31) were considered equal to the empty string. (Bug#8134)

  • Add description of debug command to mysqladmin help output. (Bug#8207)

  • perror.exe was always returning “Unknown errorâ€? on Windows. See Section 8.18, “perror — Explain Error Codesâ€?. (Bug#7390)

  • Modify SET statements produced by mysqldump to write quoted strings using single quotes rather than double quotes. This avoids problems if the dump file is reloaded while the ANSI_QUOTES SQL mode is in effect. (Bug#8148)

  • Fixed a bug where ALTER TABLE improperly would accept an index on a TIMESTAMP column that CREATE TABLE would reject. (Bug#7884)

  • Fixed a bug in multiple-table UPDATE statements that could cause spurious Table '#sql_....' is full errors if the number of rows to update is big enough. (Bug#7788)

  • Fixed a problem where SHOW INDEX on a MERGE table could crash a debugging version of the server. (Bug#7377)

  • Fixed a problem where adding an ORDER BY clause for an indexed column would cause a SELECT to return an empty result. (Bug#7331)

  • Fixed a problem where ALTER TABLE on a TEMPORARY table with a mixed-lettercase name could cause the table to disappear when lower_case_table_names was set to 2. (Bug#7261)

  • Fixed a problem with key cache statistics being reported incorrectly by the server after receipt of a SIGHUP signal. (Bug#4285)

  • Fixed a problem that caused mysql_stmt_prepare() to be very slow when used in client programs on Windows. (Bug#5787)

  • For indexes, SHOW CREATE TABLE now displays the index type even if it is the default, for storage engines that support multiple index types. (Bug#7235)

  • Fixed a bug where the use of GROUP_CONCAT() with HAVING caused a server crash. (Bug#7769)

  • Fixed a bug where comparing the result of a subquery to a non-existent column caused a server crash on Windows. (Bug#7885)

  • Fixed a bug which caused TIMEDIFF() function to return wrong results if one of its arguments had non-zero microsecond part (Bug#7586).

  • Fixed a bug which caused TIMESTAMP columns with display width specified to be not identical to DATETIME columns when server was run in MAXDB mode (Bug#7418).

  • Fixed a bug in UNION statements that resulted in the wrong number of the examined rows reported in the slow query log.

  • Fixed a bug in a combination of -not and trunc* operators of full-text search. Using more than one truncated negative search term, was causing empty result set.

  • InnoDB: Fixed a bug introduced in 4.1.9 to the Windows version if you used innodb_file_per_table. mysqld would stop and complain about Windows error number 87 in a file operation. (See the Bugs database or the 4.1.9 change notes about a workaround for that bug in 4.1.9). (Bug#8021)

  • InnoDB: Corrected the handling of trailing spaces in the ucs2 character set. (Bug#7350)

  • InnoDB: Use native tmpfile() function on Netware. All InnoDB temporary files are created under sys:\tmp. Previously, InnoDB temporary files were never deleted on Netware.

  • InnoDB: Fix a race condition that could cause the assertion space->n_pending_flushes == 0 to fail in fil0fil.c, in fil_space_free(), in DROP TABLE or in ALTER TABLE.

  • InnoDB: ALTER TABLE ... ADD CONSTRAINT PRIMARY KEY ... complained about bad foreign key definition. (Bug#7831)

  • InnoDB: Fix a theoretical hang over the adaptive hash latch in InnoDB if one runs INSERT ... SELECT ... (binlog not enabled), or a multiple-table UPDATE or DELETE, and only the read tables are InnoDB type, the rest are MyISAM. (Bug#7879)

  • Fixed a bug in max_heap_table_size handling, that resulted in Table is full error when the table was still smaller than the limit. (Bug#7791).

  • Fixed a symlink vulnerability in the mysqlaccess script. Reported by Javier Fernandez-Sanguino Pena and Debian Security Audit Team. (CVE-2005-0004)

  • mysqlbinlog forgot to add backquotes around the collation of user variables (causing later parsing problems as BINARY is a reserved word). (Bug#7793)

  • Ensured that mysqldump --single-transaction sets its transaction isolation level to REPEATABLE READ before proceeding (otherwise if the MySQL server was configured to run with a default isolation level lower than REPEATABLE READ it could give an inconsistent dump). (Bug#7850)

  • Changed mysql client so that including \p as part of a prompt command uses the name of the shared memory connection when the connection is using shared memory. (Bug#7922)

  • Fixed a problem in the server where executing a multi-statement query more than once with the query cache active could yield incorrect result sets. (Bug#7966)

  • Fixed that a 4.1.10 slave can connect to a master < 3.23.50 without hanging (the reason for the hang is a bug in these quite old masters -- SELECT @@unknown_var hangs them -- which was fixed in MySQL 3.23.50). (Bug#7965)

  • Fixed a bug where MySQL was allowing concurrent updates (inserts, deletes) to a table if binary logging is enabled. Changed to ensure that all updates are executed in a serialized fashion, because they are executed serialized when binlog is replayed. (Bug#7879)

D.1.15. Changes in release 4.1.9 (11 January 2005)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

Functionality added or changed:

  • mysqld_safe no longer tests for the presence of the data directory when using a relatively located server binary. It just assumes the directory is there, and fails to start up if it is not. This allows the data directory location to be specified on the command line, and avoids running a server binary that was not intended. (Bug#7249)

  • The naming scheme of the Windows installation packages has changed slightly:

    • The platform suffix was changed from -win to -win32

    • The product descriptions -noinstall and -essential have been moved in front of the version number

    Examples: mysql-essential-4.1.9-win32.msi, mysql-noinstall-4.1.9-win32.zip See Section 2.3, “Installing MySQL on Windows�.

  • The Mac OS X 10.3 installation disk images now include a MySQL Preference Pane for the Mac OS X Control Panel that enables the user to start and stop the MySQL server via the GUI and activate and deactivate the automatic MySQL server startup on bootup.

  • The MySQL-shared-compat Linux RPM now includes the 3.23 as well as the 4.0 libysqlclient.so shared libraries. (Bug#6342)

  • Seconds_Behind_Master is NULL (which means “unknownâ€?) if the slave SQL thread is not running, or if the slave I/O thread is not running or not connected to master. It is zero if the SQL thread has caught up with the I/O thread. It no longer grows indefinitely if the master is idle.

  • InnoDB: Do not acquire an internal InnoDB table lock in LOCK TABLES if AUTOCOMMIT=1. This helps in porting old MyISAM applications to InnoDB. InnoDB table locks in that case caused deadlocks very easily.

  • InnoDB: Print a more descriptive error and refuse to start InnoDB if the size of ibdata files is smaller than what is stored in the tablespace header; innodb_force_recovery overrides this.

  • The MySQL server aborts immediately instead of simply issuing a warning if it is started with the --log-bin option but cannot initialize the binary log at startup (that is, an error occurs when writing to the binary log file or binary log index file).

  • The binary log file and binary log index file now behave like MyISAM when there is a "disk full" or "quota exceeded" error. See Section A.4.3, “How MySQL Handles a Full Diskâ€?.

Bugs fixed:

  • Fixed problem where running mysql_fix_privilege_tables could result in grant table columns with too-short lengths if the server character set had been set to a multi-byte character set first. (Bug#7539)

  • InnoDB: Fixed the critical bug if you enabled innodb_file_per_table in my.cnf. If you shut down mysqld, records could disappear from the secondary indexes of a table. Unfortunately, on Windows a new Bug#8021 was introduced. Windows users of innodb_file_per_table should put a line innodb_flush_method=unbuffered to their my.cnf or my.ini to work around 8021. (Bug#7496)

  • InnoDB: Fixed a bug: 32-bit mysqld binaries built on HP-UX-11 did not work with InnoDB files greater than 2 GB in size. (Bug#6189)

  • InnoDB: Return a sensible error code from DISCARD TABLESPACE if it fails because the table is referenced by a FOREIGN KEY.

  • InnoDB: Fixed a bug: InnoDB failed to drop a table in the background drop queue if the table was referenced by a FOREIGN KEY constraint.

  • InnoDB: Fixed a bug: if we dropped a table where an INSERT was waiting for a lock to check a FOREIGN KEY constraint, then an assertion would fail in lock_reset_all_on_table().

  • InnoDB: Fix a little bug: we looked at the physical size of a stored SQL NULL value from a wrong field in the index; this has probably caused no bugs visible to the user. It caused only some extra space to be used in some rare cases.

  • InnoDB: Use the fcntl() file flush method on Mac OS X versions 10.3 and up. Apple had disabled fsync() in Mac OS X for internal disk drives, which caused corruption at power outages.

  • mysqladmin password now checks whether the server has --old-passwords turned on or predates 4.1 and uses the old-format password if so. (Bug#7451)

  • Added a --default-character-set option to mysqladmin to avoid problems when the default character set is not latin1. (Bug#7524)

  • Fix a problem with truncation of FLOAT values. (Bug#7361)

  • Fixed a bug in PROCEDURE ANALYSE(), which did not quote some ENUM values properly. (Bug#2813)

  • Fixed a bug that caused incorrect results for complex datetime expressions containing casts of datetime values to TIME or DATE values. (Bug#6914)

  • Include compression library flags in the output from mysql_config --lib_r. (Bug#7021)

  • Corrected a problem with mysql_config not producing all relevant flags from CFLAGS. (Bug#6964)

  • Corrected a problem with mysqld_safe not properly capturing output from ps. (Bug#5878)

  • Fixed a bug that caused a linking failure when linking both the MySQL client library and IMAP library. (Bug#7428)

  • Fixed table corruption bug when using INSERT DELAYED with prepared statements.

  • Fixed a bug that caused microseconds to be gobbled from the string result of the STR_TO_DATE function, if there is some other specifier in the format string following %f. (Bug#7458)

  • Made the MySQL server accept executing SHOW CREATE DATABASE even if the connection has an open transaction or locked tables. Refusing it made mysqldump --single-transaction sometimes fail to print a complete CREATE DATABASE statement for some dumped databases. (Bug#7358)

  • Fixed that, when encountering a “disk fullâ€? or “quota exceededâ€? write error, MyISAM sometimes didn't sleep and retry the write, thus resulting in a corrupted table. (Bug#7714)

  • Fixed that --expire-log-days was not honored if using only transactions. (Bug#7236)

  • Fixed that a slave could crash after replicating many ANALYZE TABLE, OPTIMIZE TABLE, or REPAIR TABLE statements from the master. (Bug#6461, Bug#7658)

D.1.16. Changes in release 4.1.8 (14 December 2004)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

Note: Due to a libtool-related bug in the source distribution, the creation of shared libmysqlclient libraries was not possible (the resulting files were missing the .so file name extension). The file ltmain.sh was updated to fix this problem and the resulting source distribution was released as mysql-4.1.8a.tar.gz. This modification did not affect the binary packages. (Bug#7401)

Functionality added or changed:

  • Automatic character set conversion formerly was done for operations that mix a column and a string such as assigning a string to a column, when this was possible without loss of information. Automatic conversion for operations that mix columns and strings has been expanded to cover many functions (such as CONCAT()) and assignment operators. This reduces the frequency of Illegal mix of collations errors.

  • For ALTER DATABASE, the database name now can be omitted to apply the change to the default database.

  • Added WITH CONSISTENT SNAPSHOT clause to START TRANSACTION to begin a transaction with a consistent read.

  • Added --order-by-primary to mysqldump, to sort each table's data in a dump file. This may be useful when dumping a MyISAM table which will be loaded into an InnoDB table. Dumping a MyISAM table with this option is considerably slower than without.

  • InnoDB: Do not periodically write SHOW INNODB STATUS information to a temporary file unless the configuration option innodb_status_file=1 is set.

  • InnoDB: Commit after every 10,000 copied rows when executing ALTER TABLE. This makes it much faster to recover from an aborted ALTER TABLE or OPTIMIZE TABLE.

  • FULLTEXT index block size is changed to be 1024 instead of 2048.

  • Added --disable-log-bin option to mysqlbinlog. Using this option you can disable binary logging for the statements produced by mysqlbinlog. That is, mysqlbinlog --disable-log-bin <file_name> | mysql won't write any statements to the MySQL server binary log.

  • The --master-data option for mysqldump now takes an optional argument of 1 or 2 to produce a non-commented or commented CHANGE MASTER TO statement. The default is 1 for backward compatibility.

  • mysqldump --single-transaction --master-data now is able to take an online (non-blocking) dump of InnoDB and report the corresponding binary log coordinates. This makes a backup suitable for point-in-time recovery, roll-forward or replication slave creation. See Section 8.13, “mysqldump — A Database Backup Programâ€?.

  • Added --lock-all-tables to mysqldump to lock all tables by acquiring a global read lock.

  • Added --hex-blob option to mysqldump for dumping binary string columns using hexadecimal notation.

  • Added mysql_hex_string() C API function that hex-encodes a string.

  • In the normal log MySQL now prints the log position for Binlog Dump requests.

  • Added [mysql_cluster] section to my.cnf file for configuration settings specific to MySQL Cluster. ndb-connectstring variable moved here.

  • A connection doing a rollback now displays "Rolling back" in the State column of SHOW PROCESSLIST.

  • mysqlbinlog now prints an informative commented line (thread id, timestamp, server id, and so forth) before each LOAD DATA INFILE, like it does for other queries; unless --short-form is used.

  • The statements CREATE TABLE, TRUNCATE TABLE, DROP DATABASE, and CREATE DATABASE cause an implicit commit.

Bugs fixed:

  • A multiple-table DELETE could cause MySQL to crash when using InnoDB tables. (Bug#5837, Bug#6378)

  • Some data definition statements (CREATE TABLE where the table was not a temporary table, TRUNCATE TABLE, DROP DATABASE, and CREATE DATABASE) were not being written to the binary log after a ROLLBACK. This also caused problems with replication. (Bug#6883)

  • Fixed incorrect referencing to column by name from subquery to outer query in case of using temporary table by outer query and placing subquery in the WHERE clause. (Bug#7079)

  • Fixed a bug in authentication code that allowed a malicious user to crash the server with specially crafted packets (using a modified client library). (Bug#7187)

  • Fixed a crashing bug in a string function LEFT, when this function is part of the expression which is used as GROUP BY field. (Bug#7101)

  • Fixed bug which caused MySQL to require privileges on system time zone description tables for implicit access to them (that is, if one set time_zone variable or used CONVERT_TZ() function) in case when some table-level or column-level privileges existed. (Bug#6765)

  • mysql_stmt_data_seek(stmt,0) now rewinds a counter and enables buffered rows to be re-fetched on the client side. (Bug#6996)

  • Fixed an insufficient privilege check in SHOW CREATE TABLE command. (Bug#7043)

  • Fixed a rare memory corruption (that resulted in a crash) in MATCH ... AGAINST on columns that use multi-byte character sets. (Bug#6269)

  • Fixed NULL processing in ALL/SOME subqueries. (Bug#6247)

  • Fixed execution of complex queries with subqueries. (Bug#6406, Bug#6841)

  • Fixed initialization of some internal structures for first execution. (Bug#6517)

  • Backported a fix for the full-text interface from MySQL 5.0. (Bug#6523)

  • Fixed NULL value handling in case of empty results in subqueries. (Bug#6806)

  • Prevent adding CREATE TABLE .. SELECT query to the binary log when the insertion of new records partially failed. (Bug#6682)

  • INSERT ... SELECT no longer reports spurious "column truncated" warnings (Bug#6284)

  • Fixed a bug that could cause "Record has changed since last read in table" error message in some queries on HEAP tables that contain only one row. (Bug#6748)

  • mysqld_safe was in many cases ignoring any --no-defaults, --defaults-file, or --defaults-extra-file arguments. Those arguments are now honored, and this may change what options are passed to mysqld in some installations.

  • The server was interpreting CHAR BINARY and VARCHAR BINARY columns from 4.0 tables as having the BINARY and VARBINARY data types. Now they are interpreted as CHAR and VARCHAR columns that have the binary collation of the column's character set. (This is the same way that CHAR BINARY and VARCHAR BINARY are handled for new tables created in 4.1.)

  • Fixed spurious "duplicate key" error from REPLACE or INSERT ... ON DUPLICATE KEY UPDATE statements performing multiple-row insert in the table that had unique and full-text indexes. (Bug#6784)

  • Fixed a bug in execution of subqueries in SET and DO statements which caused wrong results to be returned from subsequent queries. (Bug#6462)

  • Fixed a bug that allowed server to accept datetime values with wrong year part. The server now also performs same checks for datetime values passed through MYSQL_TIME structures as for datetime values passed as strings. (Bug#6266)

  • Fixed a bug with INSERT for a table with FULLTEXT indexes. Under rare circumstances, this could result in a corrupted table if words of different lengths may be considered equal. This is possible in some collations, for example, in utf8_general_ci or latin1_german2_ci. (Bug#6265)

  • InnoDB: Do not intentionally crash mysqld if the buffer pool is exhausted by the lock table; return error 1206 instead. Do not intentionally crash mysqld if we cannot allocate the memory for the InnoDB buffer pool. (Bug#6817) (Bug#6827)

  • InnoDB: Let InnoDB's FOREIGN KEY parser to remove the latin1 character 0xA0 from the end of an unquoted identifier. The EMS MySQL Manager in ALTER TABLE adds that character after a table name, which caused error 121 when we tried to add a new constraint.

  • InnoDB: Refuse to open new-style tables created with MySQL 5.0.3 or later. (Bug#7089)

  • InnoDB: Do not call rewind() when displaying SHOW INNODB STATUS information on stderr.

  • InnoDB: Made the foreign key parser better aware of quotes. (Bug#6340)

  • InnoDB: If one used INSERT IGNORE to insert several rows at a time, and the first inserts were ignored because of a duplicate key collision, then InnoDB in a replication slave assigned AUTO_INCREMENT values 1 bigger than in the master. This broke the MySQL replication. (Bug#6287)

  • InnoDB: Fixed a bug: InnoDB ignored in innodb_data_file_path the max specification in :autoextend:max:2000M. This bug was introduced in 4.1.1.

  • InnoDB: Fixed a bug: innodb_locks_unsafe_for_binlog still uses next-key locking (Bug#6747). InnoDB used next-key locking when record matched completely to search tuple. This unnecessary next-key locking is now removed when innodb_locks_unsafe_for_binlog option is used.

  • InnoDB: Fix two hangs: FOREIGN KEY constraints treated table and database names as case-insensitive. RENAME TABLE t TO T would hang in an endless loop if t had a foreign key constraint defined on it. Fix also a hang over the dictionary mutex that would occur if one tried in ALTER TABLE or RENAME TABLE to create a foreign key constraint name that collided with another existing name. (Bug#3478)

  • If STMT_ATTR_UPDATE_MAX_LENGTH is set for a prepared statement, mysql_stmt_store_result() updates field->max_length for numeric columns as well. (Bug#6096)

  • Prepared statements now handle ZEROFILL when converting integer to string.

  • Fixed crash when a call to mysql_stmt_store_result() occurred without a preceding call to mysql_stmt_bind_result().

  • Fixed crash in prepared statements when using SELECT * FROM t1 NATURAL JOIN t2....

  • Fixed crash in prepared statements when using SELECT ... PROCEDURE.

  • Fixed crash in prepared statements when using subqueries.

  • GROUP_CONCAT(...ORDER BY) when used with prepared statements gave wrong sorting order.

  • CREATE TABLE created_table didn't signal when table was created. This could cause a DROP TABLE created_table in another thread to wait "forever".

  • Server warnings now are reset when you execute a prepared statement.

  • Improved performance of identifier comparisons (if many tables or columns are specified).

  • OPTIMIZE TABLE, REPAIR TABLE, and ANALYZE TABLE are now replicated without any error code in the binary log. (Bug#5551)

  • LOAD DATA INFILE now works with option replicate-rewrite-db. (Bug#6353)

  • Fixed a bug which caused a crash when only the slave I/O thread was stopped and started. (Bug#6148)

  • Changed semantics of CREATE/ALTER/DROP DATABASE statements so that replication of CREATE DATABASE is possible when using --binlog-do-db and --binlog-ignore-db. (Bug#6391)

  • If a connection had an open transaction but had done no updates to transactional tables (for example if had just done a SELECT FOR UPDATE then executed a non-transactional update, that update automatically committed the transaction (thus releasing InnoDB's row-level locks etc). (Bug#5714)

  • If a connection was interrupted by a network error and did a rollback, the network error code got stored into the BEGIN and ROLLBACK binary log events; that caused superfluous slave stops. (Bug#6522)

  • A sequence of BEGIN (or SET AUTOCOMMIT=0), FLUSH TABLES WITH READ LOCK, transactional update, COMMIT, FLUSH TABLES WITH READ LOCK could hang the connection forever and possibly the MySQL server itself. This happened for example when running the innobackup script several times. (Bug#6732)

  • mysqlbinlog did not print SET PSEUDO_THREAD_ID statements in front of LOAD DATA INFILE statements inserting into temporary tables, thus causing potential problems when rolling forward these statements after restoring a backup. (Bug#6671)

D.1.17. Changes in release 4.1.7 (23 October 2004: Production)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

Functionality added or changed:

  • MOD() no longer rounds arguments with a fractional part to integers. Now it returns exact remainder after division. (Bug#6138)

  • InnoDB: Added a startup option and settable system variable innodb_table_locks for making LOCK TABLE acquire also InnoDB locks. The default value is 1, which means that LOCK TABLES causes also InnoDB internally to take a table lock. In applications using AUTOCOMMIT=1 and LOCK TABLES, InnoDB's internal table locks that were added in 4.0.20 and 4.1.2 can cause deadlocks. You can set innodb_table_locks=0 in my.cnf to remove that problem. (Bug#3299, Bug#5998)

  • See Section 14.2.17, “Restrictions on InnoDB Tablesâ€?. (Bug#3299, Bug#5998) InnoDB: SHOW TABLE STATUS now shows the creation time of the table for InnoDB. Note that this timestamp might not be the correct time because, for example, ALTER TABLE changes this timestamp.

  • InnoDB: If innodb_thread_concurrency would be exceeded, let a thread sleep 10 ms before entering the FIFO queue; previously, the value was 50 ms.

Bugs fixed:

  • Fixed a bug with FOUND_ROWS() used together with LIMIT clause in prepared statements. (Bug#6088)

  • Fixed a bug with NATURAL JOIN in prepared statements. (Bug#6046).

  • Fixed a bug in join of tables from different databases having columns with identical names (prepared statements). (Bug#6050)

  • Now implicit access to system time zone description tables (which happens when you set the time_zone variable or use CONVERT_TZ() function) does not require any privileges. (Bug#6116)

  • Fixed a bug which caused the server to crash when the deprecated libmysqlclient function mysql_create_db() was called. (Bug#6081)

  • Fixed REVOKE ALL PRIVILEGES, GRANT OPTION FROM user so that all privileges are revoked correctly. (Bug#5831). This corrects a case that the fix in 4.1.6 could miss.

  • Fixed crash when selecting from a HEAP table with key_column IS NOT NULL. This could also cause a crash if not all index parts where used. (Bug#6082)

  • Fixed a bug that could cause MyISAM index corruption when key values start with character codes below BLANK. This was caused by the new key sort order in 4.1. (Bug#6151)

  • InnoDB: Fixed a bug in LOAD DATA INFILE…REPLACE printing duplicate key error when executing the same load query several times. (Bug#5835)

  • Fixed a bug in the prepared statements protocol when wrong metadata was sent for SELECT statements not returning a result set (such as SELECT ... INTO OUTFILE). (Bug#6059)

  • Fixed bug which allowed one to circumvent missing UPDATE privilege if one had INSERT and SELECT privileges for table with primary key. (Bug#6173)

  • Fixed a bug in libmysqlclient with wrong conversion of negative time values to strings. (Bug#6049).

  • Fixed a bug in libmysqlclient with wrong conversion of zero date values (0000-00-00) to strings. (Bug#6058)

  • Fixed a bug that caused the server to crash on attempt to prepare a statement with RAND(?). (Bug#5985)

  • Fixed a bug with handling of DATE, TIME, and DATETIME columns in the binary protocol. The problem is compiler-specific and could have been observed on HP-UX, AIX, Solaris9, when compiling with native compiler. (Bug#6025)

  • Fixed a bug with handling of TINYINT columns in the binary protocol. The problem is specific to platforms where the C compiler has the char data type unsigned by default. (Bug#6024)

  • InnoDB: Fixed problem introduced in MySQL 4.0.21 where a connection starting a transaction, doing updates, then FLUSH TABLES WITH READ LOCK, then COMMIT, would cause replication slaves to stop (complaining about error 1223). Bug surfaced when using the InnoDB innobackup script. (Bug#5949)

  • InnoDB: Release the dictionary latch during a long cascaded FOREIGN KEY operation, so that we do not starve other users doing CREATE TABLE or other DDL operation. This caused a notorious 'Long semaphore wait' message to be printed to the .err log. (Bug#5961)

D.1.18. Changes in release 4.1.6 (10 October 2004)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

Functionality added or changed:

  • Added option --sigint-ignore to the mysql command line client to make it ignore SIGINT signals (typically the result of the user pressing Control-C).

  • InnoDB: Added the startup option and settable global variable innodb_max_purge_lag for delaying INSERT, UPDATE and DELETE operations when the purge operations are lagging. The default value of this parameter is zero, meaning that there are no delays. See Section 14.2.13, “Implementation of Multi-Versioningâ€?.

  • InnoDB: The innodb_autoextend_increment startup option that was introduced in release 4.1.5 was made a settable global variable. (Bug#5736)

  • InnoDB: If DROP TABLE is invoked on an InnoDB table for which the .ibd file is missing, print to error log that the table was removed from the InnoDB data dictionary, and allow MySQL to delete the .frm file. Maybe DROP TABLE should issue a warning in this case.

  • TIMESTAMP columns now can store NULL values. To create such a column, you must explicitly specify the NULL attribute in the column specification. (Unlike all other data types, TIMESTAMP columns are NOT NULL by default.)

  • Now if ALTER TABLE converts one AUTO_INCREMENT column to another AUTO_INCREMENT column it preserves zero values (this includes the case that we don't change such column at all).

  • Now if ALTER TABLE converts some column to TIMESTAMP NOT NULL column it converts NULL values to current timestamp value (One can still get old behavior by setting system TIMESTAMP variable to zero).

  • On Windows, the MySQL configuration files included in the package now use .ini instead of .cnf as the file name suffix.

Bugs fixed:

  • Fixed a bug that caused the server to crash on attempt to execute a prepared statement with a subquery inside a boolean expression. (Bug#5987)

  • Fixed a bug that caused the server to sometimes choose non-optimal execution plan for a prepared statement executed with changed placeholder values. (Bug#6042)

  • InnoDB: Make the check for excessive semaphore waits tolerate glitches in the system clock (do not crash the server if the system time is adjusted while InnoDB is under load.). (Bug#5898)

  • InnoDB: Fixed a bug in the InnoDB FOREIGN KEY parser that prevented ALTER TABLE of tables containing ‘#’ in their names. (Bug#5856)

  • InnoDB: Fixed a bug that prevented ALTER TABLE t DISCARD TABLESPACE from working. (Bug#5851)

  • InnoDB: SHOW CREATE TABLE now obeys the SET SQL_MODE=ANSI and SET SQL_QUOTE_SHOW_CREATE=0 settings. (Bug#5292)

  • InnoDB: Fixed a bug that caused CREATE TEMPORARY TABLE ... ENGINE=InnoDB to terminate mysqld when running in innodb_file_per_table mode. Per-table tablespaces for temporary tables from now on are created in the temporary directory of mysqld. (Bug#5137)

  • InnoDB: Fixed some (not all) UTF-8 bugs in column prefix indexes. (Bug#5975)

  • InnoDB: If one updated a column so that its size changed, or updated it to an externally stored (TEXT or BLOB) value, then ANOTHER externally stored column would show up as 512 bytes of good data + 20 bytes of garbage in a consistent read that fetched the old version of the row. (Bug#5960)

  • InnoDB: Change error code to HA_ERR_ROW_IS_REFERENCED if we cannot DROP a parent table referenced by a FOREIGN KEY constraint; this error number is less misleading than the previous number HA_ERR_CANNOT_ADD_FOREIGN, but misleading still. (Bug#6202)

  • Fixed REVOKE ALL PRIVILEGES, GRANT OPTION FROM user so that all privileges are revoked correctly. (Bug#5831)

  • Fixed a bug that caused the server to crash when character set conversion was implicitly used in prepared mode; for example, as in 'abc' LIKE CONVERT('abc' as utf8). (Bug#5688)

  • The mysql_change_user() C API function now frees all prepared statements associated with the connection. (Bug#5315)

  • Fixed a bug when inserting NULL into an AUTO_INCREMENT column failed, when using prepared statements. (Bug#5510)

  • Fixed slave SQL thread so that the SET COLLATION_SERVER... statements it replicates don't advance its position (so that if it gets interrupted before the actual update query, it later redoes the SET). (Bug#5705)

  • Fixed that if the slave SQL thread found a syntax error in a query (which should be rare, as the master parsed it successfully), it stops. (Bug#5711)

  • Fixed that if a write to a MyISAM table fails because of a full disk or an exceeded disk quota, it prints a message to the error log every 10 minutes, and waits until disk space becomes available. (Bug#3248)

  • Now MySQL does not prefer columns, which are mentioned in select list but are renamed, over columns from other tables participating in FROM clause when it resolves GROUP BY clause (for example, SELECT t1.a AS c FROM t1, t2 ORDER BY a produces an error if both t1 and t2 tables contain a column). (Bug#4302)

  • Behavior of ALTER TABLE converting column containing NULL values to AUTO_INCREMENT column is no longer affected by NO_AUTO_VALUE_ON_ZERO mode. (Bug#5915).

D.1.19. Changes in release 4.1.5 (16 September 2004)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

Functionality added or changed:

  • InnoDB: Added configuration option innodb_autoextend_increment for setting the size in megabytes by which InnoDB tablespaces are extended when they become full. The default value is 8, corresponding to the fixed increment of 8MB in previous versions of MySQL.

  • InnoDB: The new Windows installation wizard of MySQL makes InnoDB as the MySQL default table type on Windows, unless explicitly specified otherwise. Note that it places the my.ini file in the installation directory of the MySQL server. See Section 2.3.4.14, “The Location of the my.ini Fileâ€?.

Bugs fixed:

  • Fixed a bug which caused the server to crash on attempt to execute a prepared statement with BETWEEN ? AND ? and a datetime column. (Bug#5748)

  • Fixed name resolving of external fields of subqueries if subquery placed in select list of query with grouping. (Bug#5326)

  • Fixed detection of using same table for updating and selecting in multi-update queries. (Bug#5455)

  • The values of the max_sort_length, sql_mode, and group_concat_max_len system variables now are stored in the query cache with other query information to avoid returning an incorrect result from the query cache. (Bug#5394) (Bug#5515)

  • Fixed syntax analyzer with sql_mode=IGNORE_SPACE. It happened to take phrases like default .07 as identifier.identifier. (Bug#5318)

  • Fixed illegal internal field length of user variables of integer type. This showed up when creating a table as SELECT @var_name. (Bug#4788)

  • Fixed a buffer overflow in prepared statements API (libmysqlclient) when a statement containing thousands of placeholders was executed. (Bug#5194)

  • Fixed a bug in the server when after reaching a certain limit of prepared statements per connection (97), statement ids began to overlap, so occasionally wrong statements were chosen for execution. (Bug#5399)

  • Fixed a bug in prepared statements when LIKE used with arguments in different character sets crashed server on first execute. (Bug#4368)

  • Fixed a bug in prepared statements when providing '0000-00-00' date to a parameter lead to server crash. (Bug#4231, Bug#4562)

  • Fixed a bug in OPTIMIZE TABLE that could cause table corruption on FULLTEXT indexes. (Bug#5327)

  • InnoDB: Fixed a bug that InnoDB only allowed a maximum of 1000 connections inside InnoDB at the same time. A higher number could cause an assertion failure in sync0arr.c, line 384. Now we allow 1000, 10000, or 50000, depending on the buffer pool size. (Bug#5414)

D.1.20. Changes in release 4.1.4 (26 August 2004: Gamma)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

Note: To fix a compile problem on systems that do not have automake 1.7 installed, an updated 4.1.4a source tarball has been published. In addition to resolving this automake dependency (Bug#5319), it also fixes some reported libedit compile errors when using a non-gcc compiler (Bug#5353).

Functionality added or changed:

  • Added the CSV storage engine.

  • Made internal representation of TIMESTAMP values in InnoDB in 4.1 to be the same as in 4.0. This difference resulted in incorrect datetime values in TIMESTAMP columns in InnoDB tables after an upgrade from 4.0 to 4.1. (Bug#4492) Warning: extra steps during upgrade required! Unfortunately this means that if you are upgrading from 4.1.x, where x <= 3, to 4.1.4 you should use mysqldump for saving and then restoring your InnoDB tables with TIMESTAMP columns.

  • The mysqld-opt Windows server was renamed to mysqld. This completes the Windows server renaming begun in MySQL 4.1.2. See Section 2.3.8, “Selecting a MySQL Server typeâ€?.

  • Added Latin language collations for the ucs2 and utf8 Unicode character sets. These are called ucs2_roman_ci and utf8_roman_ci.

  • Corrected the name of the Mac OS X StartupItem script (it must match the name of the subdirectory, which was renamed to MySQLCOM in MySQL 4.1.2). Thanks to Bryan McCormack for reporting this.

  • Added --start-datetime, --stop-datetime, --start-position, and --stop-position options to mysqlbinlog. These make point-in-time recovery easier.

  • Killing a CHECK TABLE statement does not result in the table being marked as “corruptedâ€? any more; the table remains as if CHECK TABLE had not even started. See Section 13.5.5.3, “KILL Syntaxâ€?.

  • Made the MySQL server ignore SIGHUP and SIGQUIT on Mac OS X 10.3. This is needed because under this OS, the MySQL server receives lots of these signals (reported as Bug#2030).

  • Support of usage of column aliases qualified by table name or alias in ORDER BY and GROUP BY was dropped. For example the following query SELECT a AS b FROM t1 ORDER BY t1.b is not allowed. One should use SELECT a AS b FROM t1 ORDER BY t1.a or SELECT a AS b FROM t1 ORDER BY b instead. This was non-standard (since aliases are defined on query level not on table level) and caused problems with some queries.

Bugs fixed:

  • Fixed a bug that caused libmysql to crash when attempting to fetch a value of MEDIUMINT column. (Bug#5126)

  • Fixed a bug that caused the MySQL server to crash when attempting to execute a prepared statement with SELECT ... INTO @var for a second time. (Bug#5034)

  • Fixed execution of optimized IN subqueries that use compound indexes. (Bug#4435)

  • Prohibited resolving of table fields in inner queries if fields do not take part in grouping for queries with grouping (inside aggregate function arguments, all table fields are still allowed). (Bug#4814)

  • Fixed a crash after SLAVE STOP if the IO thread was in a special state. (Bug#4629)

  • Fixed an old bug in concurrent accesses to MERGE tables (even one MERGE table and MyISAM tables), that could have resulted in a crash or hang of the server. (Bug#2408, CVE-2004-0837)

  • Fixed a bug that caused server crash on attempt to execute for a second time a prepared statement with NOT in WHERE or ON clauses. (Bug#4912)

  • MATCH ... AGAINST now works in a subquery. (Bug#4769)

  • Fixed a bug that omitted the .err extension of the error log file (--log-error) when the hostname contained a domain name. The domain name is now replaced by the extension. (Bug#4997)

  • Fixed a crash in myisamchk. (Bug#4901)

  • Fixed a bug which caused server crash if one used the CONVERT_TZ() function with time zone described in database as parameter and this time zone was not used before. (Bug#4508)

  • Support for %T, %r, %V, %v and %X, %x format specifiers was added to STR_TO_DATE() function. (Bug#4756)

  • Fixed a bug (hang) in NATURAL JOIN where joined table had no common column. (Bug#4807)

  • Fixed a crash caused by UNHEX(NULL). (Bug#4441)

  • mysql_fix_privilege_tables didn't correctly handle the argument of its --password=password_val option. (Bug#4240, Bug#4543)

  • Fixed that mysqlbinlog --read-from-remote-server sometimes couldn't accept 2 binary logs on command line. (Bug#4507)

  • Fixed that mysqlbinlog --position --read-from-remote-server had wrong # at lines. (Bug#4506)

  • If CREATE TEMPORARY TABLE t SELECT failed while loading the data, the temporary table was not dropped. (Bug#4551)

  • Fixed that when a multiple-table DROP TABLE failed to drop a table on the master server, the error code was not written to the binary log. (Bug#4553)

  • When the slave SQL thread was replicating a LOAD DATA INFILE statement, it didn't show the statement in the output of SHOW PROCESSLIST. (Bug#4326)

  • Fixed an assertion failure when reading the grant tables (Bug#4407)

  • Fixed that CREATE TABLE ... TYPE=HEAP ... AS SELECT... caused replication slave to stop. (Bug#4971)

  • Fixed that mysql_options(...,MYSQL_OPT_LOCAL_INFILE,...) failed to disable LOAD DATA LOCAL INFILE. (Bug#5038)

  • Fixed that disable-local-infile option had no effect if client read it from a configuration file using mysql_options(...,MYSQL_READ_DEFAULT,...). (Bug#5073)

  • Fixed that SET GLOBAL SYNC_BINLOG did not work on some platforms (Mac OS X). (Bug#5064)

  • Fixed that mysql-test-run failed on the rpl_trunc_binlog test if running test from the installed (the target of 'make install') directory. (Bug#5050)

  • Fixed that mysql-test-run failed on the grant_cache test when run as Unix user 'root'. (Bug#4678)

  • Fixed an unlikely deadlock which could happen when using KILL. (Bug#4810)

  • Fixed a crash when one connection got KILLed while it was doing START SLAVE. (Bug#4827)

  • Made FLUSH TABLES WITH READ LOCK block COMMIT if server is running with binary logging; this ensures that the binary log position is trustable when doing a full backup of tables and the binary log. (Bug#4953)

  • Fixed that the counter of an auto_increment column was not reset by TRUNCATE TABLE if the table was a temporary table. (Bug#5033)

  • Fixed bug which caused error to be reported when column from ORDER BY clause was present in two tables participating in SELECT even if the second instance of column in select list was renamed. (Bug#4302)

D.1.21. Changes in release 4.1.3 (28 June 2004: Beta)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

Note: The initial release of MySQL 4.1.3 for Windows accidentally was not compiled with support for the Spatial Extensions (OpenGIS). This was fixed by rebuilding from the same 4.1 code snapshot with the missing option and releasing those packages as version 4.1.3a.

To enable compiling the newly released PHP 5 against MySQL 4.1.3 on Windows, the Windows packages had to be rebuilt once more to add a few missing symbols to the MySQL client library. These packages were released as MySQL 4.1.3b.

Functionality added or changed:

  • Warning: Incompatible change: C API change: mysql_shutdown() now requires a second argument. This is a source-level incompatibility that affects how you compile client programs; it does not affect the ability of compiled clients to communicate with older servers. See Section 17.2.3.63, “mysql_shutdown()â€?.

  • Warning: Incompatible change: The timezone system variable has been removed and replaced by system_time_zone. See Section 5.2.2, “System Variablesâ€?.

  • Support for per-connection time zones was added. Now you can set the current time zone for a connection by setting the @@time_zone system variable to a value such as '+10:00' or 'Europe/Moscow' (where 'Europe/Moscow' is the name of one of the time zones described in the system tables). Functions like CURRENT_TIMESTAMP, UNIX_TIMESTAMP, and so forth honor this time zone. Values of TIMESTAMP type are also interpreted as values in this time zone. So now our TIMESTAMP type behaves similar to Oracle's TIMESTAMP WITH LOCAL TIME ZONE. That is, values stored in such a column are normalized toward UTC and converted back to the current connection time zone when they are retrieved from such a column. To set up the tables that store time zone information, see Section 2.10, “Post-Installation Setup and Testingâ€?.

  • Basic time zone conversion function CONVERT_TZ() was added. It assumes that its first argument is a datetime value in the time zone specified by its second argument and returns the equivalent datetime value in the time zone specified by its third argument.

  • Added the ARCHIVE storage engine.

  • Added SQL syntax for prepared statements. See Section 13.7, “SQL Syntax for Prepared Statementsâ€?.

  • Language-specific collations were added for the ucs2 and utf8 Unicode character sets: Icelandic, Latvian, Romanian, Slovenian, Polish, Estonian, Swedish, Turkish, Czech, Danish, Lithuanian, Slovak, Spanish, Traditional Spanish.

  • CHECK TABLE now can be killed. It then marks the table as corrupted. See Section 13.5.5.3, “KILL Syntaxâ€?.

  • OPTIMIZE TABLE for InnoDB tables is now mapped to ALTER TABLE instead of ANALYZE TABLE.

  • sync_frm is now a settable global variable (not only a startup option).

  • Added the sync_binlog=N global variable and startup option, which makes the MySQL server synchronize its binary log to disk (fdatasync()) after every Nth write to the binary log.

  • Changed the slave SQL thread to print fewer useless error messages (no more message duplication; no more messages when an error is skipped (because of slave-skip-errors).

  • DROP DATABASE IF EXISTS, DROP TABLE IF EXISTS, single-table DELETE and single-table UPDATE are now written to the binary log even if they changed nothing on the master (for example, even if the DELETE matched no row). The old behavior sometimes caused bad surprises in replication setups.

  • Replication and mysqlbinlog now have better support for the case that the session character set and collation variables are changed within a given session. See Section 6.7, “Replication Features and Known Problemsâ€?.

  • Added --innodb-safe-binlog server option, which adds consistency guarantees between the content of InnoDB tables and the binary log. See Section 5.11.4, “The Binary Logâ€?.

  • LIKE now supports the use of a prepared statement parameter or delimited constant expression as the argument to ESCAPE (Bug#4200).

Bugs fixed:

  • Fixed CREATE DATABASE IF NOT EXISTS for Win32 which caused an error if database existed. (Bug#4378)

  • Added missing root account to Windows version of mysqld. (Bug#4242)

  • Fixed bug in prepared EXPLAIN statement which led to server crash. (Bug#4271)

  • Fixed a bug of using parameters in some prepared statements via SQL syntax. (Bug#4280)

  • Fixed a bug in MERGE tables created with INSERT_METHOD=LAST, that were not able to report a key number that caused “Duplicate entryâ€? error for UNIQUE key in INSERT. As a result, error message was not precise enough (error 1022 instead of error 1062) and INSERT ... ON DUPLICATE KEY UPDATE did not work. (Bug#4008)

  • Fixed a bug in DELETE from a table with FULLTEXT indexes which under rare circumstances could result in a corrupted table, if words of different lengths may be considered equal (which is possible in some collations, for example, in utf8_general_ci or latin1_german2_ci.) (Bug#3808)

  • Fixed too-early unlocking of tables if we have subquery in HAVING clause. (Bug#3984)

  • Fixed a bug in mysqldump when it didn't return an error if the output device was filled (Bug#1851)

  • Fixed a bug in client-side conversion of string column to MYSQL_TIME application buffer (prepared statements API). (Bug#4030)

  • Fixed a bug with server crash on attempt to execute a non-prepared statement. (Bug#4236)

  • Fixed a bug with server crash on attempt to prepare a statement with character set introducer. (Bug#4105)

  • Fixed bug which caused different number of warnings to be generated when bad datetime as string or as number was inserted into DATETIME or TIMESTAMP column. (Bug#2336)

  • Fixed some byte order bugs with prepared statements on machines with high-byte-first. (Bug#4173)

  • Fixed unlikely bug in the range optimizer when using many IN() queries on different key parts. (Bug#4157)

  • Fixed problem with NULL and derived tables. (Bug#4097)

  • Fixed wrong UNION results if display length of fields for numeric types was set less then real length of values in them. (Bug#4067)

  • Fixed a bug in mysql_stmt_close(), which hung up when attempting to close statement after failed mysql_stmt_fetch(). (Bug#4079)

  • Fixed bug of re-execution optimized COUNT(*), MAX() and MIN() functions in prepared statements. (Bug#2687)

  • Fixed a bug with COUNT(DISTINCT) performance degradation in cases like COUNT(DISTINCT a TEXT, b CHAR(1)) (no index used). (Bug#3904)

  • Fixed a bug in MATCH ... AGAINST(... IN BOOLEAN MODE) that under rare circumstances could cause wrong results if in the data's collation one byte could match many (like in utf8_general_ci or latin1_german2_ci.) (Bug#3964)

  • Fixed a bug in prepared statements protocol, when microseconds part of MYSQL_TYPE_TIME/MYSQL_TYPE_DATETIME columns was not sent to the client. (Bug#4026)

  • Fixed a bug that using --with-charset with configure didn't affect the MySQL client library. (Bug#3990)

  • Fixed a bug in authentication code that allowed a malicious user to bypass password verification with specially crafted packets, using a modified client library. (CVE-2004-0627, CVE-2004-0628)

  • Fixed bug with wrong result of CONCAT(?, col_name) in prepared statements. (Bug#3796)

  • Fixed potential memory overrun in mysql_real_connect() (which required a compromised DNS server and certain operating systems). (Bug#4017, CVE-2004-0836)

  • During the installation process of the server RPM on Linux, mysqld was run as the root system user, and if you had --log-bin=file_name, where the file was located somewhere outside of the data directory, it created binary log files owned by root in this directory that remained owned by root after the installation. This is now fixed by starting mysqld as the mysql system user instead. (Bug#4038)

  • Made DROP DATABASE honor the value of lower_case_table_names. (Bug#4066)

  • The slave SQL thread refused to replicate INSERT ... SELECT if it examined more than 4 billion rows. (Bug#3871)

  • mysqlbinlog didn't escape the string content of user variables, and did not deal well when these variables were in non-ASCII character sets; this is now fixed by always printing the string content of user variables in hexadecimal. The character set and collation of the string is now also printed. (Bug#3875)

  • Fixed incorrect destruction of expression which led to crash of server on complex AND/OR expressions if query was ignored (either by a replication server because of --replicate-*-table rules, or by any MySQL server because of a syntax error). (Bug#3969, Bug#4494)

D.1.22. Changes in release 4.1.2 (28 May 2004)

End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

Functionality added or changed:

  • CHAR BYTE is an alias for the BINARY data type. (Previously, it was an alias for CHAR BINARY.)

  • Warning: Incompatible change: Handling of the FLOAT and DOUBLE floating-point data types is more strict to follow standard SQL. For example, a data type of FLOAT(3,1) stores a maximum value of 99.9. Previously, the server allowed larger numbers to be stored. That is, it stored a value such as 100.0 as 100.0. Now the server clips 100.0 to the maximum allowable value of 99.9. If you have tables that were created before MySQL 4.1.2 and that contain floating-point data not strictly legal for the column type, you should alter the data types of those columns. For example:

    ALTER TABLE tbl_name MODIFY col_name FLOAT(4,1);
    
  • Warning: Incompatible change: String comparison now works according to the SQL standard. Because we have that 'a' = 'a ' then from it must follow that 'a' > 'a\t'. (The latter was not the case before MySQL 4.1.2.) To implement it, we had to change how storage engines compare strings internally. As a side effect, if you have a table where a CHAR or VARCHAR column in some row has a value with the last character less than ASCII(32), you have to repair this table. CHECK TABLES tells you if this problem exists. (Bug#3152)

  • Added support for DEFAULT CURRENT_TIMESTAMP and for ON UPDATE CURRENT_TIMESTAMP specifications for TIMESTAMP columns. Now you can explicitly say that a TIMESTAMP column should be set automatically to the current timestamp for INSERT and/or UPDATE statements, or even prevent the column from updating automatically. Only one column with such an auto-set feature per table is supported. TIMESTAMP columns created with earlier versions of MySQL behave as before. Behavior of TIMESTAMP columns that were created without explicit specification of default/on as earlier depends on its position in table: If it is the first TIMESTAMP column, it be treated as having been specified as TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP. In other cases, it would be treated as a TIMESTAMP DEFAULT 0 column. NOW is supported as an alias for CURRENT_TIMESTAMP. Warning: Incompatible change: Unlike in previous versions, explicit specification of default values for TIMESTAMP column is never ignored and turns off the auto-set feature (unless you have CURRENT_TIMESTAMP as the default).

  • Warning: Incompatible change: Renamed prepared statements C API functions:

    Old NameNew Name
    mysql_bind_param()mysql_stmt_bind_param()
    mysql_bind_result()mysql_stmt_bind_result()
    mysql_prepare()mysql_stmt_prepare()
    mysql_execute()mysql_stmt_execute()
    mysql_fetch()mysql_stmt_fetch()
    mysql_fetch_column()mysql_stmt_fetch_column()
    mysql_param_count()mysql_stmt_param_count()
    mysql_param_result()mysql_stmt_param_metadata()
    mysql_get_metadata()mysql_stmt_result_metadata()
    mysql_send_long_data()mysql_stmt_send_long_data()

    Now all functions that operate with a MYSQL_STMT structure begin with the prefix mysql_stmt_.

  • Warning: Incompatible change: The signature of the mysql_stmt_prepare() function was changed to int mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, unsigned long length). To create a MYSQL_STMT handle, you should use the mysql_stmt_init() function, not mysql_stmt_prepare().

  • Warning: Incompatible change: The Type output column for SHOW TABLE STATUS now is labeled Engine.

  • Added the EXAMPLE storage engine.

  • The mysqld Windows server was renamed to mysqld-debug. See Section 2.3.8, “Selecting a MySQL Server typeâ€?.

  • Added Handler_discover status variable.

  • Added support for character set conversion and MYSQL_TYPE_BLOB type code in prepared statement protocol.

  • Added explanation of hidden SELECT of UNION in output of EXPLAIN SELECT statement.

  • mysql command-line client now supports multiple -e options. (Bug#591)

  • New myisam_data_pointer_size system variable. See Section 5.2.2, “System Variablesâ€?.

  • The --log-warnings server option now is enabled by default. Disable with --skip-log-warnings.

  • The --defaults-file=file_name option now requires that the filename must exist (safety fix). (Bug#3413)

  • mysqld_multi now creates the log in the directory named by datadir (from the [mysqld] section in my.cnf or compiled in), not in /tmp. Thanks to Christian Hammers from Debian Security Team for reporting this. (CVE-2004-0388)

  • SHOW GRANTS with no FOR clause or with FOR CURRENT_USER() shows the privileges for the current session.

  • The improved character set support introduced in MySQL 4.1.0 for the MyISAM and HEAP storage engines is now available for InnoDB as well.

  • A name of “Primaryâ€? no longer can be specified as an index name. (That name is reserved for the PRIMARY KEY if the table has one.) (Bug#856)

  • MySQL now issues a warning when a SET or ENUM column with duplicate values in the list is created. (Bug#1427)

  • Now SQL_SELECT_LIMIT variable has no influence on subqueries. (Bug#2600)

  • UNHEX() function implemented. See Section 12.3, “String Functionsâ€?.

  • The mysql command-line client no longer stores in the history file multiple copies of identical queries that are run consecutively.

  • Multi-line statements in the mysql command-line client now are stored in the history file as a single line.

  • UUID() function implemented. Note that it does not work with replication yet. See Section 12.9.4, “Miscellaneous Functionsâ€?.

  • Prepared statements with all types of subqueries fixed.

  • MySQL now supports up to 64 indexes per table.

  • MyISAM tables now support keys up to 1000 bytes long.

  • MyISAM and InnoDB tables now support index prefix lengths up to 1000 bytes long.

  • If you try to create a key with a key part that is too long, and it is safe to auto-truncate it to a smaller length, MySQL now does so. A warning is generated, rather than an error.

  • The ft_boolean_syntax variable now can be changed while the server is running. See Section 5.2.2, “System Variablesâ€?.

  • REVOKE ALL PRIVILEGES, GRANT FROM user_list is changed to a more consistent REVOKE ALL PRIVILEGES, GRANT OPTION FROM user_list. (Bug#2642)

  • Internal string-to-number conversion now supports only SQL:2003 compatible syntax for numbers. In particular, '0x10'+0 does not work anymore. (Actually, it worked only on some systems before, such as Linux. It did not work on others, such as FreeBSD or Solaris. Making these queries OS-independent was the goal of this change.) Use CONV() to convert hexadecimal numbers to decimal. Example: CONV(MID('0x10',3),16,10)+0.

  • mysqlhotcopy now works on NetWare.

  • ALTER TABLE DROP PRIMARY KEY no longer drops the first UNIQUE index if there is no primary index. (Bug#2361)

  • Added latin1_spanish_ci (Modern Spanish) collation for the latin1 character set.

  • Added the ENGINE table option as a synonym for the TYPE option for CREATE TABLE and ALTER TABLE.

  • Added the --default-storage-engine server option as a synonym for --default-table-type.

  • Added the storage_engine system variable as a synonym for table_type.

  • Added init_connect and init_slave system variables. The values should be SQL statements to be executed when each client connects or each time a slave's SQL thread starts, respectively.

  • C API enhancement: SERVER_QUERY_NO_INDEX_USED and SERVER_QUERY_NO_GOOD_INDEX_USED flags are now set in the server_status field of the MYSQL structure. It is these flags that make the query to be logged as slow if mysqld was started with --log-slow-queries --log-queries-not-using-indexes.

  • For replication of MEMORY (HEAP) tables: Made the master automatically write a DELETE FROM statement to its binary log when a MEMORY table is opened for the first time since master's startup. This is for the case where the slave has replicated a non-empty MEMORY table, then the master is shut down and restarted: the table is now empty on master; the DELETE FROM empties it on slave too. Note that even with this fix, between the master's restart and the first use of the table on master, the slave still has out-of-date data in the table. But if you use the init-file option to populate the MEMORY table on the master at startup, it ensures that the failing time interval is zero. (Bug#2477)

  • When a session having open temporary tables terminates, the statement automatically written to the binary log is now DROP TEMPORARY TABLE IF EXISTS instead of DROP TEMPORARY TABLE, for more robustness.

  • The MySQL server now returns an error if SET SQL_LOG_BIN or SET SQL_LOG_UPDATE is issued by a user without the SUPER privilege (in previous versions it just silently ignored the statement in this case).

  • Changed that when the MySQL server has binary logging disabled (that is, no --log-bin option was used), then no transaction binary log cache is allocated for connections. This should save binlog_cache_size bytes of memory (32KB by default) for every connection.

  • Added Binlog_cache_use and Binlog_cache_disk_use status variables that count the number of transactions that used transaction binary log and that had to flush this temporary binary log to disk instead of using only the in-memory buffer. They can be used for tuning the binlog_cache_size system variable.

  • Added option --replicate-same-server-id.

  • The Mac OS X Startup Item has been moved from the directory /Library/StartupItems/MySQL to /Library/StartupItems/MySQLCOM to avoid a file name collision with the MySQL Startup Item installed with Mac OS X Server. See Section 2.13.2, “Mac OS X Notesâ€?.

  • Added option --to-last-log to mysqlbinlog, for use in conjunction with --read-from-remote-server.

  • The FLOAT and DECIMAL types now obey (precision,scale) settings. (Bug#10897)

  • Added the mysql_set_local_infile_handler() and mysql_set_local_infile_default() C API functions.

Bugs fixed:

  • Fixed check of EXPLAIN of UNION. (Bug#3639)

  • Fixed a bug in a query that used DISTINCT and ORDER BY by column's real name, while the column had an alias, specified in SELECT clause. (Bug#3681)

  • mysqld could crash when a table was altered and used at the same time. This was a 4.1.2-specific bug. (Bug#3643).

  • Fixed bug when using impossible WHERE with PROCEDURE ANALYSE(). (Bug#2238).

  • Fixed security problem in new authentication where password was not checked for changed GRANT accounts until FLUSH PRIVILEGES was executed. (Bug#3404)

  • Fixed crash of GROUP_CONCAT() on expression with ORDER BY and external ORDER BY in a query. (Bug#3752)

  • Fixed a bug in ALL/SOME subqueries in case of optimization (key field present in subquery). (Bug#3646)

  • Fixed a bug in SHOW GRANTS and EXPLAIN SELECT character set conversion. (Bug#3403)

  • Prepare statements parameter do not cause error message as fields used in select list but not included in ORDER BY list.

  • UNION statements did not consult SQL_SELECT_LIMIT value when set. This is now fixed properly, which means that this limit is applied to the top level query, unless LIMIT for entire UNION is used.

  • Fixed a bug in multiple-table UPDATE statements that resulted in an error when one of the tables was not updated but was used in the nested query, contained therein.

  • Fixed mysql_stmt_send_long_data() behavior on second execution of prepared statement and in case when long data had zero length. (Bug#1664)

  • Fixed crash on second execution of prepared statement with UNION. (Bug#3577)

  • Fixed incorrect results of aggregate functions in subquery with empty result set. (Bug#3505)

  • You can now call mysql_stmt_attr_set(..., STMT_ATTR_UPDATE_MAX_LENGTH) to tell the client library to update MYSQL_FIELD->max_length when doing mysql_stmt_store_result(). (Bug#1647).

  • Added support for unsigned integer types to prepared statement API (Bug#3035).

  • Fixed crash in prepared statements when subquery in the FROM clause with parameter used. (Bug#3020)

  • Fixed unknown error when negative value bind to unsigned. (Bug#3223)

  • Fixed aggregate function in prepared statements. (Bug#3360)

  • Incorrect error message when wrong table used in multiple-table DELETE statement in prepared statements. (Bug#3411)

  • Requiring UPDATE privilege for tables which are not updated in multiple-table UPDATE statement in prepared statements.

  • Fixed prepared statement support for INSERT, REPLACE, CREATE, DELETE, SELECT, DO, SET and SHOW. All other commands are prohibited via prepared statement interface. (Bug#3398, Bug#3406, Bug#2811)

  • Fixed a lot of bugs in GROUP_CONCAT(). (Bug#2695, Bug#3381, Bug#3319)

  • Added optimization that allows for prepared statements using a large number of tables or tables with a large number of columns to be re-executed significantly faster. (Bug#2050)

  • Fixed bug that caused execution of prepared statements to fail then table that this statement were using left table cache. This bug showed up as if this prepared statement used random garbage as column names or as server crashes. (Bug#3307)

  • Fixed a problem resulting from setting the character_set_results variable to NULL. (Bug#3296)

  • Fixed query cache statistics.

  • Fixed bug in ANALYZE TABLE on a BDB table inside a transaction that hangs server thread. (Bug#2342)

  • Fixed a symlink vulnerability in the mysqlbug script. (Bug#3284, CVE-2004-0381)

  • Fixed a bug in parallel repair (myisamchk -p, myisam_repair_threads); sometimes the repair process failed to repair a table. (Bug#1334)

  • A query that uses both UNION [DISTINCT] and UNION ALL now works correctly. (Bug#1428)

  • Table default character set affects LONGBLOB columns. (Bug#2821)

  • CONCAT_WS() makes the server die in case of illegal mix of collations. (Bug#3087)

  • UTF8 charset breaks joins with mixed column/string constant. (Bug#2959)

  • Fixed DROP DATABASE to report number of tables deleted.

  • Fixed bug in privilege checking of ALTER TABLE RENAME. (Bug#3270, CVE-2004-0835)

  • Fixed memory leak in the client library when statement handle was freed on closed connection (call to mysql_stmt_close after mysql_close). (Bug#3073)

  • Fixed server segmentation faults when processing malformed prepared statements. (Bug#2795, Bug#2274)

  • Fixed using subqueries with OR and AND functions. (Bug#2838)

  • Fixed comparison of tables/database names with --lower_case_table_names option. (Bug#2880)

  • Removed try to check NULL if index built on column where NULL is impossible in IN subquery optimization. (Bug#2393)

  • Fixed incorrect parsing of subqueries in the FROM clause. (Bug#2421)

  • Fixed processing of RAND() in subqueries with static tables. (Bug#2645)

  • Fixed bug with quoting of table names in mysqldump for various values of sql_mode of server. (Bug#2591)

  • Fixed bug with storing values that are out of range for DOUBLE and FLOAT columns. (Bug#2082)

  • Fixed bug with compiling --with-pstack with binutils 2.13.90. (Bug#1661)

  • Fixed a bug in the GRANT system. When a password was assigned to an account at the global level and then privileges were granted at the database level (without specifying any password), the existing password was replaced temporarily in memory until the next FLUSH PRIVILEGES operation or the server was restarted. (Bug#2953)

  • Fixed a bug in full-text search on multi-byte character set (such as UTF8) that appeared when a search word was shorter than a matching word from the index (for example, searching for “Uppsalaâ€? when table data contain “Uppsa*laâ€?). (Bug#3011)

  • Fixed a bug that made Max_used_connections to be less than the actual maximum number of connections in use simultaneously.