Released on 14 Dec 2003
MySQL 4.0.17 Changelog

End of Product Lifecycle. Active development and support for MySQL Database Server versions 3.23, 4.0, and 4.1 has ended. For details, see Please consider upgrading to a recent version. Further updates to the content of this manual will be minimal. All formats of this manual will continue to be available until 31 Dec 2010.

Functionality added or changed:

  • mysqldump no longer dumps data for MERGE tables. (Bug #1846)

  • lower_case_table_names is now forced to 1 if the database directory is located on a case-insensitive file system. (Bug #1812)

  • Symlink creation is now disabled on systems where realpath() doesn't work. (Before one could use CREATE TABLE .. DATA DIRECTORY=.. even if HAVE_BROKEN_REALPATH was defined. This is now disabled to avoid problems when running ALTER TABLE).

  • Inserting a negative AUTO_INCREMENT value in a MyISAM table no longer updates the AUTO_INCREMENT counter to a big unsigned value. (Bug #1366)

  • Added four new modes to WEEK(..., mode) function. (Bug #1178)

  • Permit UNION DISTINCT syntax.

  • MySQL now syncs to disk each time .frm file is created.

  • mysql_server_init() now returns 1 if it can't initialize the environment. (Previously mysql_server_init() called exit(1) if it could not create a key with pthread_key_create(). (Bug #2062)

  • Permit spaces in Windows service names.

  • Changed the default Windows service name for mysqld from MySql to MySQL. This should not affect usage, because service names are not case sensitive.

  • When you install mysqld as a service on Windows systems, mysqld reads startup options in option files from the option group with the same name as the service name. (Except when the service name is MySQL).

Bugs fixed:

  • Sending SIGHUP to mysqld crashed the server if it was running with --log-bin. (Bug #2045)

  • One can now configure MySQL as a Windows service as a normal user. (Bug #1802). Thanks to Richard Hansen for fixing this.

  • Database names are now compared in lowercase in ON clauses when lower_case_table_names is set. (Bug #1736)

  • IGNORE ... LINES option to LOAD DATA INFILE didn't work when used with fixed length rows. (Bug #1704)

  • Fixed problem with UNIX_TIMESTAMP() for timestamps close to 0. (Bug #1998)

  • Fixed problem with character values greater than 128 in the QUOTE() function. (Bug #1868)

  • Fixed searching of TEXT with endspace. (Bug #1651)

  • Fixed caching bug in multiple-table updates where same table was used twice. (Bug #1711)

  • Fixed directory permissions for the MySQL-server RPM documentation directory. (Bug #1672)

  • Fixed server crash when updating an ENUM column that is set to the empty string (for example, with REPLACE()). (Bug #2023)

  • mysql client program now correctly prints connection identifier returned by mysql_thread_id() as unsigned integer rather than as signed integer. (Bug #1951)

  • FOUND_ROWS() could return incorrect number of rows after a query with an impossible WHERE condition. (Bug #1468)

  • SHOW DATABASES no longer shows .sym files (on Windows) that do not point to a valid directory. (Bug #1385)

  • Fixed a possible memory leak on Mac OS X when using the shared library. (from pthread_key_create()). (Bug #2061)

  • Fixed bug in UNION statement with alias *. (Bug #1249)

  • Fixed a bug in DELETE ... ORDER BY ... LIMIT where the rows were not deleted in the proper order. (Bug #1024, Bug #1697).

  • Fixed serious problem with multi-threaded programs on Windows that used the embedded MySQL libraries. (Locks of tables were not handled correctly between different threads).

  • Code cleanup: Fixed a few code defects (potential memory leaks, null pointer dereferences, uninitialized variables). Thanks to Reasoning Inc. for informing us about these findings.

  • Fixed a buffer overflow error that occurred with prepended 0 characters in some columns of type DECIMAL. (Bug #2128)

  • Filesort was never shown in EXPLAIN if query contained an ORDER BY NULL clause. (Bug #1335)

  • Fixed invalidation of whole query cache on DROP DATABASE. (Bug #1898)

  • Fixed bug in range optimizer that caused wrong results for some unlikely AND/OR queries. (Bug #1828)

  • Fixed a crash in ORDER BY when ordering by expression and identifier. (Bug #1945)

  • Fixed a crash in an open HANDLER when an ALTER TABLE was executed in a different connection. (Bug #1826)

  • Fixed a bug in trunc* operator of full-text search which sometimes caused MySQL not to find all matched rows.

  • Fixed bug in prepending 0 characters to DECIMAL column values.

  • Fixed optimizer bug, introduced in 4.0.16, when REF access plan was preferred to more efficient RANGE on another column.

  • Fixed problem when installing a MySQL server as a Windows service using a command of the form mysqld --install mysql --defaults-file=path-to-file. (Bug #1643)

  • Fixed an incorrect result from a query that uses only const tables (such as one-row tables) and nonconstant expression (such as RAND()). (Bug #1271)

  • Fixed bug when the optimizer did not take SQL_CALC_FOUND_ROWS into account if LIMIT clause was present. (Bug #1274)

  • mysqlbinlog now asks for a password at the console when the -p or --password option is used with no argument. This is consistent with the way that other clients such mysqladmin and mysqldump behave.


    A consequence of this change is that it is no longer possible to invoke mysqlbinlog as mysqlbinlog -p pass_val (with a space between the -p option and the following password value). (Bug #1595)

  • Fixed bug accidentally introduced in 4.0.16 where the slave SQL thread deleted its replicated temporary tables when STOP SLAVE was issued.

  • In a chain replication setup A->B->C, if 2 sessions on A updated temporary tables of the same name at the same time, the binary log of B became incorrect, resulting in C becoming confused. (Bug #1686)

  • In a chain replication setup A->B->C, if STOP SLAVE was issued on B while it was replicating a temporary table from A, then when START SLAVE was issued on B, the binary log of B became incorrect, resulting in C becoming confused. (Bug #1240)

  • When MASTER_LOG_FILE and MASTER_LOG_POS were not specified, CHANGE MASTER TO used the coordinates of the slave I/O thread to set up replication, which broke replication if the slave SQL thread lagged behind the slave I/O thread. This caused the slave SQL thread to lose some events. The new behavior is to use the coordinates of the slave SQL thread instead. See Section, “CHANGE MASTER TO Syntax”. (Bug #1870)

  • Now if integer is stored or converted to TIMESTAMP or DATETIME value checks of year, month, day, hour, minute and second ranges are performed and numbers representing illegal timestamps are converted to 0 value. This behavior is consistent with manual and with behavior of string to TIMESTAMP/DATETIME conversion. (Bug #1448)

  • Fixed bug when BIT_AND() and BIT_OR() group functions returned incorrect value if SELECT used a temporary table and no rows were found. (Bug #1790).

  • BIT_AND() is now unsigned in all contexts. This means that it now returns 18446744073709551615 (= 0xffffffffffffffff) instead of -1 if there were no rows in the result.

  • Fixed bug with BIT_AND() still returning signed value for an empty set in some cases. (Bug #1972)

  • Fixed bug with ^ (XOR) and >> (bit shift) still returning signed value in some cases. (Bug #1993)

  • Replication: a rare race condition in the slave SQL thread, which could lead to a wrong complain that the relay log is corrupted. (Bug #2011)

  • Replication: in the slave SQL thread, a multiple-table UPDATE could produce a wrong complain that some record was not found in one table, if the UPDATE was preceded by a INSERT ... SELECT. (Bug #1701)

  • Fixed deficiency in MySQL code which is responsible for scanning directories. This deficiency caused SHOW TABLE STATUS to be very slow when a database contained a large number of tables, even if a single particular table were specified. (Bug #1952)