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:
Security Fix: A UDF library-loading vulnerability could result in a buffer overflow and code execution. (CVE-2005-2558)
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
Some data definition statements (
TABLE where the table was not a temporary table,
DROP DATABASE, and
CREATE DATABASE) were not being
written to the binary log after a
also caused problems with replication.
As a result of this fix, the folowing statements now cause an implicit commit:
System variables are now treated as having
SYSVAR (system constant) coercibility. For
@@version is now treated like
@@character_set_client is now treated like
CHARSET( USER() ). See
Section 184.108.40.206, “Special Cases Where Collation Determination Is Tricky”.
You can again refer to other tables in the
KEY UPDATE part of an
SELECT statement as long as there is no
BY in the
One side effect of this is that you may have to qualify
nonunique column names in the values part of
DUPLICATE KEY UPDATE.
server option to request logging of slow administrative
statements such as
ALTER TABLE to the slow query
log. These statements were logged in MySQL 4.0, but not in 4.1.
C API function for setting the default character set of the
current connection. This allows clients to affect the character
set used by
SHOW BINARY LOGS now displays a
File_size column that indicates the size of
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
A vulnerability in
zlib could result in a
buffer overflow and arbitrary code execution. Shortly after
MySQL 4.1.13 was released, a second potential
zlib security flaw was discovered and fixed.
A patch for this flaw was applied to the 4.1.13 sources, and the
result published as MySQL 4.1.13a. The affected binaries were
(Bug#11844, CVE-2005-2096, CVE-2005-1849)
On Windows systems, a user with any of the following privileges
*.* could crash mysqld
by issuing a
USE LPT1; or
In addition, any of the commands
USE COM1;, or
USE AUX; would report success even though the
database was not in fact changed.
NDB failed to build with
MySQL Cluster: When trying to open a table that could not be discovered or unpacked, the cluster returned error codes which the MySQL server falsely interpreted as operating system errors. (Bug#10365)
LOAD DATA ... REPLACE INTO ... on a
replication slave failed for an
having a unique index in addition to the primary key.
Replication: An invalid comaprison caused warnings for packet length in replication on 64-bit compilers. (Bug#11064)
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)
mysqldump now exports
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
IP addresses not shown in
command on second ndb_mgmd (or on ndb_mgmd restart).
MySQL would not compile correctly on QNX due to missing
ROLLUP query could return a wrong result
set when its
GROUP BY clause contained
references to the same column.
Queries with subqueries in the
were not being added to the query cache.
Prepared statement with subqueries returned corrupt data. (Bug#11458)
Errors could occur when performing
on calculated values of a single row table. These could
sometimes cause the server to crash on Windows.
Optimizer performed range check when comparing unsigned integers to negative constants, could cause errors. (Bug#11185)
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
A mysqld process already exists...
statement would crash the server when no
database was selected.
mysql_config script did not handle
symbolic linking properly.
The host name cache was not working. (Bug#10931)
INSERT ... SELECT ... ON DUPLICATE KEY UPDATE
produced inaccurate results.
A three byte buffer overflow in the client functions caused improper exiting of the client when reading a command from the user. (Bug#10841)
@@sql_mode = NULL caused an erroneous
On Mac OS X,
libmysqlclient_r.a now is built
--fno-common to make it possible to link a
shared two-level namespace library against
InnoDB wrongly reported in the
.err log that MySQL wass trying to drop a
nonexistent table, if no more room remained in the tablespace.
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
A problem with the
my_global.h file caused
compilation of MySQL to fail on single-processor Linux systems
running 2.6 kernels.
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.
#pragma interface or
implementation in source files caused portability
CREATE TABLE ... SELECT FROM
TABLE on the same
table caused the server to crash.
Under certain rare circumstances, inserting into the
mysql.host table could cause the server to
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
CASE operator 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
BY and such operations).
An overly strict debugging assertion caused debug server builds
to fail for some
const_expr was a constant expression
such as a subquery.
A problem with the
LIKE comparisons to fail.
mysqldump --xml did not format
NULL column values correctly.
ALTER TABLE ... ENABLE INDEXES treated
NULL values as equal when collecting index
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
MySQL sometimes reported erroneously that certain character values had crashed a table when trying to convert other character sets to UTF-8. (Bug#9557)
SELECT DISTINCT ... GROUP BY
rows (it should return a single row).
The server timed out SSL connections too quickly on Windows. (Bug#8572)
OPTIMIZE run on an
table did not return a Table is full
error if there was insufficient room in the tablespace.
An incorrect result was obtained for columns that included an
aggregate function as part of an expression, and when
WITH ROLLUP was used with
ROLLUP returned wrong results
for expressions containing
GROUP BY columns.
A Boolean full-text search where a query contained more query terms than one-third of the query length caused the server to hang or crash. (Bug#7858)
SHOW FIELDS truncated the
TYPE column to 40 characters.
This fix was reverted in MySQL 4.1.15 because it broke existing applications.
See also Bug#12817.
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)
TABLE ... SELECT for
was too weak. It allowed
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.
The incorrect sequence of statements
HANDLER for an
InnoDB table resulted in a server crash
rather than an error.