This is a bugfix release for the current production release family. This version was released as MySQL Classic 5.0.25 to commercial customers only.
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 Enterprise (a commercial MySQL offering). For more details, please see http://www.mysql.com/products/enterprise.
Functionality Added or Changed
DROP VIEW statement named
multiple views, it stopped with an error if a nonexistent view
was named and did not drop the remaining views. Now it continues
on and reports an error at the end, similar to
The server now issues a warning if it removes leading spaces from an alias. (Bug #10977)
VIEW_DEFINITION column of the
VIEWS table now contains
information about the view algorithm.
InnoDB now honors
INDEX. Previously using
INDEX in cases where an index sort would be slower
than a filesort had no effect when used with
This fix was reverted in MySQL 5.0.26, and a new fix made in MySQL 5.0.40.
The bundled yaSSL library was upgraded to version 1.3.7.
For mysqlshow, if a database name argument
contains wildcard characters (such as
_”) but matches a single
database name exactly, treat the name as a literal name. This
enables a command such as mysqlshow
information_schema to work without having to escape
the wildcard character.
The mysql client used the default character
set if it automatically reconnected to the server, which is
incorrect if the character set had been changed. To enable the
character set to remain synchronized on the client and server,
the mysql command
\C) that changes the default character
set and now also issues a
statement. The changed character set is used for reconnects.
For spatial data types, the server formerly returned these as
VARSTRING values with a binary collation. Now
the server returns spatial values as
The mysqld and mysqlmanager man pages have been reclassified from volume 1 to volume 8. (Bug #21220)
configure MySQL with debugging support enables you to use the
when you start the server. This causes the Bison parser that is
used to process SQL statements to dump a parser trace to the
server's standard error output. Typically, this output is
written to the error log.
configure now defines the symbol
indicate whether the source tree is configured to be compiled
with debugging support.
Table comments longer than 60 characters and column comments longer than 255 characters were truncated silently. Now a warning is issued, or an error in strict mode. (Bug #13934)
For a successful dump, mysqldump now writes a SQL comment to the end of the dump file in the following format:
-- Dump completed on YYYY-MM-DD hh:mm:ss
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
MONTHNAME() functions. See
MySQL Server Locale Support.
On Windows, typing Control+C while a query was running caused the mysql client to crash. Now it causes mysql to attempt to kill the current statement. If this cannot be done, or Control+C is typed again before the statement is killed, mysql exits. (In other words, mysql's behavior with regard to Control+C is now the same as it is on Unix platforms.) (Bug #17926)
References: See also Bug #1989.
The MySQL distribution now compiles on UnixWare 7.13. (Bug #20190)
mysql_upgrade no longer reads the
[client] option file group because it is not
a client and did not understand client options such as
host. Now it reads only the
MySQL did not properly do stack dumps on
systems. (Note that the initial fix for this problem was
discovered not to be correct. Further work on the problem was
undertaken only for MySQL 5.1 and up. See Bug #31891.)
The bundled yaSSL library licensing has added a FLOSS exception
similar to MySQL to resolve licensing incompatibilities with
MySQL. (See the
extra/yassl/FLOSS-EXCEPTIONS file in a
MySQL source distribution for details.)
A stored routine created by one user and then made accessible to
a different user using
could be executed by that user with the privileges of the
(Bug #18630, CVE-2006-4227)
Security Fix: On Linux, and possibly other platforms using case-sensitive file systems, 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. (Bug #17647, CVE-2006-4226)
MySQL Cluster; Packaging:
The ndb_mgm program was included in both the
MySQL-ndb-management RPM packages, resulting
in a conflict if both were installed. Now
ndb_mgm is included only in
It was possible to use port numbers greater than 65535 for
ServerPort in the
MySQL 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)
id was the node ID of a node
that was already running would fail with an invalid error
MySQL Cluster: ndb_size.pl and ndb_error_reporter were missing from RPM packages. (Bug #20426)
MySQL 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)
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.
MySQL Cluster: Trying to create or drop a table while a node was restarting caused the node to crash. This is now handled by raising an error. (Bug #18781)
Some queries involving joins on very large
NDB tables could crash the MySQL
MySQL Cluster: A partial rollback could lead to node restart failures. (Bug #21536)
MySQL Cluster: Under certain circumstances, a node that was shut down then restarted could hang during the restart. (Bug #18863)
Incorrect values were inserted into
AUTO_INCREMENT columns of tables restored
from a cluster backup.
MySQL Cluster: Restarting a data node while DDL operations were in progress on the cluster could cause other data nodes to fail. This could also lead to mysqld hanging or crashing under some circumstances. (Bug #21017, Bug #21050)
A Cluster whose storage nodes were installed from the
MySQL-ndb-storage- RPMs could not perform
ALTER operations that made use of nondefault
character sets or collations.
MySQL Cluster: The server provided a nondescriptive error message when encountering a fatally corrupted REDO log. (Bug #21615)
MySQL Cluster: A node failure during a scan could sometime cause the node to crash when restarting too quickly following the failure. (Bug #20197)
NDB and possibly
InnoDB tables, a
UPDATE trigger could insert incorrect values.
perror did not properly report
NDB error codes.
MySQL Cluster: A memory leak occurred when running ndb_mgm -e "SHOW". (Bug #21670)
MySQL Cluster: A vague error message was returned when reading both schema files during a restart of the cluster. (Bug #20860)
MySQL Cluster: An issue that arose from a patch for Bug #19852 made in MySQL 5.0.23 was corrected. (See the section called “Changes in MySQL 5.0.23 (Not released)”.)
When the redo buffer ran out of space, a Pointer too
large error was raised and the cluster could become
unusable until restarted with
The management client
ALL STATUS command
could sometimes report the status of some data nodes
The server did not honor the value set for
ndb_cache_check_time in the
REPLACE statements did not work
correctly on an
NDB table having
both a primary key and a unique key. In such cases, proper
values were not set for columns which were not explicitly
referenced in the statement.
SELECT ... FOR
UPDATE failed to lock the selected rows.
MySQL 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 the same node group to shut down. (Bug #21213)
MySQL Cluster: When attempting to restart the cluster following a data import, the cluster failed during Phase 4 of the restart with Error 2334: Job buffer congestion. (Bug #20774)
MySQL Cluster: The server failed with a nondescriptive error message when out of data memory. (Bug #18475)
Replication; Cluster Replication:
In some cases, a large number of MySQL servers sending requests
to the cluster simultaneously could cause the cluster to crash.
This could also be triggered by many
NDB API clients making simultaneous
event subscriptions or unsubscriptions.
Invoking the MGM API function
ndb_mgm_listen_event() caused a
The MGM API function
was not implemented.
Memory overruns could occur for certain kinds of subqueries. (Bug #21477)
A query of the form shown here caused the server to crash:
SELECT * FROM t1 NATURAL JOIN ( t2 JOIN ( t3 NATURAL JOIN t4, t5 NATURAL JOIN t6 ) ON (t3.id3 = t2.id3 AND t5.id5 = t2.id5) );
References: This bug was introduced by Bug #20989.
MyISAM table (using
CHECK TABLE) having a spatial
index and only one row would wrongly indicate that the table was
mysql_upgrade created temporary files in a possibly insecure way. (Bug #21224)
The optimizer could produce an incorrect result after
AND with collations such as
If a column definition contained a character set declaration,
DEFAULT value began with an introducer,
the introducer character set was used as the column character
SELECT statements using
GROUP BY against a view could have missing
columns in the output when there was a trigger defined on one of
the base tables for the view.
A query using
WHERE did not
return consistent results on successive invocations. The
column IS NULL
column in each part of the
WHERE clause could be either the same column,
or two different columns, for the effect to be observed.
mysqld --flush failed to flush
MyISAM table changes to disk following an
UPDATE statement for which no
updated column had an index.
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.
The Instance Manager permitted
to be used on a server instance that was not running.
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)
The server crashed when using the range access method to execut
a subquery with a
ORDER BY DESC clause.
Triggers on tables in the
caused a server crash. Triggers for tables in this database are
no longer permitted.
(Bug #18361, Bug #18005)
TIMESTAMPDIFF() examined only the
date and ignored the time when the requested difference unit was
months or quarters.
Some server errors were not reported to the client, causing both to try to read from the connection until a hang or crash resulted. (Bug #16581)
DROP DATABASE or
SHOW OPEN TABLES was issued while
concurrently in another connection issuing
TABLE LIKE or any other statement that required a name
lock, the server crashed.
(Bug #21216, Bug #19403)
EXPORT_SET() did not accept
arguments with coercible character sets.
When using tables containing
VARCHAR columns created under
MySQL 4.1 with a 5.0 or later server, for some queries the
metadata sent to the client could have an empty column name.
InnoDB was slow with more than 100,000
Attempting to insert a string of greater than 4096 bytes into a
FEDERATED table resulted in the error
ERROR 1296 (HY000) at line 2: Got error 10000 'Error
on remote system: 1054: Unknown column
FEDERATED. This error was raised regardless of the
type of column involved (
TEXT, and so on.)
For connections that required a
value, a check was performed to verify that the value was
correct, but the connection was not refused if not.
In debugging mode, mysqld printed
server_init rather than
network_init during network initialization.
Using cursors with
COMMITTED isolation level could cause
InnoDB to crash.
FEDERATED tables raised invalid duplicate key
errors when attempting on one server to insert rows having the
same primary key values as rows that had been deleted from the
linked table on the other server.
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
A query result could be sorted improperly when using
ORDER BY for the second table in a join.
option was being ignored. With the fix, if you choose a
nondefault character set with
should also use
--collation-server to specify the
Tables created with the
engine did not permit indexes using
Use of zero-length variable names caused a server crash. (Bug #20908)
On Windows, a definition for
missing from the C client library.
DATE can be represented as an
integer (such as
20060101) or as a string
'2006.01.01'). When a
TIME) column is compared in one
SELECT against both
representations, constant propagation by the optimizer led to
DATE as a string
DATE as an integer. This
could result in integer comparisons such as
erroneously producing a false result.
For very complex
statements could create temporary tables that were too large,
and for which the temporary files were not removed, causing
subsequent queries to fail.
ENCRYPT() functions should return
a binary string, but the result sometimes was converted to the
character set of the argument.
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.
Prepared statements caused general log and server memory corruption. (Bug #14346)
SELECT ... FOR
UPDATE statements that used
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.)
The optimizer sometimes produced an incorrect row-count estimate
after elimination of
tables. This resulted in choosing extremely inefficient
execution plans in same cases when distribution of data in joins
For ODBC compatibility, MySQL supports use of
col_name IS NULL
DATETIME columns that are
NOT NULL, to permit column values of
00:00:00' to be selected. However, this was not
WHERE clauses in
The optimizer assumed that if
(a=x AND b=x)
(a=x AND b=x) AND a=b is also true.
But that is not always so if
b have different data types.
NUL byte within a prepared statement string
caused the rest of the string not to be written to the query
log, permitting logging to be bypassed.
USE did not refresh database
privileges when employed to re-select the current database.
not treated as equivalent because
failed to unescape backslashes (
doubled apostrophe/single quote characters
STR_TO_DATE() sometimes would
NULL if the
format specifier was not the last specifier in the format
For user-defined functions created with
CREATE FUNCTION, the
DEFINER clause is not legal, but no error was
INSERT INTO ... SELECT ... LIMIT 1 could be
slow because the
LIMIT was ignored when
selecting candidate rows.
query_cache_type set to 0,
RESET QUERY CACHE was very slow and other
threads were blocked during the operation. Now a cache reset is
faster and nonblocking.
This fix was reverted in MySQL 5.0.40.
References: See also Bug #25301.
The implementation for
UNCOMPRESS() did not indicate
that it could return
NULL, causing the
optimizer to do the wrong thing.
Updating a column of a
FEDERATED table to
NULL sometimes failed.
SELECT with a subquery that was
bound to the outer query over multiple columns returned
different results when a constant was used instead of one of the
CSV storage engine, memory-mapped
pages of the data file were not invalidated when new data was
appended to the file using traditional (file descriptor-based)
variable was mishandled when set from an option file or on the
When setting a column to its implicit default value as the
result of inserting a
NULL into a
NOT NULL column as part of a multi-row insert
LOAD DATA operation, the
server returned a misleading warning message.
SELECT sometimes generated a spurious
count doesn't match value count error.
The optimizer did not take advantage of indexes on columns used
for the second or third arguments of
ORDER BY to a
DISTINCT( query could
produce incorrect results.
COUNT(*) queries with
ORDER BY and
return the wrong result.
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 nongroup queries with aggregate functions. The
current fix disables the optimization in such cases.
Using tables from MySQL 4.x in MySQL 5.x, in particular those
VARCHAR fields and using
INSERT DELAYED to update data in
the table would result in either data corruption or a server
(Bug #16218, Bug #17294, Bug #16611)
A query using
( yielded a
different result from the same query using the same
column < ANY
column > ANY
The value returned by a stored function returning a string value was not of the declared character set. (Bug #16211)
The yaSSL library bundled with
had some conflicts with OpenSSL. Now macros are used to rename
the conflicting symbols to have a prefix of
Creation of a view as a join of views or tables could fail if the views or tables are in different databases. (Bug #20482)
perror crashed on Solaris due to
NULL return value of
strerror() system call.
INFORMATION_SCHEMA tables could
erroneously return an empty result.
The server crashed if it tried to access a
CSV table for which the data file had been
ORDER BY RAND() LIMIT 1 always set a user
variable to the last possible value from the table.
was not honored for client connections.
It is possible to create
MERGE tables into
which data cannot be inserted (by not specifying a
UNION clause. However, when an
insert was attempted, the error message was confusing. Now an
error occurs indicating that the table is read only.
For mysql, escaping with backslash sometimes did not work. (Bug #20103)
For certain queries, the server incorrectly resolved a reference to an aggregate function and crashed. (Bug #20868)
A stored procedure that created and invoked a prepared statement was not executed when called in a mysqld init-file. (Bug #17843)
mysql_list_fields() C API
function returned the incorrect table name for views.
Multiple invocations of the
REVERSE() function could return
MASTER LOGS at the same time as binary log files were
being switched would cause
mysqld to hang.
Database and table names have a maximum length of 64 characters (even if they contain multi-byte characters), but were truncated to 64 bytes.
This fix was reverted in MySQL 5.0.26.
A user-defined function that is called on each row of a returned
result set, could receive an
that is set, if it was set previously. Now, the
is_null state is reset to false before each
invocation of a UDF.
could produce incorrect fractional part and trailing garbage
caused by signed overflow.
mysqldump incorrectly tried to use
LOCK TABLES for tables in the
A subquery that contained
could return more than
An issue with yaSSL prevented Connector/J clients from connecting to the server using a certificate. (Bug #19705)
A subquery in the
WHERE clause of the outer
query and using
BY returned an incorrect result.
mysqlimport sends a
@@character_set_database=binary statement to the
server, but this is not understood by pre-4.1 servers. Now
mysqlimport encloses the statement within a
/*!40101 ... */ comment so that old servers
will ignore it.
If a query had a condition of the form
ref access, then
NULL filtering was not performed for the
condition. This could make query execution slower.
On Windows, mysql_upgrade.exe could not find mysqlcheck.exe. (Bug #20950)
A server or network failure with an open client connection would cause the client to hang even though the server was no longer available.
As a result of this change, the
MYSQL_OPT_WRITE_TIMEOUT options for
mysql_options() now apply to
TCP/IP connections on all platforms. Previously, they applied
only to Windows.
mysql crashed for very long arguments to the
optimizer could experience a memory overrun when the number of
table columns covered by an index was sufficiently large,
possibly resulting in a server crash.
Performance during an import on a table with a trigger that called a stored procedure was severely degraded. This issue first arose in MySQL 5.0.18. (Bug #21013)
Referring to a stored function qualified with the name of one database and tables in another database caused a “table doesn't exist” error. (Bug #18444)
Use of the
--prompt option or
prompt command caused
mysql to be unable to connect to the Instance
The C API failed to return a status message when invoking a stored procedure. (Bug #15752)
Stored procedures did not use the character set defined for the database in which they were created. (Bug #16676)
A user variable set to a value selected from an unsigned column was stored as a signed value. (Bug #7498)
A stored procedure with a
that encountered an error continued to execute a statement that
caused an error, rather with the next statement following the
one that caused the error.
On 64-bit Windows, a missing table generated error 1017, not the correct value of 1146. (Bug #21396)
CREATE USER did not respect the
16-character user name limit.
BIT columns of
FEDERATED tables did not work.
SHOW INNODB STATUS contained some
Users who had the
privilege for a view and privileges on one of the view's
base tables could not see records in
INFORMATION_SCHEMA tables relating to the
The same trigger error message was produced under two conditions: The trigger duplicated an existing trigger name, or the trigger duplicated an existing combination of action and event. Now different messages are produced for the two conditions so as to be more informative. (Bug #10946)
libmysqld produced some warnings to
stderr which could not be silenced. These
warnings now are suppressed.
Use of the join cache in favor of an index for
BY operations could cause incorrect result sorting.
--master-data option for
mysqldump requires certain privileges, but
mysqldump generated a truncated dump file
without producing an appropriate error message or exit status if
the invoking user did not have those privileges.
Views could not be updated within a stored function or trigger. (Bug #17591)
Some prepared statements caused a server crash when executed a second time. (Bug #21166)
caused any repair operation on a
to fail to update the cardinality of indexes, instead making
them always equal to 1.
DROP TABLE statements in
a stored procedure could sometimes cause the server to crash.
The length of the pattern string prefix for
LIKE operations was calculated incorrectly
for multi-byte character sets. As a result, the scanned range
was wider than necessary if the prefix contained any multi-byte
characters, and rows could be missing from the result set.
(Bug #18359, Bug #16674)
A query could produce different results with and without and
index, if the
WHERE clause contained a range
condition that used an invalid
Query results could be incorrect if the
NOT IN (
val_list is a list of more than 1000
On 64-bit systems, use of the
character set with a primary key column in a
LIKE clause caused a server crash for
patterns having letters in the range 128..255.
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)
DECIMAL columns were handled
incorrectly in two respects :
When the precision of the column was too small for the value. In this case, the original value was returned instead of an error.
When the scale of the column was set to 0. In this case, the value. In this case, the value was treated as though the scale had been defined as 2.
SELECT on a corrupt
MyISAM table using the dynamic record format
could cause a server crash.
SHOW GRANTS FOR CURRENT_USER did not return
definer grants when executed in
context (such as within a stored procedure defined with
SQL SECURITY DEFINER), it returned the
Some user-level errors were being written to the server's error log, which is for server errors. (Bug #20402)
query command for
mysqltest did not work.
libmysqlclient defined a symbol
BN_bin2bn which belongs to OpenSSL. This
could break applications that also linked against OpenSSL's
libcrypto library. The fix required
correcting an error in a build script that was failing to add
rename macros for some functions.
When a row was inserted through a view but did not specify a value for a column that had no default value in the base table, no warning or error occurred. Now a warning occurs, or an error in strict SQL mode. (Bug #16110)
character_set_results can be
NULL to signify “no conversion,”
but some code did not check for
resulting in a server crash.
The first time a user who had been granted the
CREATE ROUTINE privilege used
that privilege to create a stored procedure or function, the
Password column in that user's row in the
mysql.user table was set to
The final parenthesis of a
INDEX statement occurring in a stored procedure was
omitted from the binary log when the stored procedure was
A cast problem caused incorrect results for prepared statements that returned float values when MySQL was compiled with gcc 4.0. (Bug #19694)
InnoDB tables, the server could crash
NOT IN(...) subqueries.
max_sp_recursion set to 0, a stored
procedure that executed a
PROCEDURE statement for itself triggered a recursion
limit exceeded error, though the statement involves no