MySQL

4.0.13

Released on 16 May 2003
MySQL 4.0.13 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 http://www.mysql.com/about/legal/lifecycle/#calendar. 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:

  • PRIMARY KEY now implies NOT NULL. (Bug #390)

  • The Windows binary packages are now compiled with --enable-local-infile to match the Unix build configuration.

  • Removed timing of tests from mysql-test-run. time does not accept all required parameters on many platforms (for example, QNX) and timing the tests is not really required (it is not a benchmark anyway).

  • SHOW MASTER STATUS and SHOW SLAVE STATUS required the SUPER privilege; now they accept REPLICATION CLIENT as well. (Bug #343)

  • Added multi-threaded MyISAM repair optimization and myisam_repair_threads variable to enable it. See Section 5.1.3, “Server System Variables”.

  • Added innodb_max_dirty_pages_pct variable which controls amount of dirty pages permitted in InnoDB buffer pool.

  • CURRENT_USER() and Access denied error messages now report the host name exactly as it was specified in the GRANT statement.

  • Removed benchmark results from the source and binary distributions. They are still available in the BK source tree, though.

  • InnoDB tables now support ANALYZE TABLE.

  • MySQL now issues an error when it opens a table that was created with MySQL 4.1.

  • Option --new now changes binary items (0xFFDF) to be treated as binary strings instead of numbers by default. This fixes some problems with character sets where it is convenient to input the string as a binary item. After this change you have to convert the binary string to INTEGER with a CAST if you want to compare two binary items with each other and know which one is bigger than the other. SELECT CAST(0xfeff AS UNSIGNED) < CAST(0xff AS UNSIGNED). This is the default behavior in MySQL 4.1. (Bug #152)

  • Enabled delayed_insert_timeout on Linux (most modern glibc libraries have a fixed pthread_cond_timedwait()). (Bug #211)

  • Do not create more insert delayed threads than given by max_delayed_threads. (Bug #211)

  • Changed UPDATE ... LIMIT to apply the limit to rows that were matched, whether or not they actually were changed. Previously the limit was applied as a restriction on the number of rows changed.

  • Tuned optimizer to favor clustered index over table scan.

  • BIT_AND() and BIT_OR() now return an unsigned 64-bit value.

  • Added warnings to error log indicating why a secure connection failed (when running with --log-warnings).

  • Deprecated the options --skip-symlink and --use-symbolic-links and replaced them with --symbolic-links.

  • The default option for innodb_flush_log_at_trx_commit was changed from 0 to 1 to make InnoDB tables ACID by default. See Section 13.2.4, “InnoDB Startup Options and System Variables”.

  • Added a feature to SHOW KEYS to display keys that are disabled by ALTER TABLE DISABLE KEYS statement.

  • When using a nonexistent table type with CREATE TABLE, first try if the default table type exists before falling back to MyISAM.

  • Added MEMORY as an alias for HEAP.

  • Renamed function rnd to my_rnd as the name was too generic and is an exported symbol in libmysqlclient (thanks to Dennis Haney for the initial patch).

  • Portability fix: renamed include/dbug.h to include/my_dbug.h.

  • mysqldump no longer silently deletes the binary logs when invoked with the --master-data or --first-slave option; while this behavior was convenient for some users, others may suffer from it. Now you must explicitly ask for binary logs to be deleted by using the new --delete-master-logs option.

  • If the slave is configured (using for example --replicate-wild-ignore-table=mysql.%) to exclude mysql.user, mysql.host, mysql.db, mysql.tables_priv and mysql.columns_priv from replication, then GRANT and REVOKE are not replicated.

Bugs fixed:

  • Logged Access denied error message had incorrect Using password value. (Bug #398)

  • Fixed bug with NATURAL LEFT JOIN, NATURAL RIGHT JOIN and RIGHT JOIN when using many joined tables. The problem was that the JOIN method was not always associated with the tables surrounding the JOIN method. If you have a query that uses many RIGHT JOIN or NATURAL ... JOINS you should verify that they work as you expected after upgrading MySQL to this version. (Bug #291)

  • Fixed mysql parser not to erroneously interpret ' or " characters within /* ... */ comment as beginning a quoted string.

  • mysql command-line client no longer looks for \* commands inside backtick-quoted strings.

  • Fixed Unknown error when using UPDATE ... LIMIT. (Bug #373)

  • Fixed problem with ANSI mode and GROUP BY with constants. (Bug #387)

  • Fixed bug with UNION and OUTER JOIN. (Bug #386)

  • Fixed bug if one used a multiple-table UPDATE and the query required a temporary table bigger than tmp_table_size. (Bug #286)

  • Run mysql_install_db with the -IN-RPM option for the Mac OS X installation to not fail on systems with improperly configured host name configurations.

  • LOAD DATA INFILE now reads 000000 as a zero date instead of "2000-00-00".

  • Fixed bug that caused DELETE FROM table WHERE const_expression always to delete the whole table (even if expression result was false). (Bug #355)

  • Fixed core dump bug when using FORMAT('nan',#). (Bug #284)

  • Fixed name resolution bug with HAVING ... COUNT(DISTINCT ...).

  • Fixed incorrect result from truncation operator (*) in MATCH ... AGAINST() in some complex joins.

  • Fixed a crash in REPAIR ... USE_FRM command, when used on a read-only table, nonexistent table, or a table with a crashed index file.

  • Fixed a crashing bug in mysql monitor program. It occurred if program was started with --no-defaults, with a prompt that contained the host name and a connection to a nonexistent database was requested.

  • Fixed problem when comparing a key for a multi-byte character set. (Bug #152)

  • Fixed bug in LEFT, RIGHT and MID when used with multi-byte character sets and some GROUP BY queries. (Bug #314)

  • Fix problem with ORDER BY being discarded for some DISTINCT queries. (Bug #275)

  • Fixed that SET sql_big_selects = 1 works as documented (This corrects a new bug introduced in 4.0)

  • Fixed some serious bugs in UPDATE ... ORDER BY. (Bug #241)

  • Fixed unlikely problem in optimizing WHERE clause with constant expression like in WHERE 1 AND (a=1 AND b=1).

  • Fixed that SET sql_big_selects = 1 works again.

  • Introduced proper backtick quoting for db.table in SHOW GRANTS.

  • FULLTEXT index stopped working after ALTER TABLE that converts TEXT column to CHAR. (Bug #283)

  • Fixed a security problem with SELECT and wildcarded select list, when user only had partial column SELECT privileges on the table.

  • Mark a MyISAM table as "analyzed" only when all the keys are indeed analyzed.

  • Only ignore world-writable my.cnf files that are regular files (and not, for example, named pipes or character devices).

  • Fixed few smaller issues with SET PASSWORD.

  • Fixed error message which contained deprecated text.

  • Fixed a bug with two NATURAL JOINs in the query.

  • SUM() didn't return NULL when there was no rows in result or when all values was NULL.

  • On Unix, symbolic link handling was not enabled by default and there was no way to turn this on.

  • Added missing dashes to parameter --open-files-limit in mysqld_safe. (Bug #264)

  • Fixed incorrect host name for TCP/IP connections displayed in SHOW PROCESSLIST.

  • Fixed a bug with NAN in FORMAT(...) function ...

  • Fixed a bug with improperly cached database privileges.

  • Fixed a bug in ALTER TABLE ENABLE / DISABLE KEYS which failed to force a refresh of table data in the cache.

  • Fixed bugs in replication of LOAD DATA INFILE for custom parameters (ENCLOSED, TERMINATED and so on) and temporary tables. (Bug #183, Bug #222)

  • Fixed a replication bug when the master is 3.23 and the slave 4.0: the slave lost the replicated temporary tables if FLUSH LOGS was issued on the master. (Bug #254)

  • Fixed a bug when doing LOAD DATA INFILE IGNORE: When reading the binary log, mysqlbinlog and the replication code read REPLACE instead of IGNORE. This could make the slave's table become different from the master's table. (Bug #218)

  • Fixed a deadlock when relay_log_space_limit was set to a too small value. (Bug #79)

  • Fixed a bug in HAVING clause when an alias is used from the select list.

  • Fixed overflow bug in MyISAM when a row is inserted into a table with a large number of columns and at least one BLOB/TEXT column. Bug was caused by incorrect calculation of the needed buffer to pack data.

  • Fixed a bug when SELECT @non_existent_variable caused an error in the client/server protocol due to net_printf() output being sent to the client twice.

  • Fixed a bug in setting the sql_big_selects option.

  • Fixed a bug in SHOW PROCESSLIST which only displayed a localhost in the "Host" column. This was caused by a glitch that used only current thread information instead of information from the linked list of threads.

  • Removed unnecessary Mac OS X helper files from server RPM. (Bug #144)

  • Permit optimization of multiple-table update for InnoDB tables as well.

  • Fixed a bug in multiple-table updates that caused some rows to be updated several times.

  • Fixed a bug in mysqldump when it was called with --master-data: the CHANGE MASTER TO statements appended to the SQL dump had incorrect coordinates. (Bug #159)

  • Fixed a bug when an updating query using USER() was replicated on the slave; this caused a segmentation fault on the slave. (Bug #178). USER() is still badly replicated on the slave (it is replicated to "").