Released on 13 Nov 2002
MySQL 4.0.5 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:

  • Port number was added to host name (if it is known) in SHOW PROCESSLIST statement.

  • Changed handling of last argument in WEEK() so that you can get week number according to the ISO 8601 specification. (Old code should still work).

  • Fixed that INSERT DELAYED threads don't hang on Waiting for INSERT when one sends a SIGHUP to mysqld.

  • Change that AND works according to standard SQL when it comes to NULL handling. In practice, this affects only queries where you do something like WHERE ... NOT (NULL AND 0).

  • mysqld now resolves basedir to its full path (with realpath()). This enables one to use relative symlinks to the MySQL installation directory. This however causes show variables to report different directories on systems where there is a symbolic link in the path.

  • Fixed that MySQL does not use index scan on index disabled with IGNORE INDEX or USE INDEX. to be ignored.

  • Added --use-frm option to mysqlcheck. When used with REPAIR TABLE, it gets the table structure from the .frm file, so the table can be repaired even if the .MYI header is corrupted.

  • Fixed bug in MAX() optimization when used with JOIN and ON expressions.

  • Added support for reading of MySQL 4.1 table definition files.

  • BETWEEN behavior changed (see Section 11.3.2, “Comparison Functions and Operators”). Now datetime_col BETWEEN timestamp AND timestamp should work as expected.

  • One can create TEMPORARY MERGE tables now.

  • DELETE FROM myisam_table now shrinks not only the .MYD file but also the .MYI file.

  • When one uses the --open-files-limit=val option to mysqld_safe it is now passed on to mysqld.

  • Changed output from EXPLAIN from 'where used' to 'Using where' to make it more in line with other output.

  • Removed variable safe_show_database as it was no longer used.

  • Updated source tree to be built using automake 1.5 and libtool 1.4.

  • Fixed an inadvertently changed option (--ignore-space) back to the original --ignore-spaces in mysqlclient. (Both syntaxes work).

  • Do not require UPDATE privilege when using REPLACE.

  • Added support for DROP TEMPORARY TABLE ..., to be used to make replication safer.

  • When transactions are enabled, all commands that update temporary tables inside a BEGIN/COMMIT are now stored in the binary log on COMMIT and not stored if one does ROLLBACK. This fixes some problems with nontransactional temporary tables used inside transactions.

  • Permit braces in joins in all positions. Formerly, things like SELECT * FROM (t2 LEFT JOIN t3 USING (a)), t1 worked, but not SELECT * FROM t1, (t2 LEFT JOIN t3 USING (a)). Note that braces are simply removed, they do not change the way the join is executed.

  • InnoDB now supports also isolation levels READ UNCOMMITTED and READ COMMITTED. For a detailed InnoDB changelog, see Section C.4, “Changes in InnoDB”.

Bugs fixed:

  • Fixed bug in MAX() optimization when used with JOIN and ON expressions.

  • Fixed that INSERT DELAY threads don't hang on Waiting for INSERT when one sends a SIGHUP to mysqld.

  • Fixed that MySQL does not use an index scan on an index that has been disabled with IGNORE INDEX or USE INDEX.

  • Corrected test for root user in mysqld_safe.

  • Fixed error message issued when storage engine cannot do CHECK TABLE or REPAIR TABLE.

  • Fixed rare core dump problem in complicated GROUP BY queries that didn't return any result.

  • Fixed mysqlshow to work properly with wildcarded database names and with database names that contain underscores.

  • Portability fixes to get MySQL to compile cleanly with Sun Forte 5.0.

  • Fixed MyISAM crash when using dynamic-row tables with huge numbers of packed columns.

  • Fixed query cache behavior with BDB transactions.

  • Fixed possible floating point exception in MATCH relevance calculations.

  • Fixed bug in full-text search IN BOOLEAN MODE that made MATCH to return incorrect relevance value in some complex joins.

  • Fixed a bug that limited MyISAM key length to a value slightly less that 500. It is exactly 500 now.

  • Fixed that GROUP BY on columns that may have a NULL value doesn't always use disk based temporary tables.

  • The file name argument for the --des-key-file argument to mysqld is interpreted relative to the data directory if given as a relative path name.

  • Removed a condition that temp table with index on column that can be NULL has to be MyISAM. This was okay for 3.23, but not needed in 4.*. This resulted in slowdown in many queries since 4.0.2.

  • Small code improvement in multiple-table updates.

  • Fixed a newly introduced bug that caused ORDER BY ... LIMIT row_count to not return all rows.

  • Fixed a bug in multiple-table deletes when outer join is used on an empty table, which gets first to be deleted.

  • Fixed a bug in multiple-table updates when a single table is updated.

  • Fixed bug that caused REPAIR TABLE and myisamchk to corrupt FULLTEXT indexes.

  • Fixed bug with caching the mysql grant table database. Now queries in this database are not cached in the query cache.

  • Small fix in mysqld_safe for some shells.

  • Give error if a MyISAM MERGE table has more than 232 rows and MySQL was not compiled with -DBIG_TABLES.

  • Fixed some ORDER BY ... DESC problems with InnoDB tables.