List:Announcements« Previous MessageNext Message »
From:Joerg Bruehe Date:February 13 2008 10:53pm
Subject:MySQL 5.1.23-rc has been released (part 3)
View as plain text  
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,
patches etc.:


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
     partitioned tables.
     (Bug#32091:, CVE-2007-5970
     See also Bug#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:, 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
     truncated comments.
   * MySQL Cluster: The following improvements have been made
     in the utility:
        + The script can now be used with multiple databases;
          lists of databases and tables can also be excluded
          from analysis.
        + Schema name information has been added to index
          table calculations.
        + 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, "
     --- 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:
   * 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:
        + USER()
        + CURRENT_USER()
        + CURRENT_USER
        + FOUND_ROWS()
        + ROW_COUNT()
     See Section, "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.)
   * 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, 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:
   * Server parser performance was improved for expression
     parsing by lowering the number of state transitions and
     reductions needed.
   * Server parser performance was improved for identifier
     lists, expression lists, and UDF expression lists.
   * Server parser performance was improved for boolean
     expressions. (Bug#30237:
     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:
   * 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:
   * 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.

Bugs fixed:
   * 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:,
   * 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:, 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
     symlink points.
     MySQL will now return an error when the file to which the
     symlink points already exists.
     (Bug#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
     security precaution.
   * 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: - 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: -
          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: - Deadlock
          with MERGE and FLUSH TABLE
          Locking a MERGE table and its children in
          parent-child order and flushing the child deadlocked
          the server.
        + Bug#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: - 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: - MERGE
          tables: FLUSH TABLES or UNLOCK TABLES causes server
          to crash.
          Flushing and optimizing locked MERGE children
          crashed the server.
        + Bug#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: - Falcon:
          MERGE table possible
          It was possible to create a MERGE table with
          non-MyISAM children.
        + Bug#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
          (errno: 155)".
     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:
          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:,
   * 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:
   * 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
          statement boundaries.
        + 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:,
   * 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
     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:
     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:
   * 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:
   * Multiple-table DELETE statements could delete rows from
     the wrong table. (Bug#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:
   * 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:
   * 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:
   * 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:
   * 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
     statement is:
        CREATE TABLE t1 (b INT)
        PARTITION BY RANGE(t2.b) (
        )   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:
   * 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:
   * 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:
   * 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:
   * 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
     TIMESTAMP values.
   * 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:
   * 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:
   * It was possible to create a view having a column whose
     name consisted of an empty string or space characters
     only. (Bug#27695:
     See also Bug#31202:
   * With recent versions of DBD::mysql, mysqlhotcopy
     generated table names that were doubly qualified with the
     database name. (Bug#27694:
   * The anonymous accounts were not being created during
     MySQL installation.
   * Some SHOW statements and INFORMATION_SCHEMA queries could
     expose information not allowed by the user's access
     privileges. (Bug#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:
   * 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
     constant expressions.
   * 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:
   * Changes to the sql_mode system variable were not tracked
   * 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:
     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:
   * 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:
   * 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:
   * 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
     other connections.
   * 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
   * 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:
   * For mysql --show-warnings, warnings were in some cases
     not displayed. (Bug#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:
   * The parser treated the INTERVAL() function incorrectly,
     leading to situations where syntax errors could result
     depending on which side of an arithmetic operator the
     function appeared.
   * Entries in the general query log were truncated at 1000
     characters. (Bug#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:
   * 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:
   * 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:
   * 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:
     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, "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:

Please also check parts 1 and 2 for any item you are interested in.

Enjoy !

Joerg Bruehe, Senior Production Engineer

MySQL 5.1.23-rc has been released (part 3)Joerg Bruehe14 Feb