Table of Contents
This appendix lists the changes from version to version in the MySQL 5.0 source code through MySQL 5.0.26. For changes made to versions following 5.0.26, see Appendix C, MySQL Enterprise Release Notes, and Appendix D, MySQL Community Server Enhancements and Release Notes.
Starting with MySQL 5.0, we began offering a new version of the Manual for each new series of MySQL releases (5.0, 5.1, and so on). For information about changes in previous release series of the MySQL database software, see the corresponding version of this Manual. For information about legacy versions of the MySQL software through the 4.1 series, see MySQL 3.23, 4.0, 4.1 Reference Manual.
We update this section as we add new features in the 5.0 series, so that everybody can follow the development process.
Note that we tend to update the manual at the same time we make changes to MySQL. If you find a recent version of MySQL listed here that you can't find on our download page (http://dev.mysql.com/downloads/), it means that the version has not yet been released.
The date mentioned with a release version is the date of the last BitKeeper ChangeSet on which the release was based, not the date when the packages were made available. The binaries are usually made available a few days after the date of the tagged ChangeSet, because building and testing all packages takes some time.
The manual included in the source and binary distributions may not be fully accurate when it comes to the release changelog entries, because the integration of the manual happens at build time. For the most up-to-date release changelog, please refer to the online version instead.
The following changelog shows what has been done in the 5.0 tree:
Basic support for read-only server side cursors. For information
about using cursors within stored routines, see
Section 17.2.9, “Cursors”. For information about using cursors
from within the C API, see
Section 22.2.7.3, “mysql_stmt_attr_set()”.
Basic support for (updatable) views. See, for example,
Section 19.2, “CREATE VIEW Syntax”.
Basic support for stored procedures and functions (SQL:2003 style). See Chapter 17, Stored Procedures and Functions.
Initial support for rudimentary triggers.
Added SELECT INTO
, which can be
of mixed (that is, global and local) types. See
Section 17.2.7.3, “list_of_varsSELECT ... INTO Statement”.
Removed the update log. It is fully replaced by the binary log.
If the MySQL server is started with
--log-update, it is translated to
--log-bin (or ignored if the server is
explicitly started with --log-bin), and a
warning message is written to the error log. Setting
SQL_LOG_UPDATE silently sets
SQL_LOG_BIN instead (or do nothing if the
server is explicitly started with --log-bin).
Support for the ISAM storage engine has been
removed. If you have ISAM tables, you should
convert them before upgrading. See
Section 2.4.16.2, “Upgrading from MySQL 4.1 to 5.0”.
Support for RAID options in
MyISAM tables has been removed. If you have
tables that use these options, you should convert them before
upgrading. See Section 2.4.16.2, “Upgrading from MySQL 4.1 to 5.0”.
User variable names are now case insensitive: If you do
SET @a=10; then SELECT @A;
now returns 10. Case sensitivity of a
variable's value depends on the collation of the value.
Strict mode, which in essence means that you get an error instead of a warning when inserting an incorrect value into a column. See Section 5.2.6, “SQL Modes”.
VARCHAR and VARBINARY
columns remember end space. A VARCHAR() or
VARBINARY column can contain up to 65,535
characters or bytes, respectively.
MEMORY (HEAP) tables can
have VARCHAR columns.
When using a constant string or a function that generates a
string result in CREATE ... SELECT, MySQL
creates the result column based on the maximum length of the
string or expression:
| Maximum Length | Data type |
| = 0 | CHAR(0) |
| < 512 | VARCHAR( |
| >= 512 | TEXT |
A fixed-point math library is introduced that supports precision
math, resulting in more accurate results when working with the
DECIMAL and NUMERIC data
types. For details, see Chapter 21, Precision Math.
For a full list of changes, please refer to the changelog sections for each individual 5.0.x release.
Beginning with MySQL 5.0.27, change notes are listed separately for MySQL Enterprise and MySQL Community Server. See Appendix C, MySQL Enterprise Release Notes, and Appendix D, MySQL Community Server Enhancements and Release Notes.
This is a bugfix release for the current production release family.
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:
The output generated by the server when using the
--xml option has changed with regard to null
values. It now matches the output from mysqldump
--xml. That is, a column containing
a NULL value is now reported as
<field name="column_name" xsi:nil="true" />
whereas a column containing the string value
'NULL' is reported as
<field name="column_name">NULL</field>
and a column containing an empty string is reported as
<field name="column_name">>/field>
The source distribution has been updated so that the UDF example can be compiled under Windows with CMake. See Section 24.2.4.5, “Compiling and Installing User-Defined Functions”. (Bug#19121)
The LOAD DATA FROM MASTER and LOAD
TABLE FROM MASTER statements are deprecated. See
Section 13.6.2.2, “LOAD DATA FROM MASTER Syntax”, for recommended
alternatives. (Bug#18822, Bug#9125, Bug#12187, Bug#14399,
Bug#15025, Bug#20596)
LOAD DATA INFILE no longer causes an
implicit commit for all storage engines. It now causes an
implicit commit only for tables using the
NDB storage engine. (Bug#11151)
mysqldump now has a
--flush-privileges option. It causes
mysqldump to emit a FLUSH
PRIVILEGES statement after dumping the
mysql database. This option should be used
any time the dump contains the mysql
database and any other database that depends on the data in
the mysql database for proper restoration.
(Bug#21424)
The number of InnoDB threads is no longer
limited to 1,000 on Windows. (Bug#22268)
Bugs fixed:
Deleting entries from a large MyISAM index
could cause index corruption when it needed to shrink. Deletes
from an index can happen when a record is deleted, when a key
changes and must be moved, and when a key must be un-inserted
because of a duplicate key. This can also happen in
REPAIR TABLE when a duplicate key is found
and in myisamchk when sorting the records
by an index. (Bug#22384)
mysql_config --libmysqld-libs did not
produce any SSL options necessary for linking
libmysqld with SSL support enabled. (Bug#21239)
The parser rejected queries that selected from a table twice
using a UNION within a subquery. The parser
now supports arbitrary subquery, join, and parenthesis
operations within EXISTS subqueries. A
limitation still exists for scalar subqueries: If the subquery
contains UNION, the first
SELECT of the UNION
cannot be within parentheses. For example, SELECT
(SELECT a FROM t1 UNION SELECT b FROM t2) will work,
but SELECT ((SELECT a FROM t1) UNION (SELECT b FROM
t2)) will not. (Bug#14654)
Subqueries with aggregate functions but no
FROM clause could return incorrect results.
(Bug#21540)
The presence of a subquery in the ON clause
of a join in a view definition prevented the
MERGE algorithm from being used for the
view in cases where it should be allowed. (Bug#21646)
Conversion of values inserted into a BIT
column could affect adjacent columns. (Bug#22271)
The URL into the online manual that is printed in the stack trace message by the server was out of date. (Bug#21449)
PROCEDURE ANALYSE() returned incorrect
values of M
FLOAT( and
M,
D)DOUBLE(. (Bug#20305)
M,
D)
Join conditions using index prefixes on
utf8 columns of InnoDB
tables incorrectly ignored rows where the length of the actual
value was greater than the length of the index prefix. (Bug#19960)
On an INSERT into an updatable but
non-insertable view, an error message was issued stating that
the view was not updatable. Now the message says the view is
not insertable-into. (Bug#5505)
INSERT DELAYED did not honor SET
INSERT_ID or the auto_increment_*
system variables. (Bug#20627, Bug#20830)
For character sets having a mbmaxlen value
of 2, any ALTER TABLE statement changed
TEXT columns to
MEDIUMTEXT. (Bug#21620)
A query that used GROUP BY and an
ALL or ANY quantified
subquery in a HAVING clause could trigger
an assertion failure. (Bug#21853)
For an ENUM column that used the
ucs2 character set, using ALTER
TABLE to modify the column definition caused the
default value to be lost. (Bug#20108)
mysql_com.h unnecessarily referred to the
ulong type. (Bug#22227)
Incorporated some portability fixes into the definition of
__attribute__ in
my_global.h. (Bug#2717)
Linking the pthreads library to
single-threaded MySQL libraries caused
dlopen() to fail at runtime on HP-UX. (Bug#18267)
In the package of pre-built time zone tables that is available
for download at
http://dev.mysql.com/downloads/timezones.html, the tables
now explicitly use the utf8 character set
so that they work the same way regardless of the system
character set value. (Bug#21208)
The build process incorrectly tried to overwrite
sql/lex_hash.h. This caused the build to
fail when using a shadow link tree pointing to original
sources that were owned by another account. (Bug#18888)
mysql_ftdump produced bad counts for common words. (Bug#22326)
yaSSL had a conflicting definition for
socklen_t on hurd-i386 systems. (Bug#22326)
When records are merged from the insert buffer and the page
needs to be reorganized, InnoDB used
incorrect column length information when interpreting the
records of the page. This caused a server crash due to
apparent corruption of secondary indexes in
ROW_FORMAT=COMPACT that contain prefix
indexes of fixed-length columns. Data files should not be
corrupted, but the crash was likely to repeat every time the
server was restarted. (Bug#21638)
Using GROUP_CONCAT() on the result of a
subquery in the FROM clause that itself
used GROUP_CONCAT() could cause a server
crash. (Bug#22015)
Execution of a prepared statement that uses an
IN subquery with aggregate functions in the
HAVING clause could cause a server crash.
(Bug#22085)
The value of LAST_INSERT_ID() was not
always updated correctly within stored routines. (Bug#21726)
If mysqld was linked against a
system-installed zlib library compiled
without large-file support, it would likely exit with a
SIGXFSZ (file size exceeded) signal if an
ARCHIVE table reached 2GB. The server now
checks for space before writing. (Bug#21675)
Selecting from a MERGE table could result
in a server crash if the underlying tables had fewer indexes
than the MERGE table itself. (Bug#21617,
Bug#22937)
make install tried to build files that should already have been built by make all, causing a failure if installation was performed using a different account than the one used for the initial build. (Bug#19738)
The source distribution would not build on Windows due to a
spurious dependency on ib_config.h. (Bug#22224)
The server returns a more informative error message when it
attempts to open a MERGE table that has
been defined to use non-MyISAM tables. (Bug#10974)
Within stored routines, some error messages were printed incorrectly. A non-null-terminated string was passed to a message-printing routine that expected a null-terminated string. (Bug#20778)
SUBSTR() results sometimes were stored
improperly into a temporary table when multi-byte character
sets were used. (Bug#20204)
On Windows, inserting into a MERGE table
after renaming an underlying MyISAM table
caused a server crash. (Bug#20789)
On Mac OS X, zero-byte read() or
write() calls to an SMB-mounted filesystem
could return a non-standard return value, leading to data
corruption. Now such calls are avoided. (Bug#12620)
With TRADITIONAL SQL mode, assignment of
out-of-bound values and rounding of assigned values was done
correctly, but assignment of the same numbers represented as
strings sometimes was handled differently. (Bug#6147)
The source distribution failed to compile when configured with
the --without-geometry option. (Bug#12991)
The source distribution failed to compile when configured with
the --with-libwrap option. (Bug#18246)
For INSERT ... ON DUPLICATE KEY UPDATE, use
of
VALUES(
within the col_name)UPDATE clause sometimes was
handled incorrectly. (Bug#21555)
Row equalities (such as WHERE (a,b) = (c,d)
were not taken into account by the optimizer, resulting in
slow query execution. Now they are treated as conjunctions of
equalities between row elements. (Bug#16081)
Column names supplied for a view created on a master server could be lost on a slave server. (Bug#19419)
For a MyISAM table locked with
LOCK TABLES ...WRITE, queries optimized
using the index_merge method did not show
rows inserted with the lock in place. (Bug#20256)
Table aliases in multiple-table DELETE
statements sometimes were not resolved. (Bug#21392)
A function result in a comparison was replaced with a constant by the optimizer under some circumstances when this optimization was invalid. (Bug#21698)
A subquery that uses an index for both the
WHERE and ORDER BY
clauses produced an empty result. (Bug#21180)
If the auto_increment_offset setting causes
MySQL to generate a value larger than the column's maximum
possible value, the INSERT statement is
accepted in strict SQL mode, whereas but should fail with an
error. (Bug#20573)
Queries containing a subquery that used aggregate functions could return incorrect results. (Bug#16792)
EXPLAIN sometimes returned an incorrect
select_type for a SELECT
from a view, compared to the select_type
for the equivalent SELECT from the base
table. (Bug#5500)
For a MyISAM table with a
FULLTEXT index, compression with
myisampack or a check with
myisamchk after compression resulted in
table corruption. (Bug#19702)
BIN(), OCT(), and
CONV() did not work with BIT values. (Bug#15583)
The server could crash for the second execution of a function
containing a SELECT statement that uses an
aggregating IN subquery. (Bug#21493)
UPGRADE was treated as a reserved word,
although it is not. (Bug#21772)
mysql_upgrade produced a malformed
upgrade_defaults file by overwriting the
[client] group header with a
password option. This prevented
mysqlcheck from running successfully when
invoked by mysql_upgrade. (Bug#21011)
Usernames have a maximum length of 16 characters (even if they contain multi-byte characters), but were being truncated to 16 bytes. (Bug#20393)
mysql displayed an empty string for
NULL values. (Bug#21618)
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:
For the mysql client, typing Control-C 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. Previously, Control-C caused mysql to exit in all cases. (Bug#17926; see also Bug#1989)
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
allows a command such as mysqlshow
information_schema work without having to escape the
wildcard character. (Bug#19147)
If a DROP VIEW statement named multiple
views, it stopped with an error if a non-existent view was
named and did not drop the remaining views. Now it continues
on and reports an error at the end, similar to DROP
TABLE. (Bug#16614)
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)
The bundled yaSSL library was upgraded to version 1.3.7.
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.) (Bug#16755)
The server now issues a warning if it removes leading spaces from an alias. (Bug#10977)
The VIEW_DEFINITION column of the
INFORMATION_SCHEMA VIEWS
table now contains information about the view algorithm. (Bug#16832)
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
The mysqld and mysqlmanager manpages have been reclassified from volume 1 to volume 8. (Bug#21220)
configure now defines the symbol
DBUG_ON in config.h to
indicate whether the source tree is configured to be compiled
with debugging support. (Bug#19517)
The MySQL distribution now compiles on UnixWare 7.13. (Bug#20190)
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
charset (or \C) that
changes the default character set and now also issues a
SET NAMES statement. The changed character
set is used for reconnects. (Bug#11972)
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_upgrade] group. (Bug#19452)
MySQL now can do stack dumps on x86_64 and
i386/NPTL systems. (Bug#21250)
TIMESTAMP columns that are NOT
NULL now are reported that way by SHOW
COLUMNS and INFORMATION_SCHEMA.
(Bug#20910)
Using --with-debug to configure MySQL with
debugging support enables you to use the
--debug="d,parser_debug" option 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.
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 the DATE_FORMAT(),
DAYNAME() and
MONTHNAME() functions. See
Section 5.10.9, “MySQL Server Locale Support”.
Bugs fixed:
Security fix: On Linux, and possibly other platforms using case-sensitive filesystems, 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. (CVE-2006-4226, Bug#17647)
Security fix: A stored
routine created by one user and then made accessible to a
different user using GRANT EXECUTE could be
executed by that user with the privileges of the routine's
definer.
(CVE-2006-4227,
Bug#18630)
Setting myisam_repair_threads caused any
repair operation on a MyISAM table to fail
to update the cardinality of indexes, instead making them
always equal to 1. (Bug#18874)
The optimizer did not take advantage of indexes on columns
used for the second or third arguments of
BETWEEN. (Bug#18165)
Successive invocations of a COUNT(*) query
containing a join on two MyISAM tables and
a WHERE clause of the form WHERE
( yielded different results. (Bug#21019)
table1.column1
=
table2.column2)
OR
table2.column2
IS NULL
CREATE TABLE ... SELECT statements that
selected GEOMETRY values resulted in a
table that contained BLOB columns, not
GEOMETRY columns. (Bug#14807)
A DATE can be represented as an integer
(such as 20060101) or as a string (such as
'2006.01.01'). When a
DATE (or TIME) column is
compared in one SELECT against both
representations, constant propagation by the optimizer led to
comparison of DATE as a string against
DATE as an integer. This could result in
integer comparisons such as 2006 against
20060101, erroneously producing a false
result. (Bug#21475)
A query result could be sorted improperly when using
ORDER BY for the second table in a join.
(Bug#21302)
EXPORT_SET() did not accept arguments with
coercible character sets. (Bug#21531)
The --collation-server server option was
being ignored. With the fix for this problem, if you choose a
non-default character set with
--character-set-server, you should also use
--collation-server to specify the collation.
(Bug#15276)
The
index_merge/Intersection
optimizer could have a memory overrrun when the number of
table columns covered by an index is sufficiently large,
possibly resulting in a server crash. (Bug#16201)
With max_sp_recursion set to 0, a stored
procedure that executed a SHOW CREATE
PROCEDURE statement for itself triggered a recursion
limit exceeded error, though the statement involves no
recursion. (Bug#21416)
The optimizer could produce an incorrect result after
AND with collations such as
latin1_german2_ci,
utf8_czech_ci, and
utf8_lithianian_ci. (Bug#9509)
Database and table names have a maximum length of 64 characters (even if they contain multi-byte characters), but were being truncated to 64 bytes. (Bug#21432) This patch was reverted in MySQL 5.0.26.
character_set_results can be
NULL to signify “no
conversion,” but some code did not check for
NULL, resulting in a server crash. (Bug#21913)
InnoDB was slow with more than 100,000
.idb files. (Bug#21112)
SHOW INNODB STATUS contained some duplicate
output. (Bug#21113)
Using cursors with READ COMMITTED isolation
level could cause InnoDB to crash. (Bug#19834)
The ndb_mgm program was included in both
the MySQL-ndb-tools and
MySQL-ndb-management RPM packages,
resulting in a conflict if both were installed. Now
ndb_mgm is included only in
MySQL-ndb-tools. (Bug#21058)
A query could produce different results with and without and
index, if the WHERE clause contained a
range condition that used an invalid
DATETIME constant. (Bug#16249)
libmysqld produced some warnings to
stderr which could not be silenced. These
warnings now are suppressed. (Bug#13717)
If a query had a condition of the form
,
which participated in equality propagation and also was used
for tableX.key
=
tableY.keyref access, then early
ref-access NULL
filtering was not peformed for the condition. This could make
query execution slower. (Bug#19649)
The optimizer sometimes produced an incorrect row-count
estimate after elimination of const tables.
This resulted in choosing extremely inefficient execution
plans in same cases when distribution of data in joins were
skewed. (Bug#21390)
Query results could be incorrect if the
WHERE clause contained
t., where
key_part NOT IN
(val_list)val_list is a list of more than
1000 constants. (Bug#21282)
STR_TO_DATE() sometimes would return
NULL if the %D format
specifier was not the last specifier in the format string.
(Bug#20987)
The myisam_stats_method variable was
mishandled when set from an option file or on the command
line. (Bug#21054)
The optimizer assumed that if (a=x AND b=x)
is true, (a=x AND b=x) AND a=b is also
true. But that is not always so if a and
b have different data types. (Bug#21159)
InnoDB did not honor IGNORE
INDEX, which prevented using IGNORE
INDEX in cases where an index sort would be slower
than a filesort. (Bug#21174) This patch was reverted in MySQL
5.0.26. Hint operation was revised further in MySQL 5.0.40.
If a column definition contained a character set declaration,
but a DEFAULT value began with an
introducer, the introducer character set was used as the
column character set. (Bug#20695)
The MD5(), SHA1(), and
ENCRYPT() functions should return a binary
string, but the result sometimes was converted to the
character set of the argument. MAKE_SET()
and 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. (Bug#20536)
For connections that required a SUBJECT
value, a check was performed to verify that the value was
correct, but the connection was not refused if not. (Bug#20411)
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)
INSERT ... SELECT sometimes generated a
spurious Column count doesn't match value
count error. (Bug#21774)
For TIME_FORMAT(), the
%H and %k format
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.
(Bug#19844)
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)
Views could not be updated within a stored function or trigger. (Bug#17591)
Some user-level errors were being written to the server's error log, which is for server errors. (Bug#20402)
When using tables created under MySQL 4.1 with a 5.0 server,
if the tables contained VARCHAR columns,
for some queries the metadata sent to the client could have an
empty column name. (Bug#14897)
On 64-bit systems, use of the cp1250
character set with a primary key column in a
LIKE clause caused a server crash for
patterns having letters in the range 128..255. (Bug#19741)
N'xxx' and _utf8'xxx'
were not treated as equivalent because
N'xxx' failed to unescape backslashes
(\) and doubled apostrophe/single quote
characters (''). (Bug#17313)
ORDER BY RAND() LIMIT 1 always set a user
variable to the last possible value from the table. (Bug#16861)
A subquery in the WHERE clause of the outer
query and using IN and GROUP
BY returned an incorrect result. (Bug#16255)
When NOW() was used in a
BETWEEN clause of the definition for a
view, it was replaced with a constant in the view. (Bug#15950)
A stored procedure with a CONTINUE handler
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. (Bug#8153)
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. (Bug#21930)
COUNT(*) queries with ORDER
BY and LIMIT could return the
wrong result. (Bug#21787)
Note: 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 non-group
queries with aggregate functions. The current fix disables the
optimization in such cases.
Memory overruns could occur for certain kinds of subqueries. (Bug#21477)
The SELECT privilege was required for an
insert on a view, instead of the INSERT
privilege. (Bug#21261)
Note: This fixes a regression that was introduced by the fix for Bug#20989.
Running SHOW MASTER LOGS at the same time
as binary log files were being switched would cause
mysqld to hang. (Bug#21965)
A server or network failure with an open client connection would cause the client to hang even though the server was no longer available. (Bug#9678)
Inserts into BIT columns of
FEDERATED tables did not work. (Bug#14532)
The yaSSL library bundled with
libmysqlclient had some conflicts with
OpenSSL. Now macros are used to rename the conflicting symbols
to have a prefix of ya. (Bug#19810)
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. (Bug#17766)
A NUL byte within a prepared statement
string caused the rest of the string not to be written to the
query log, allowing logging to be bypassed. (Bug#21813)
mysql_upgrade created temporary files in a possibly insecure way. (Bug#21224)
Some prepared statements caused a server crash when executed a second time. (Bug#21166)
With 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 non-blocking. (Bug#21051)
NDB Cluster: Setting
TransactionDeadlockDetectionTimeout 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. (Bug#21800)
NDB Cluster: The server provided a
non-descriptive error message when encountering a fatally
corrupted REDO log. (Bug#21615)
NDB Cluster: A partial rollback could lead
to node restart failures. (Bug#21536)
NDB 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)
NDB 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 its nodegroup to shut down. (Bug#21213)
NDB Cluster: When the redo buffer ran out
of space, a Pointer too large error was
raised and the cluster could become unusable until restarted
with --initial. (Bug#20892)
NDB 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)
NDB Cluster: A vague error message was
returned when reading of both schema files occurred during a
restart of the cluster. (Bug#20860)
NDB Cluster: The server did not honor the
value set for ndb_cache_check_time in the
my.cnf file. (Bug#20708)
NDB Cluster: The server failed with a
non-descriptive error message when out of data memory. (Bug#18475)
NDB Cluster: ndb_size.pl
and ndb_error_reporter were missing from
RPM packages. (Bug#20426)
When DROP DATABASE or SHOW OPEN
TABLES was issued while concurrently issuing
DROP TABLE (or RENAME
TABLE, CREATE TABLE LIKE or any
other statement that required a name lock) in another
connection, the server crashed. (Bug#21216)
Use of zero-length variable names caused a server crash. (Bug#20908)
Prepared statements caused general log and server memory corruption. (Bug#14346)
mysqldump incorrectly tried to use
LOCK TABLES for tables in the
INFORMATION_SCHEMA database. (Bug#21527)
Adding ORDER BY to a SELECT
DISTINCT( query
could produce incorrect results. (Bug#21456)
expr)
For InnoDB tables, the server could crash
when executing NOT IN () subqueries. (Bug#21077)
Use of the --prompt option or
prompt command caused
mysql to be unable to connect to the
Instance Manager. (Bug#17485)
The server crashed if it tried to access a
CSV table for which the data file had been
removed. (Bug#15205)
CREATE USER did not respect the
16-character username limit. (Bug#10668)
On Windows, a definition for
mysql_set_server_option() was missing from
the C client library. (Bug#16513)
For the CSV storage engine, memory-mapped
pages of the data file were not invalidated when new data was
appended to the file via traditional (file descriptor-based)
I/O primitives. (Bug#15669)
In debugging mode, mysqld printed
server_init rather than
network_init during network initialization.
(Bug#20968)
For user-defined functions created with CREATE
FUNCTION, the DEFINER clause is
not legal, but no error was generated. (Bug#21269)
mysqld --flush failed to flush
MyISAM table changes to disk following an
UPDATE statement for which no updated
column had an index. (Bug#20060)
When not running in strict mode, the server failed to convert
the invalid years portion of a DATE or
DATETIME value to '0000'
when inserting it into a table. (Bug#19370)
This patch was reverted in MySQL 5.0.42.
The --with-collation option was not honored
for client connections. (Bug#7192)
Users who had the SHOW VIEW privilege for a
view and privileges on one of the view's base table could not
see records in INFORMATION_SCHEMA tables
relating to the base table. (Bug#20543)
An issue with yaSSL prevented Connector/J clients from connecting to the server using a certificate. (Bug#19705)
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)
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 or LOAD DATA operation, the server
returned a misleading warning message. (Bug#14770)
DECIMAL columns were handled incorrectly in
two respects (Bug#16172):
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.
Tables created with the FEDERATED storage
engine did not permit indexes using NULL
columns. (Bug#15133)
The Instance Manager allowed STOP INSTANCE
to be used on a server instance that was not running. (Bug#12673)
On Windows, mysql_upgrade.exe could not find mysqlcheck.exe. (Bug#20950)
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. (Bug#18764)
The C API failed to return a status message when invoking a stored procedure. (Bug#15752)
A stored procedure that created and invoked a prepared statement was not executed when called in a mysqld init-file. (Bug#17843)
Stored procedures did not use the character set defined for the database in which they were created. (Bug#16676)
CREATE PROCEDURE, CREATE
FUNTION, CREATE TRIGGER, and
CREATE VIEW statements containing
multi-line comments (/* ... */) could not
be replicated. (Bug#20438)
The final parenthesis of a CREATE INDEX
statement occurring in a stored procedure was omitted from the
binary log when the stored procedure was called. (Bug#19207)
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
'string-value' from
FEDERATED. This error was raised regardless of the
type of column involved (VARCHAR,
TEXT, and so on.) (Bug#17608)
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)
Repeated DROP TABLE statements in a stored
procedure could sometimes cause the server to crash. (Bug#19399)
The value returned by a stored function returning a string value was not of the declared character set. (Bug#16211)
For mysql, escaping with backslash sometimes did not work. (Bug#20103)
Under certain circumstances,
AVG(
returned a value but
key_val)MAX(
returned an empty set due to incorrect application of
key_val)MIN()/MAX() optimization. (Bug#20954)
Using aggregate functions in subqueries yielded incorrect
results under certain circumstances due to incorrect
application of MIN()/MAX() optimization.
(Bug#20792)
A query using WHERE did not
return consistent results on successive invocations. The
column
= constant OR
column IS NULLcolumn in each part of the
WHERE clause could be either the same
column, or two different columns, for the effect to be
observed. (Bug#21019)
The PASSWORD() function returned invalid
results when used in some UNION queries.
(Bug#16881)
USE did not refresh database privileges
when employed to re-select the current database. (Bug#10979)
A query using WHERE NOT
( yielded a
different result from the same query using the same
column < ANY
(subquery))column and
subquery with WHERE
(. (Bug#20975)
column > ANY
(subquery))
A user variable set to a value selected from an unsigned column was stored as a signed value. (Bug#7498)
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. (Bug#20466)
A 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
dependant columns. (Bug#18925)
When performing a GROUP_CONCAT(), the
server transformed BLOB columns
VARCHAR columns, which could cause
erroneous results when using Connector/J and possibly other
MySQL APIs. (Bug#16712)
The type of the value returned by the
VARIANCE() function varied according to the
type of the input value. The function should always return a
DOUBLE value. (Bug#10966)
Performing an INSERT on a view that was
defined using a SELECT that specified a
collation and a column alias caused the server to crash (Bug#21086).
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)
);
NDB Cluster (Direct APIs): Invoking the MGM
API function ndb_mgm_listen_event() caused
a memory leak. (Bug#21671)
NDB Cluster (Direct APIs): The MGM API
function ndb_logevent_get_fd() was not
actually implemented. (Bug#21129)
A memory leak was found when running
ndb_mgm -e "SHOW". (Bug#21670)
NDB 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)
NDB Cluster: An issue that arose from a
patch for Bug#19852 made in MySQL 5.0.23 was corrected. (See
Section E.1.6, “Changes in release 5.0.23 (Not released)”.)
NDB Cluster: The management client
ALL STATUS command could sometimes report
the status of some data nodes incorrectly. (Bug#13985)
NDB Cluster: Some queries involving joins
on very large NDB tables could crash the
MySQL server. (Bug#21059)
NDB Cluster: SELECT ... FOR
UPDATE failed to lock the selected rows. (Bug#18184)
NDB Cluster: A Cluster whose storage nodes
were installed from the
MySQL-ndb-storage-
RPMs could not perform *CREATE or
ALTER operations that made use of
non-default character sets or collations. (Bug#14918)
NDB Cluster: 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. (Bug#20728)
NDB 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)
NDB Cluster: Running
ndbd
--nowait-nodes=
where idid was the node ID of a node
that was already running would fail with an invalid error
message. (Bug#20419)
NDB Cluster: Incorrect values were inserted
into AUTO_INCREMENT columns of tables
restored from a cluster backup. (Bug#20820)
NDB Cluster: When attempting to restart the
cluster following a data import, the cluster would fail during
Phase 4 of the restart with Error 2334: Job buffer
congestion. (Bug#20774)
NDB Cluster: A node failure during a scan
could sometime cause the node to crash when restarting too
quickly following the failure. (Bug#20197)
NDB Cluster: It was possible to use port
numbers greater than 65535 for ServerPort
in the config.ini file. (Bug#19164)
NDB Cluster: Under certain circumstances, a
node that was shut down then restarted could hang during the
restart. (Bug#18863)
NDB 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. (Bug#20683)
NDB Cluster (Direct APIs):
NdbScanOperation::readTuples() and
NdbIndexScanOperation::readTuples() ignored
the batch parameter. (Bug#20252)
The implementation for UNCOMPRESS() did not
indicate that it could return NULL, causing
the optimizer to do the wrong thing. (Bug#18539)
TIMESTAMPDIFF() examined only the date and
ignored the time when the requested difference unit was months
or quarters. (Bug#16226)
perror did not properly report NDB error codes. (Bug#16561)
mysqlimport sends a set
@@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. (Bug#15690)
The character set was not being properly initialized for
CAST() with a type like CHAR(2)
BINARY, which resulted in incorrect results or even
a server crash. (Bug#17903)
For ODBC compatibility, MySQL supports use of WHERE
for
col_name IS NULLDATE or DATETIME columns
that are NOT NULL, to allow column values
of '0000-00-00' or '0000-00-00
00:00:00' to be selected. However, this was not
working for WHERE clauses in
DELETE statements. (Bug#8143)
The --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. (Bug#21215)
ALTER VIEW did not retain existing values
of attributes that had been originally specified but were not
changed in the ALTER VIEW statement. (Bug#21080)
mysql crashed for very long arguments to
the connect command. (Bug#21042)
perror crashed on Solaris due to
NULL return value of
strerror() system call. (Bug#20145)
The query command for
mysqltest did not work. (Bug#19890)
For certain queries, the server incorrectly resolved a reference to an aggregate function and crashed. (Bug#20868)
When executing a SELECT with ORDER
BY on a view that is constructed from a
SELECT statement containing a stored
function, the stored function was evaluated too many times.
(Bug#19862)
Subqueries on INFORMATION_SCHEMA tables
could erroneously return an empty result. (Bug#21231)
On 64-bit Windows, a missing table generated error 1017, not the correct value of 1146. (Bug#21396)
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)
Multiplication of DECIMAL values could
produce incorrect fractional part and trailing garbage caused
by signed overflow. (Bug#20569)
A subquery that contained LIMIT
could return more
than one row. (Bug#20519)
N,1
DESCRIBE returned the type
BIGINT for a column of a view if the column
was specified by an expression over values of the type
INT. (Bug#19714)
Multiple invocations of the REVERSE()
function could return different results. (Bug#18243)
Using > ALL with subqueries that return
no rows yielded incorrect results under certain circumstances
due to incorrect application of MIN()/MAX()
optimization. (Bug#18503)
Using ANY with “non-table”
subqueries such as SELECT 1 yielded
incorrect results under certain circumstances due to incorrect
application of MIN()/MAX() optimization.
(Bug#16302)
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)
The use of WHERE in col_name
IS NULLSELECT statements
reset the value of LAST_INSERT_ID() to
zero. (Bug#14553)
The server crashed when using the range access method to
execut a subquery with a ORDER BY DESC
clause. (Bug#20869)
Use of the join cache in favor of an index for ORDER
BY operations could cause incorrect result sorting.
(Bug#17212)
A user-defined function that is called on each row of a
returned result set, could receive an
in_null state that is set, if it was set
previously. Now, the is_null state is reset
to false before each invocation of a UDF. (Bug#19904)
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)
For NDB and possibly
InnoDB tables, a BEFORE
UPDATE trigger could insert incorrect values. (Bug#18437)
Triggers on tables in the mysql database
caused a server crash. Triggers for tables in this database
now are disallowed. (Bug#18361)
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#16674, Bug#18359)
For very complex SELECT statements could
create temporary tables that were too big, but for which the
temporary files did not get removed, causing subsequent
queries to fail. (Bug#11824)
For spatial data types, the server formerly returned these as
VARSTRING values with a binary collation.
Now the server returns spatial values as
BLOB values. (Bug#10166)
Using SELECT and a table join while running
a concurrent INSERT operation would join
incorrect rows. (Bug#14400)
Using SELECT on a corrupt
MyISAM table using the dynamic record
format could cause a server crash. (Bug#19835)
Using tables from MySQL 4.x in MySQL 5.x, in particular those
with VARCHAR fields and using
INSERT DELAYED to update data in the table
would result in either data corruption or a server crash. (Bug#16611, Bug#16218, Bug#17294)
Checking a MyISAM table (using
CHECK TABLE) having a spatial index and
only one row would wrongly indicate that the table was
corrupted. (Bug#17877)
SHOW GRANTS FOR CURRENT_USER did not return
definer grants when executed in DEFINER
context (such as within a stored prodedure defined with
SQL SECURITY DEFINER), it returned the
invoker grants. (Bug#15298)
For SELECT ... FOR UPDATE statements that
used DISTINCT or 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.) (Bug#16458)
The first time a user who had been granted the CREATE
ROUTINE privilege used that privilege to create a
stored function or procedure, the Password
column in that user's row in the mysql.user
table was set to NULL. (Bug#19857)
Creation of a view as a join of views or tables could fail if the views or tables are in different databases. (Bug#20482)
Use of MIN() or MAX()
with GROUP BY on a ucs2
column could cause a server crash. (Bug#20076)
INSERT INTO ... SELECT ... LIMIT 1 could be
slow because the LIMIT was ignored when
selecting candidate rows. (Bug#9676)
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 STDERR. (Bug#16168)
The mysql_list_fields() C API function
returned the incorrect table name for views. (Bug#19671)
A cast problem caused incorrect results for prepared statements that returned float values when MySQL was compiled with gcc 4.0. (Bug#19694)
Updating a column of a FEDERATED table to
NULL sometimes failed. (Bug#16494)
This is a bugfix release for the current production release family. It replaces MySQL 5.0.24.
Changes from 5.0.24 to 5.0.24a:
MySQL 5.0.24 introduced an ABI incompatibility, which this release reverts. Programs compiled against 5.0.24 are not compatible with any other version and must be recompiled. (Bug#21543)
Closing of temporary tables failed if binary logging was not enabled. (Bug#20919)
For statements that have a DEFINER clause
such as CREATE TRIGGER or CREATE
VIEW, long usernames or hostnames could cause a
buffer overflow. (Bug#16899)
Pathname separator and device characters were not correctly parameterized for NetWare, causing mysqld startup errors. (Bug#21537)
mysqld could crash when closing temporary tables. (Bug#21582)
In addition, the following problem affected the initial build of 5.0.24a, but has been corrected in the RPM files now available:
The shared compatibility RPM files were missing some files. (Bug#22251)
This is a bugfix release for the current production release family.
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:
The LEFT() and RIGHT()
functions return NULL if any argument is
NULL. (Bug#11728)
In the INFORMATION_SCHEMA.ROUTINES table
the ROUTINE_DEFINITION column now is
defined as NULL rather than NOT
NULL. Also, NULL rather than the
empty string is returned as the column value if the user does
not have sufficient privileges to see the routine definition.
(Bug#20230)
Bugs fixed:
Security fix: If a user has
access to MyISAM table
t, that user can create a
MERGE table m
that accesses t. However, if the
user's privileges on t are
subsequently revoked, the user can continue to access
t by doing so through
m. If this behavior is undesirable,
you can start the server with the new
--skip-merge option to disable the
MERGE storage engine. (Bug#15195)
Using the extended syntax for TRIM()
— that is, TRIM(... FROM ...) —
in a SELECT statement defining a view
caused an invalid syntax error when selecting from the view.
(Bug#17526)
Assignments of values to variables of type