Dear MySQL users,
We are proud to present to you the MySQL Server 5.1.23-rc release,
a new "release candidate" version of the popular open source database.
Bear in mind that this is still a "candidate" release, and as with any
other pre-production release, caution should be taken when installing on
production level systems or systems with critical data. For production
level systems using 5.0, we would like to direct your attention to the
product description of MySQL Enterprise at:
The MySQL 5.1.23-rc release is now available in source and binary form
for a number of platforms from our download pages at
and mirror sites. Note that not all mirror sites may be up to date at
this point in time, so if you can't find this version on some mirror,
please try again later or choose another download site.
Please also note that some of our mirrors are currently experiencing
problems that may result in serving corrupted files. We are working with
the mirror maintainers to resolve this.
We welcome and appreciate your feedback, bug reports, bug fixes,
The description of the changes from version 5.1.22-rc to this 5.1.23-rc
is some 1,800 lines long, that is about 96 kB. As some mail systems are
bound to truncate long mail at 64 kB, I split the announcement into
three parts - this is part 3 only.
To ensure these important items do not get lost, I repeat the notes
about functionality changes, the security fixes, and other changes
labeled "important". All these were also listed in part 1 and 2.
If you want to skip this duplication, search for the text
"This ends the duplicated part."
Following this, there are the remaining changes from version to version
in the MySQL source code since the latest released version of MySQL 5.1,
the MySQL 5.1.22-rc release. It can also be viewed online at
Functionality added or changed:
* Important Change: Partitioning: Security Fix: It was
possible, by creating a partitioned table using the DATA
DIRECTORY and INDEX DIRECTORY options to gain privileges
on other tables having the same name as the partitioned
table. As a result of this fix, any table-level DATA
DIRECTORY or INDEX DIRECTORY options are now ignored for
(Bug#32091: http://bugs.mysql.com/32091, CVE-2007-5970
See also Bug#29325: http://bugs.mysql.com/29325,
* Incompatible Change: In MySQL 5.1.6, when log tables were
implemented, the default log destination for the general
query and slow query log was TABLE. This default has been
changed to FILE, which is compatible with MySQL 5.0, but
incompatible with earlier releases of MySQL 5.1 from
5.1.6 to 5.1.20. If you are upgrading from MySQL 5.0 to
this release, no logging option changes should be
necessary. However, if you are upgrading from 5.1.6
through 5.1.20 to this release and were using TABLE
logging, use the --log-output=TABLE option explicitly to
preserve your server's table-logging behavior.
In MySQL 5.1.x, this bug was addressed twice because it
turned out that the default was set in two places, only
one of which was fixed the first time.
* Incompatible Change
The parser accepted statements that contained /* ... */
that were not properly closed with */, such as SELECT 1
/* + 2. Statements that contain unclosed /*-comments now
are rejected with a syntax error.
This fix has the potential to cause incompatibilities.
Because of Bug#26302: http://bugs.mysql.com/26302, which
caused the trailing */ to be truncated from comments in
views, stored routines, triggers, and events, it is
possible that objects of those types may have been stored
with definitions that now will be rejected as
syntactically invalid. Such objects should be dropped and
re-created so that their definitions do not contain
* MySQL Cluster: The following improvements have been made
in the ndb_size.pl utility:
+ The script can now be used with multiple databases;
lists of databases and tables can also be excluded
+ Schema name information has been added to index
+ The database name is now an optional parameter, the
exclusion of which causes all databases to be
+ If selecting from INFORMATION_SCHEMA fails, the
script now attempts to fall back to SHOW TABLES.
+ A --real_table_name option has been added; this
designates a table to handle unique index size
+ The report title has been amended to cover cases
where more than one database is being analyzed.
Support for a --socket option was also added.
For more information, see Section 15.9.15, "ndb_size.pl
--- NDBCluster Size Requirement Estimator."
* MySQL Cluster: Mapping of NDB error codes to MySQL
storage engine error codes has been improved.
* MySQL Cluster: The output from the cluster management
client showing the progress of data node starts has been
improved. (Bug#23354: http://bugs.mysql.com/23354)
* Partitioning: Error messages for partitioning syntax
errors have been made more descriptive.
* Replication: Replication of the following now switches to
row-based logging in MIXED mode, and generates a warning
in STATEMENT mode:
See Section 220.127.116.11, "Mixed Binary Logging (MBL) Format,"
for more information.
* mysqltest now has a change_user command to change the
user for the current connection. (It invokes the
mysql_change_user() C API function.)
* mysql-test-run.pl now allows a suite name prefix to be
specified in command-line arguments that name test cases.
The test name syntax now is
[suite_name.]test_name[.suffix]. For example,
mysql-test-run.pl binlog.mytest runs the mytest.test test
in the binlog test suite.
* The --event-scheduler option without a value disabled the
event scheduler. Now it enables the event scheduler.
* mysqldump produces a -- Dump completed on DATE comment at
the end of the dump if --comments is given. The date
causes dump files for identical data take at different
times to appear to be different. The new options
--dump-date and --skip-dump-date control whether the date
is added to the comment. --skip-dump-date suppresses date
printing. The default is --dump-date (include the date in
the comment). (Bug#31077: http://bugs.mysql.com/31077)
* Server parser performance was improved for expression
parsing by lowering the number of state transitions and
* Server parser performance was improved for identifier
lists, expression lists, and UDF expression lists.
* Server parser performance was improved for boolean
expressions. (Bug#30237: http://bugs.mysql.com/30237)
* The LAST_EXECUTED column of the INFORMATION_SCHEMA.EVENTS
table now indicates when the event started executing
rather than when it finished executing. As a result, the
ENDS column is never less than LAST_EXECUTED.
* The mysql_odbc_escape_string() C API function has been
removed. It has multi-byte character escaping issues,
doesn't honor the NO_BACKSLASH_ESCAPES SQL mode and is
not needed anymore by Connector/ODBC as of 3.51.17.
* If a MyISAM table is created with no DATA DIRECTORY
option, the .MYD file is created in the database
directory. By default, if MyISAM finds an existing .MYD
file in this case, it overwrites it. The same applies to
.MYI files for tables created with no INDEX DIRECTORY
option. To suppress this behavior, start the server with
the new --keep_files_on_create option, in which case
MyISAM will not overwrite existing files and returns an
error instead. (Bug#29325: http://bugs.mysql.com/29325)
* The default value of the connect_timeout system variable
was increased from 5 to 10 seconds. This might help in
cases where clients frequently encounter errors of the
form Lost connection to MySQL server at 'XXX', system
error: errno. (Bug#28359: http://bugs.mysql.com/28359)
* MySQL now can be compiled with gcc 4.2.x. There was a
problem involving a conflict with the min() and max()
macros in my_global.h.
* Security Fix: Replication: It was possible for any
connected user to issue a BINLOG statement, which could
be used to escalate privileges.
Use of the BINLOG statement now requires the SUPER
privilege. (Bug#31611: http://bugs.mysql.com/31611,
* Security Fix: Three vulnerabilities in yaSSL versions
1.7.5 and earlier were discovered that could lead to a
server crash or execution of unauthorized code. The
exploit requires a server with yaSSL enabled and TCP/IP
connections enabled, but does not require valid MySQL
account credentials. The exploit does not apply to
The proof-of-concept exploit is freely available on the
Internet. Everyone with a vulnerable MySQL configuration
is advised to upgrade immediately.
(Bug#33814: http://bugs.mysql.com/33814, CVE-2008-0226
* Security Fix: Using RENAME TABLE against a table with
explicit DATA DIRECTORY and INDEX DIRECTORY options can
be used to overwrite system table information by
replacing the symbolic link points. the file to which the
MySQL will now return an error when the file to which the
symlink points already exists.
(Bug#32111: http://bugs.mysql.com/32111, CVE-2007-5969
* Security Fix: ALTER VIEW retained the original DEFINER
value, even when altered by another user, which could
allow that user to gain the access rights of the view.
Now ALTER VIEW is allowed only to the original definer or
users with the SUPER privilege.
* Security Fix: When using a FEDERATED table, the local
server could be forced to crash if the remote server
returned a result with fewer columns than expected.
* Security Enhancement: It was possible to force an error
message of excessive length which could lead to a buffer
overflow. This has been made no longer possible as a
* Important Change: Incompatible Change: A number of
problems existed in the implementation of MERGE tables
that could cause problems. The problems are summarized
+ Bug#26379: http://bugs.mysql.com/26379 - Combination
of FLUSH TABLE and REPAIR TABLE corrupts a MERGE
table. This was caused in a number of situations:
1. A thread trying to lock a MERGE table performs
busy waiting while REPAIR TABLE or a similar
table administration task is ongoing on one or
more of its MyISAM tables.
2. A thread trying to lock a MERGE table performs
busy waiting until all threads that did REPAIR
TABLE or similar table administration tasks on
one or more of its MyISAM tables in LOCK TABLES
segments do UNLOCK TABLES. The difference
against problem #1 is that the busy waiting
takes place after the administration task. It
is terminated by UNLOCK TABLES only.
3. Two FLUSH TABLES within a LOCK TABLES segment
can invalidate the lock. This does not require
a MERGE table. The first FLUSH TABLES can be
replaced by any statement that requires other
threads to reopen the table. In 5.0 and 5.1 a
single FLUSH TABLES can provoke the problem.
+ Bug#26867: http://bugs.mysql.com/26867 -
Simultaneously executing LOCK TABLES and REPAIR
TABLE on a MERGE table would result in memory/cpu
Trying DML on a MERGE table, which has a child
locked and repaired by another thread, made an
infinite loop in the server.
+ Bug#26377: http://bugs.mysql.com/26377 - Deadlock
with MERGE and FLUSH TABLE
Locking a MERGE table and its children in
parent-child order and flushing the child deadlocked
+ Bug#25038: http://bugs.mysql.com/25038 - Waiting
Truncating a MERGE child, while the MERGE table was
in use, let the truncate fail instead of waiting for
the table to become free.
+ Bug#25700: http://bugs.mysql.com/25700 - MERGE base
tables get corrupted by OPTIMIZE/ANALYZE/REPAIR
Repairing a child of an open MERGE table corrupted
the child. It was necessary to FLUSH the child
+ Bug#30275: http://bugs.mysql.com/30275 - MERGE
tables: FLUSH TABLES or UNLOCK TABLES causes server
Flushing and optimizing locked MERGE children
crashed the server.
+ Bug#19627: http://bugs.mysql.com/19627 - temporary
merge table locking
Use of a temporary MERGE table with non-temporary
children could corrupt the children.
Temporary tables are never locked. Creation of
tables with non-temporary children of a temporary
MERGE table is now prohibited.
+ Bug#27660: http://bugs.mysql.com/27660 - Falcon:
MERGE table possible
It was possible to create a MERGE table with
+ Bug#30273: http://bugs.mysql.com/30273 - MERGE
tables: Can't lock file (errno: 155)
This was a Windows-only bug. Table administration
statements sometimes failed with "Can't lock file
The fix introduces the following changes in behavior:
+ This patch changes the behavior of temporary MERGE
tables. Temporary MERGE must have temporary
children. The old behavior was wrong. A temporary
table is not locked. Hence even non-temporary
children were not locked. See
+ You cannot change the union list of a non-temporary
MERGE table when LOCK TABLES is in effect. The
following does not work:
CREATE TABLE m1 ... ENGINE=MRG_MYISAM ...;
LOCK TABLES t1 WRITE, t2 WRITE, m1 WRITE;
ALTER TABLE m1 ... UNION=(t1,t2) ...;
However, you can do this with a temporary MERGE
+ You cannot create a MERGE table with CREATE ...
SELECT, neither as a temporary MERGE table, nor as a
non-temporary MERGE table. For example:
CREATE TABLE m1 ... ENGINE=MRG_MYISAM ... SELECT ...;
gives error message: table is not BASE TABLE.
* Incompatible Change: It is no longer possible to create
CSV tables with NULL columns. However, for backwards
compatibility, you can continue to use such tables that
were created in previous MySQL releases.
* Incompatible Change: Inserting a row with a NULL value
for a DATETIME column results in a CSV file that the
storage engine cannot read.
All CSV tables now need to be defined with each column
marked as NOT NULL. An error is raised if you try to
create a CSV table with columns that are not defined with
NOT NULL. (Bug#31473: http://bugs.mysql.com/31473,
* Incompatible Change: SET PASSWORD statements now cause an
implicit commit, and thus are prohibited within stored
functions and triggers.
* Incompatible Change: The mysql_install_db script could
fail to locate some components (including resolveip)
during execution if the --basedir option was specified on
the command-line or within the my.cnf file. This was due
to a conflict when comparing the compiled-in values and
the supplied values.
The --source-install command-line option to the script
has been removed and replaced with the --srcdir option.
mysql_install_db now locates components either using the
compiled-in options, the --basedir option or --srcdir
option. (Bug#30759: http://bugs.mysql.com/30759)
* Incompatible Change: Within a stored routine, it is no
longer allowable to declare a cursor for a SHOW
statement. This happened to work in some instances, but
is no longer supported.
* Incompatible Change: GRANT and REVOKE statements now
cause an implicit commit, and thus are prohibited within
stored functions and triggers.
* Incompatible Change: It was possible for option files to
be read twice at program startup, if some of the standard
option file locations turned out to be the same
directory. Now duplicates are removed from the list of
files to be read.
Also, users could not override system-wide settings using
~/.my.cnf because SYSCONFDIR/my.cnf was read last. The
latter file now is read earlier so that ~/.my.cnf can
override system-wide settings.
* Important Change: MySQL Cluster: AUTO_INCREMENT columns
had the following problems when used in NDB tables:
+ The AUTO_INCREMENT counter was not updated correctly
when such a column was updated.
+ AUTO_INCREMENT values were not prefetched beyond
+ AUTO_INCREMENT values were not handled correctly
with INSERT IGNORE statements.
+ After being set, ndb_autoincrement_prefetch_sz
showed a value of 1, regardless of the value it had
actually been set to.
As part of this fix, the behavior of
ndb_autoincrement_prefetch_sz has changed. Setting this
to less than 32 no longer has any effect on prefetching
within statements (where IDs are now always obtained in
batches of 32 or more), but only between statements. The
default value for this variable has also changed, and is
now 1. (Bug#25176: http://bugs.mysql.com/25176,
* Partitioning: Important Note: An apostrophe or single
quote character (') used in the DATA DIRECTORY, INDEX
DIRECTORY, or COMMENT for a PARTITION clause caused the
server to crash. When used as part of a CREATE TABLE
statement, the crash was immediate. When used in an ALTER
TABLE statement, the crash did not occur until trying to
perform a SELECT or DML statement on the table. In either
case, the server could not be completely restarted until
the .FRM file corresponding to the newly created or
altered table was deleted.
Upgrading to the current (or later) release solves this
problem only for tables that are newly created or
altered. Tables created or altered in previous versions
of the server to include ' characters in PARTITION
options must still be removed by deleting the
corresponding .FRM files and re-creating them afterwards.
* Important Note: The RENAME DATABASE statement was removed
and replaced with ALTER DATABASE db_name UPGRADE DATA
DIRECTORY NAME. The RENAME DATABASE statement was
intended for upgrading database directory names to the
encoding format used in 5.1 for representing identifiers
in the filesystem (see Section 7.2.3, "Mapping of
Identifiers to Filenames"). However, the statement was
found to be dangerous because it could result in loss of
database contents. See Section 11.1.18, "RENAME DATABASE
Syntax" and Section 11.1.1, "ALTER DATABASE Syntax."
This ends the duplicated part.
The remaining bug fixes were not listed in parts 1 or 2 of the announcement:
* When loading a dynamic plugin on FreeBSD, the plugin
would fail to load. This was due to a build error where
the required symbols would be not exported correctly.
* Simultaneous ALTER TABLE statements for BLACKHOLE tables
caused 100% CPU use due to locking problems.
* Setting certain values on a table using a spatial index
could cause the server to crash.
* Tables with a GEOMETRY column could be marked as corrupt
if you added a non-SPATIAL index on a GEOMETRY column.
* Flushing a merge table between the time it was opened and
its child table were actually attached caused the server
to crash. (Bug#30273: http://bugs.mysql.com/30273)
This regression was introduced by
* The query cache does not support retrieval of statements
for which column level access control applies, but the
server was still caching such statements, thus wasting
memory. (Bug#30269: http://bugs.mysql.com/30269)
* Using DISTINCT or GROUP BY on a BIT column in a SELECT
statement caused the column to be cast internally as an
integer, with incorrect results being returned from the
query. (Bug#30245: http://bugs.mysql.com/30245)
* Multiple-table DELETE statements could delete rows from
the wrong table. (Bug#30234: http://bugs.mysql.com/30234)
* GROUP BY on BIT columns produced incorrect results.
* Short-format mysql commands embedded within /*! ... */
comments were parsed incorrectly by mysql, which
discarded the rest of the comment including the
terminating */ characters. The result was a malformed
(unclosed) comment. Now mysql does not discard the */
characters. (Bug#30164: http://bugs.mysql.com/30164)
* If the server crashed during an ALTER TABLE statement,
leaving a temporary file in the database directory, a
subsequent DROP DATABASE statement failed due to the
presence of the temporary file.
* When mysqldump wrote DROP DATABASE statements within
version-specific comments, it included the terminating
semicolon in the wrong place, causing following
statements to fail when the dump file was reloaded.
* Some INFORMATION_SCHEMA tables are intended for internal
use, but could be accessed by using SHOW statements.
* On some 64-bit systems, inserting the largest negative
value into a BIGINT column resulted in incorrect data.
* mysqlslap did not properly handle multiple result sets
from stored procedures.
* Specifying the --without-geometry option for configure
caused server compilation to fail.
* Statements within stored procedures ignored the value of
the low_priority_updates system variable.
See also Bug#26162: http://bugs.mysql.com/26162
* With auto-reconnect enabled, row fetching for a prepared
statement could crash after reconnect occurred because
loss of the statement handler was not accounted for.
* mysqldump --skip-events --all-databases dumped data from
the mysqld.event table, and when restoring from this
dump, events were created in spite of the --skip-events
option. (Bug#29938: http://bugs.mysql.com/29938)
* When mysqlslap was given a query to execute from a file
via a --query=file_name option, it executed the query one
too many times. (Bug#29803: http://bugs.mysql.com/29803)
* configure did not find nss on some Linux platforms.
* It was possible when creating a partitioned table using
CREATE TABLE ... SELECT to refer in the PARTITION BY
clause to columns in the table being selected from, which
could cause the server to crash. An example of such a
CREATE TABLE t1 (b INT)
PARTITION BY RANGE(t2.b) (
PARTITION p1 VALUES LESS THAN (10),
PARTITION p2 VALUES LESS THAN (20)
) SELECT * FROM t2;
The fix is to disallow references in PARTITION BY clauses
to columns not in the table being created.
* If a view used a function in its SELECT statement, the
columns from the view were not inserted into the
* The mysql client program now ignores Unicode byte order
mark (BOM) characters at the beginning of input files.
Previously, it read them and sent them to the server,
resulting in a syntax error.
Presence of a BOM does not cause mysql to change its
default character set. To do that, invoke mysql with an
option such as --default-character-set=utf8.
* For transactional tables, an error during a
multiple-table DELETE statement did not roll back the
statement. (Bug#29136: http://bugs.mysql.com/29136)
* The log and log_slow_queries system variables were
displayed by SHOW VARIABLES but could not be accessed in
expressions as @@log and @@log_slow_queries. Also,
attempting to set them with SET produced an incorrect
Unknown system variable message. Now these variables are
treated as synonyms for general_log and slow_query_log,
which means that they can be accessed in expressions and
their values can be changed with SET.
* Denormalized double-precision numbers cannot be handled
properly by old MIPS pocessors. For IRIX, this is now
handled by enabling a mode to use a software workaround.
* SHOW VARIABLES did not display the relay_log,
relay_log_index, or relay_log_info_file system variables.
* When doing a DELETE on table that involved a JOIN with
MyISAM or MERGE tables and the JOIN referred to the same
table, the operation could fail reporting ERROR 1030
(HY000): Got error 134 from storage engine. This was
because scans on the table contents would change because
of rows that had already been deleted.
* Killing an SSL connection on platforms where MySQL is
compiled with -DSIGNAL_WITH_VIO_CLOSE (Windows, Mac OS X,
and some others) could crash the server.
* SHOW VARIABLES did not correctly display the value of the
thread_handling system variable.
* On Windows, mysql_upgrade created temporary files in C:\
and did not clean them up.
* Index hints specified in view definitions were ignored
when using the view to select from the base table.
* Views do not have indexes, so index hints do not apply.
Use of index hints when selecting from a view is now
disallowed. (Bug#28701: http://bugs.mysql.com/28701)
* After changing the SQL mode to a restrictive value that
would make already-inserted dates in a column be
considered invalid, searches returned different results
depending on whether the column was indexed.
* A SELECT in one connection could be blocked by INSERT ...
ON DUPLICATE KEY UPDATE in another connection even when
low_priority_updates is set.
* mysql_upgrade could run binaries dynamically linked
against incorrect versions of shared libraries.
* The result from CHAR() was incorrectly assumed in some
contexts to return a single-byte result.
* mysqldump reversed the event name and program name in one
of its error messages.
* If a LIMIT clause was present, the server could fail to
consider indexes that could be used for ORDER BY or GROUP
BY. (Bug#28404: http://bugs.mysql.com/28404)
* The parser confused user-defined function (UDF) and
stored function creation for CREATE FUNCTION and required
that there be a default database when creating UDFs,
although there is no such requirement.
* Fast-mutex locking was not thread-safe and
optimization-safe on some platforms, which could cause
program failures such as out-of-memory errors.
* The result of a comparison between VARBINARY and BINARY
columns differed depending on whether the VARBINARY
column was indexed.
* The metadata in some MYSQL_FIELD members could be
incorrect when a temporary table was used to evaluate a
query. (Bug#27990: http://bugs.mysql.com/27990)
* Partition pruning was not used for queries having <= or
>= conditions in the WHERE clause on a table using
TO_DAYS() in the partitioning expression.
* mysqlbinlog produced incorrectly formatted DATETIME and
* Failure to log to the general_log or slow_log log tables
were not logged to the error log at all or were logged
incorrectly. (Bug#27858: http://bugs.mysql.com/27858)
* comp_err created files with permissions such that they
might be inaccessible during make install operations.
* SHOW COLUMNS returned NULL instead of the empty string
for the Default value of columns that had no default
specified. (Bug#27747: http://bugs.mysql.com/27747)
* It was possible to create a view having a column whose
name consisted of an empty string or space characters
only. (Bug#27695: http://bugs.mysql.com/27695)
See also Bug#31202: http://bugs.mysql.com/31202
* With recent versions of DBD::mysql, mysqlhotcopy
generated table names that were doubly qualified with the
database name. (Bug#27694: http://bugs.mysql.com/27694)
* The anonymous accounts were not being created during
* Some SHOW statements and INFORMATION_SCHEMA queries could
expose information not allowed by the user's access
privileges. (Bug#27629: http://bugs.mysql.com/27629)
* ALTER TABLE tbl_name ROW_FORMAT=format_type did not cause
the table to be rebuilt.
* A race condition between killing a statement and the
thread executing the statement could lead to a situation
such that the binary log contained an event indicating
that the statement was killed, whereas the statement
actually executed to completion.
* Some character mappings in the ascii.xml file were
incorrect. (Bug#27562: http://bugs.mysql.com/27562)
* Some queries using the NAME_CONST() function failed to
return either a result or an error to the client, causing
it to hang. This was due to the fact that there was no
check to insure that both arguments to this function were
* With the read_only system variable enabled, CREATE
DATABASE and DROP DATABASE were allowed to users who did
not have the SUPER privilege.
* For an event with an ON COMPLETION value of PRESERVE, an
ALTER EVENT statement that specified no ON COMPLETION
option caused the value to become NOT PRESERVE.
* MySQL failed to generate or retrieve an AUTO_INCREMENT
primary key for InnoDB tables with user-defined
partitioning. (Bug#27405: http://bugs.mysql.com/27405)
* Changes to the sql_mode system variable were not tracked
by INSERT DELAYED.
* A SELECT with more than 31 nested dependent subqueries
returned an incorrect result.
* The ExtractValue() and UpdateXML() functions performed
extremely slowly for large amounts of XML data (greater
than 64 KB). These functions now execute approximately
2000 times faster than previously.
* Several functions and operators returned an incorrect
result type (string) when given DATE parameters:
COALESCE(), IF(), IFNULL(), LEAST(), GREATEST(), CASE.
These now aggregate DATE (or DATETIME) parameters to
produce a DATE (or DATETIME result. In addition, the
result type of the STR_TO_DATE() function is now DATETIME
by default. (Bug#27216: http://bugs.mysql.com/27216)
* On Windows, writes to the debug log were using freopen()
instead of fflush(), resulting in slower performance.
* For a table that used different full-text parsers for
different FULLTEXT indexes, SHOW CREATE TABLE displayed
the first parser name for all of them.
* STR_TO_DATE() displayed an error message that referred to
STR_TO_TIME(). (Bug#27014: http://bugs.mysql.com/27014)
* The mysql_insert_id() C API function sometimes returned
different results for libmysqld and libmysqlclient.
* Symbolic links on Windows could fail to work.
* mysqld sometimes miscalculated the number of digits
required when storing a floating-point number in a CHAR
column. This caused the value to be truncated, or (when
using a debug build) caused the server to crash.
See also Bug#12860: http://bugs.mysql.com/12860
* LOAD DATA INFILE ran very slowly when reading large files
into partitioned tables.
* Using HANDLER to open a table having a storage engine not
supported by HANDLER properly returned an error, but also
improperly prevented the table from being dropped by
* For a prepared statement stmt, changing the default
database following PREPARE stmt but before EXECUTE stmt
caused stmt to be recorded incorrectly in the binary log.
* CREATE TABLE LIKE did not work when the source table was
an INFORMATION_SCHEMA table.
* Threads that were calculating the estimated number of
records for a range scan did not respond to the KILL
statement. That is, if a range join type is possible
(even if not selected by the optimizer as a join type of
choice and thus not shown by EXPLAIN), the query in the
statistics state (shown by the SHOW PROCESSLIST) did not
respond to the KILL statement.
* For InnoDB tables, CREATE TABLE a AS SELECT * FROM A
would fail. (Bug#25164: http://bugs.mysql.com/25164)
* For mysql --show-warnings, warnings were in some cases
not displayed. (Bug#25146: http://bugs.mysql.com/25146)
* The returns column of the mysql.proc table was CHAR(64),
which is not long enough to store long data types such as
ENUM types. The column has been changed to LONGBLOB and a
warning is generated if truncation occurs when storing a
row into the proc table.
* If the expected precision of an arithmetic expression
exceeded the maximum precision supported by MySQL, the
precision of the result was reduced by an unpredictable
or arbitrary amount, rather than to the maximum
precision. In some cases, exceeding the maximum supported
precision could also lead to a crash of the server.
* A CREATE TRIGGER statement could cause a deadlock or
server crash if it referred to a table for which a table
lock had been acquired with LOCK TABLES.
* For storage engines that do not redefine
handler::index_next_same() and are capable of indexes,
statements that include a WHERE clause might select
incorrect data. (Bug#22351: http://bugs.mysql.com/22351)
* The parser treated the INTERVAL() function incorrectly,
leading to situations where syntax errors could result
depending on which side of an arithmetic operator the
* Entries in the general query log were truncated at 1000
characters. (Bug#21557: http://bugs.mysql.com/21557)
* A memory leak occurred when CREATE TEMPORARY TABLE ..
SELECT was invoked from a stored function that in turn
was called from CREATE TABLE ... SELECT.
* It was possible to execute CREATE TABLE t1 ... SELECT ...
FROM t2 with the CREATE privilege for t1 and SELECT
privilege for t2, even in the absence of the INSERT
privilege for t1.
* Worked around an icc problem with an incorrect machine
instruction being generated in the context of software
pre-fetching after a subroutine got in-lined. (Upgrading
to icc 10.0.026 makes the workaround unnecessary.)
* If a column selected by a view referred to a stored
function, the data type reported for the column in
INFORMATION_SCHEMA.COLUMNS could be incorrect.
* The mysql_change_user() C API function changed the value
of the SQL_BIG_SELECTS session variable.
* Hostnames sometimes were treated as case sensitive in
account-management statements (CREATE USER, GRANT,
REVOKE, and so forth).
* Issuing an SQL KILL of the active connection caused an
error on Mac OS X.
* The readline library has been updated to version 5.2.
This addresses issues in the mysql client where history
and editing within the client would fail to work as
expected. (Bug#18431: http://bugs.mysql.com/18431)
* The -lmtmalloc library was removed from the output of
mysql_config on Solaris, as it caused problems when
building DBD::mysql (and possibly other applications) on
that platform that tried to use dlopen() to access the
client library. (Bug#18322: http://bugs.mysql.com/18322)
* The Aborted_clients status variable was incremented twice
if a client exited without calling mysql_close().
* Clients were ignoring the TCP/IP port number specified as
the default port via the --with-tcp-port configuration
option. (Bug#15327: http://bugs.mysql.com/15327)
* Parameters of type DATETIME or DATE in stored procedures
were silently converted to VARBINARY.
* Zero-padding of exponent values was not the same across
platforms. (Bug#12860: http://bugs.mysql.com/12860)
* Values of types REAL ZEROFILL, DOUBLE ZEROFILL, FLOAT
ZEROFILL, were not zero-filled when converted to a
character representation in the C prepared statement API.
* mysql stripped comments from statements sent to the
server. Now the --comments or --skip-comments option can
be used to control whether to retain or strip comments.
The default is --skip-comments.
* Several buffer-size system variables were either being
handled incorrectly for large values (for settings larger
than 4GB, they were truncated to values less than 4GB
without a warning), or were limited unnecessarily to 4GB
even on 64-bit systems. The following changes were made:
+ For key_buffer_size, values larger than 4GB are
allowed on 64-bit platforms.
+ For join_buffer_size, sort_buffer_size, and
myisam_sort_buffer_size, values larger than 4GB are
allowed on 64-bit platforms (except Windows, for
which large values are truncated to 4GB with a
In addition, settings for read_buffer_size and
read_rnd_buffer_size are limited to 2GB on all platforms.
Larger values are truncated to 2GB with a warning.
* Executing DISABLE KEYS and ENABLE KEYS on a non-empty
table would cause the size of the index file for the
table to grow considerable. This was because the DISABLE
KEYS operation would only mark the existing index,
without deleting the index blocks. The ENABLE KEYS
operation would re-create the index, adding new blocks,
while the previous index blocks would remain. Existing
indexes are now dropped and recreated when the ENABLE
KEYS statement is executed.
* Grant table checks failed in libmysqld.
* There were no more transaction records in the transaction
* Replicating from a master table to a slave table where
the size of a CHAR or VARCHAR column was a different size
would cause mysqld to crash. For more information on
replicating with different column definitions, see
Section 18.104.22.168, "Replication with Differing Tables on
Master and Slave."
* The LAST_DAY() function returns a DATE value, but
internally the value did not have the time fields zeroed
and calculations involving the value could return
incorrect results. (Bug #32270: http://bugs.mysql.com/32270)
Please also check parts 1 and 2 for any item you are interested in.
Joerg Bruehe, Senior Production Engineer
MySQL AB, www.mysql.com
|• MySQL 5.1.23-rc has been released (part 3)||Joerg Bruehe||14 Feb|