Functionality Added or Changed
InnoDB storage engine no longer ignores
trailing spaces when comparing
VARBINARY column values. This
means that (for example) the binary values
'a ' are now
regarded as unequal any time they are
compared, as they are in
The ndb_mgm client commands
work with management nodes as well as data nodes. However, using
continues to affect all data nodes only.
More descriptive warnings are now issued when inappropriate
logging parameters are set in
(Formerly, the warning issued was simply Could not
add logfile destination.)
Wording of error 1329 changed to No data - zero rows fetched, selected, or processed. (Bug #15206)
A number of performance issues were resolved that had previously
been encountered when using statements that repeatedly invoked
stored functions. For example, calling
BENCHMARK() using a stored
function executed much more slowly than when invoking it with
inline code that accomplished the same task. In most cases the
two should now execute with approximately the same speed.
(Bug #14946, Bug #15014)
Several changes were made to make upgrades easier:
Added the mysql_upgrade program that checks all tables for incompatibilities with the current version of MySQL Server and repairs them if necessary. This program should be run for each MySQL upgrade (rather than mysql_fix_privilege_tables). See mysql_upgrade — Check Tables for MySQL Upgrade.
FOR UPGRADE option for the
CHECK TABLE statement. This
option checks whether tables are incompatible with the
current version of MySQL Server.
mysql no longer terminates data value display when it encounters a NUL byte. Instead, it displays NUL bytes as spaces. (Bug #16859)
mysqldump now surrounds the
WITH CHECK OPTION
clauses of a
statement with "not in version" comments to prevent errors in
earlier versions of MySQL.
Two new Hungarian collations are included:
ucs2_hungarian_ci. These support the correct
sort order for Hungarian vowels. However, they do not support
the correct order for sorting Hungarian consonant contractions;
we expect to fix this issue in a future release.
INFORMATION_SCHEMA now skips data
contained in unlistable/unreadable directories rather than
returning an error.
--wait-timeout option to
mysqlmanager to enable configuration of the
timeout for dropping an inactive connection, and increased the
default timeout from 30 seconds to 28,800 seconds (8 hours).
(Bug #15980, Bug #12674)
InnoDB now caches a list of unflushed files
instead of scanning for unflushed files during a table flush
operation. This improves performance when
--innodb_file_per_table is set on
a system with a large number of
libmysqlclient now uses versioned symbols
with GNU ld.
option to mysqld to control how many seconds
the server should wait for the TCP/IP port to become free if it
cannot be opened.
charset command added to
mysql command-line client. By typing
\C (such as
\C UTF8), the client character set can be
changed without reconnecting.
The client API now attempts to reconnect using TCP/IP if the
reconnect flag is set, as is the case with
When using the
function where the
variable was greater than 512, the result type differed
depending on whether an
ORDER BY clause was
BLOB if it was,
VARBINARY if it was not. (For
nonbinary string arguments, the result was
mysqltest utility now converts all
CR/LF combinations to
to enable test cases intended for Windows to work properly on
The message for error 1109 changed from Unknown table ... in order clause to Unknown table ... in field list. (Bug #15091)
MySQL Cluster: ndb_mgm -e "SHUTDOWN" failed to shut down any management processes at all.
UNIQUE keys in Cluster tables were limited to
225 bytes in length.
DELETE with a join in the
WHERE clause failed to retrieve any records
if both tables in the join did not have a primary key.
Following multiple forced shutdowns and restarts of data nodes,
DROP DATABASE could fail.
BIT column whose offset and
length totaled 32 caused the cluster to crash.
REDO log would become corrupted (and thus
unreadable) in some circumstances, due to a failure in the query
node_id STOP" would
stop a management process running only on the same system on
which the command was issued.
NDB returned an incorrect
Can't find file error for OS error 24;
this has been changed to Too many open
No error message was generated for setting
The error message returned by perror
--ndb was prefixed with
OS error code instead of NDB
Cluster log file paths were truncated to 128 characters. They
may now be as long as
MAX_PATH (the maximum
path length permitted by the operating system).
No error message was generated for setting
UPDATE with an inner join
failed to match any records if both tables in the join did not
have a primary key.
ndb_delete_all ran out of memory when
processing tables containing
MySQL Cluster: When running more than one management process in a cluster:
stopped a management process running only on the same system
where the command was issued.
ndb_mgm -e "SHUTDOWN" failed to shut down any management processes at all.
(Bug #12045, Bug #12124)
ndb_autodiscover test failed sporadically
due to a node not being permitted to connect to the cluster.
Previously, a stored function invocation was written to the
binary log as
invocation changes data and occurs within a nonlogged statement,
or if the function invokes a stored procedure that produces an
error. These invocations now are logged as
better control over error code checking (slave servers could
stop due to detecting a different error than occurred on the
BIT fields were not properly
handled when using row-based replication.
For a transaction that used
InnoDB tables, interruption of the
transaction due to a dropped connection on a master server
caused slaves to lose synchrony.
--replicate-ignore options were not being
enforced on multiple-table statements.
(Bug #16487, Bug #15699)
Cluster API: Upon the completion of a scan where a key request remained outstanding on the primary replica and a starting node died, the scan did not terminate. This caused incomplete error handling for the failed node. (Bug #15908)
InnoDB: Comparison of indexed
VARCHAR CHARACTER SET ucs2 COLLATE ucs2_bin
LIKE could fail.
mysql_real_connect() C API
function incorrectly reset the
MYSQL_OPT_RECONNECT option to its default
ALTER TABLE to increase the
length of a
caused column values to be padded with spaces rather than
BIGINT value specified in
WHERE clause could be treated differently
depending on whether it is specified as a quoted string. (For
WHERE bigint_col =
NOT FOUND condition handler for stored
procedures did not distinguish between a
FOUND condition and an exception or warning.
A stored procedure failed to return data the first time it was called per connection. (Bug #17476)
Multibyte path names for
SELECT ... INTO
OUTFILE caused errors. Added the
variable, which controls the interpretation of string literals
that refer to file names.
The mysqlbinlog utility did not output
DELIMITER statements, causing syntax errors
for stored routine creation statements.
For a MySQL 5.0 server, using MySQL 4.1 tables in queries with a
GROUP BY clause could result in buffer
overrun or a server crash.
AUTO_INCREMENT value through a
FEDERATED table did not set the value
GROUP BY on column used in
WHERE clause could cause empty set to be
A call to the
IF() function using
decimal arguments could return incorrect results.
A memory leak caused warnings on slaves for certain statements that executed without warning on the master. (Bug #16175)
A prepared statement created from a
LIKE query (such as
PREPARE stmt1 FROM
'SELECT col_1 FROM tedd_test WHERE col_1 LIKE ?';)
would begin to produce erratic results after being executed
repeatedly numerous (thousands) of times.
The use of
LOAD INDEX within a
stored routine was permitted and caused the server to crash.
LOAD INDEX statements within
stored routines are not supported, and
now yield an error if attempted. This behavior is intended.
Instance Manager searched wrong location for password file on some platforms. (Bug #16499)
The MySQL server could crash with out of memory errors when
performing aggregate functions on a
UPDATE statement crashed
multibyte character set
FULLTEXT index if
update value was almost identical to initial value only
differing in some spaces being changed to .
fill_help_tables.sql was not included in
binary distributions for several platforms.
Certain subqueries where the inner query was the result of a aggregate function would return different results with MySQL 5.0 or 5.1 than with MySQL 4.1.
Subselects could also return wrong results when the query cache and grouping were involved. (Bug #15347)
SELECT of a stored function
that references the
crash the server.
InnoDB used full explicit table locks in
DECIMAL data type was not
being handled correctly with prepared statements.
Characters in the
euckr character sets which did not have
Unicode mappings were truncated.
Using an aggregate function as the argument for a
HAVING clause resulted in the aggregate
function always returning
When Connector/ODBC or any other client called
several times, it caused corruption of charset data stored in
In some cases the query optimizer did not properly perform multiple joins where inner joins followed left joins, resulting in corrupted result sets. (Bug #15633)
Running out of diskspace in the location specified by the
tmpdir option resulted in
incorrect error message.
SET sql_mode = ,
N > 31, did not work
Tarball install package was missing a proper
a value greater than 4G crashed the server.
FORCE INDEX keyword in a query would
prevent an index merge from being used where an index merge
would normally be chosen by the optimizer.
InnoDB constraints named
could crash the server.
MySQL server dropped client connection for certain
SELECT statements against views
defined that used
Temporary table aliasing did not work inside stored functions. (Bug #12198)
A statement containing
GROUP BY and
HAVING clauses could return incorrect results
HAVING clause contained logic that
FALSE for every row.
In a highly concurrent environment, a server crash or deadlock could result from execution of a statement that used stored functions or activated triggers coincident with alteration of the tables used by these functions or triggers. (Bug #16593)
The embedded server failed various tests in the automated test suite. (Bug #10801, Bug #10925, Bug #15433, Bug #9633, Bug #10926, Bug #9631, Bug #10930, Bug #10911, Bug #9630, Bug #10924)
Killing a long-running query containing a subquery could cause a server crash. (Bug #14851)
Data truncations on non-
UNIQUE indexes could
InnoDB when using multibyte character
type_decimal failed with the prepared
GRANT statements specifying
schema names that included underscore characters (that is,
my_schema) did not match if the underscore
was escaped in the
statement (that is,
GRANT ALL ON `my\_schema`
CAST(... AS TIME) operations
returned different results when using versus not using
When multiple handlers are created for the same MySQL error number within nested blocks, the outermost handler took precedence. (Bug #15011)
EXECUTE on a procedure would display any warnings
related to the creation of the procedure.
LEFT JOIN operations were not
ORDER BY on an indexed
ENUM column returned error.
API function could not be used for a prepared statement if a
cursor had been opened for the statement.
A race condition could occur when dropping the adaptive hash
index for a B-tree page in
When evaluation of the test in a
CASE failed in a stored procedure
that contained a
CONTINUE handler, execution
resumed at the beginning of the CASE statement instead of at the
SELECT privilege was required
for triggers that performed no selects.
If the query optimizer transformed a
clause in a subquery, it did not also transform the
HAVING clause if there was one, producing
RENAME TABLE statement did
not move triggers to the new table.
Improper memory handling for stored routine variables could cause memory overruns and binary log corruption. (Bug #15588)
Triggers created without
END clauses resulted in “You have an
error in your SQL syntax” errors when dumping and
replaying a binary log.
INSERT statement in a stored
procedure corrupted the binary log.
Created a user function with an empty string (that is,
CREATE FUNCTION ''()), was accepted by the
server. Following this, calling
FUNCTION STATUS would cause the server to crash.
BY on a view could cause a server crash.
An invalid stored routine could not be dropped. (Bug #16303)
The contents of
not be loaded in strict SQL mode.
Certain permission management statements could create a
NULL host name for a user, resulting in a
DROP FUNCTION IF EXISTS
to drop a
user-defined function caused a server crash if the server was
running with the
variable to a value larger than 1 could cause corruption of
Instance Manager erroneously accepted a list of instance
identifiers for the
START INSTANCE and
STOP INSTANCE commands (should accept only a
sp test left behind tables when
the test failed that could cause future tests to fail.
STR_TO_DATE(1,NULL) caused a
(Bug #15828, CVE-2006-3081)
Binary distributions for Solaris contained files with group
ownership set to the nonexisting
bin group is used.
Cursors in stored routines could cause a server crash. (Bug #16887)
An attempt to open a table that requires a disabled storage engine could cause a server crash. (Bug #15185)
The absence of a table in the left part of a left or right join was not checked prior to name resolution, which resulted in a server crash. (Bug #15538)
A stored procedure with an undefined variable and an exception handler would hang the client when called. (Bug #14498)
UPDATE privilege was required
for triggers that performed no updates.
LEAVE statements in
stored procedures were not properly optimized.
Clients compiled from source with the
--without-readline did not save command history
from session to session.
InnoDB: After upgrading an
InnoDB table having a
BINARY column created in MySQL 4.0 to MySQL 5.0,
update operations on the table would cause the server to crash.
SUBSTRING_INDEX() could yield
inconsistent results when applied with the same arguments to
consecutive rows in a query.
DROP USER statement
could cause some users to encounter a
hostname is not permitted to connect
to this MySQL server
Parallel builds occasionally failed on Solaris. (Bug #16282)
InnoDB path settings to an empty
InnoDB storage engine to crash
upon server startup.
Stored routines that contained only a single statement were not
written properly to the dumpfile when using
CHECKSUM TABLE returned different
MyISAM tables depending on whether
option was used.
FULLTEXT query in a prepared statement
could result in unexpected behavior.
The embedded server did not permit binding of columns to the
MYSQL_TYPE_VAR_STRING data type in prepared
The parser permitted
FUNCTION for creating stored functions, even though
AGGREGATE does not apply. (It is used only
CREATE FUNCTION only when
creating user-defined functions.)
A natural join between
The length of a
VARCHAR() column that used
utf8 character set would increase each
time the table was re-created in a stored procedure or prepared
statement, eventually causing the
TABLE statement to fail.
mysql_stmt_sqlstate() C API
function incorrectly returned an empty string rather than
'00000' when no error occurred.
Trying to compile the server on Windows generated a stack
overflow warning due to a recursive definition of the internal
Repeated invocation of
my_end() caused corruption of character set
data and connection failure.
SELECT statement between tables in a
MERGE set can return errors when statement
involves insert into child table from merge table or vice-versa.
Attempts to create
FULLTEXT indexes on
VARCHAR columns larger than 1000
bytes resulted in error.
MERGE tables, the optimizer
wrongly assumed that using
index_merge/intersection was too expensive.
SHOW CREATE VIEW
query of an invalid view caused the
mysql_next_result() function of
libMySQL.dll to hang.