Released on 30 Nov 2007
MySQL 5.0.52 Changelog

This is a Monthly Rapid Update release of the MySQL Enterprise Server 5.0.

This section documents all changes and bugfixes that have been applied since the last MySQL Enterprise Server release (5.0.50). 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

  • Functionality Added or Changed

  • Bugs Fixed

Functionality Added or Changed

  • 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)

  • 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)

  • The use of InnoDB hash indexes now can be controlled by setting the new innodb_adaptive_hash_index system variable at server startup. By default, this variable is enabled. See Adaptive Hash Indexes.

Bugs Fixed

  • 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 enable that user to gain the access rights of the view. Now ALTER VIEW is permitted only to the original definer or users with the SUPER privilege. (Bug #29908)

  • 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. (Bug #29801)

  • Incompatible Change: With ONLY_FULL_GROUP_BY SQL mode enabled, queries such as SELECT a FROM t1 HAVING COUNT(*)>2 were not being rejected as they should have been.

    This fix results in the following behavior:

    • There is a check against mixing group and nongroup columns only when ONLY_FULL_GROUP_BY is enabled.

    • This check is done both for the select list and for the HAVING clause if there is one.

    This behavior differs from previous versions as follows:

    • Previously, the HAVING clause was not checked when ONLY_FULL_GROUP_BY was enabled; now it is checked.

    • Previously, the select list was checked even when ONLY_FULL_GROUP_BY was not enabled; now it is checked only when ONLY_FULL_GROUP_BY is enabled.

    (Bug #31794)

  • Incompatible Change: It was possible to create a view having a column whose name consisted of an empty string or space characters only.

    One result of this bug fix is that aliases for columns in the view SELECT statement are checked to ensure that they are legal column names. In particular, the length must be within the maximum column length of 64 characters, not the maximum alias length of 256 characters. This can cause problems for replication or loading dump files. For additional information and workarounds, see Restrictions on Views. (Bug #27695)

    References: See also Bug #31202.

  • Incompatible Change: Several type-preserving functions and operators returned an incorrect result type that does not match their argument types: COALESCE(), IF(), IFNULL(), LEAST(), GREATEST(), CASE. These now aggregate using the precise SQL types of their arguments rather than the internal type. In addition, the result type of the STR_TO_DATE() function is now DATETIME by default. (Bug #27216)

  • MySQL Cluster: An uninitialized variable in the NDB storage engine code led to AUTO_INCREMENT failures when the server was compiled with gcc 4.2.1. (Bug #31848)

    References: This bug was introduced by Bug #27437.

  • MySQL Cluster: An error with an if statement in sql/ could potentially lead to an infinite loop in case of failure when working with AUTO_INCREMENT columns in NDB tables. (Bug #31810)

  • MySQL Cluster: The NDB storage engine code was not safe for strict-alias optimization in gcc 4.2.1. (Bug #31761)

  • MySQL Cluster: Transaction timeouts were not handled well in some circumstances, leading to excessive number of transactions being aborted unnecessarily. (Bug #30379)

  • MySQL Cluster: In some cases, the cluster managment server logged entries multiple times following a restart of ndb_mgmd. (Bug #29565)

  • MySQL Cluster: An interpreted program of sufficient size and complexity could cause all cluster data nodes to shut down due to buffer overruns. (Bug #29390)

  • MySQL Cluster: UPDATE IGNORE could sometimes fail on NDB tables due to the use of unitialized data when checking for duplicate keys to be ignored. (Bug #25817)

  • Replication: Use of the @@hostname system variable in inserts in mysql_system_tables_data.sql did not replicate. The workaround is to select its value into a user variable (which does replicate) and insert that. (Bug #31167)

  • A build problem introduced in MySQL 5.0.52 was resolved: The x86 32-bit Intel icc-compiled server binary had unwanted dependences on Intel icc runtime libraries. (Bug #32514)

  • The rules for valid column names were being applied differently for base tables and views. (Bug #32496)

  • The default grant tables on Windows contained information for host, which should not be there. (Bug #32219)

  • Under certain conditions, the presence of a GROUP BY clause could cause an ORDER BY clause to be ignored. (Bug #32202)

  • The server crashed on optimizations involving a join of INT and MEDIUMINT columns and a system variable in the WHERE clause. (Bug #32103)

  • User-defined functions are not loaded if the server is started with the --skip-grant-tables option, but the server did not properly handle this case and issued an Out of memory error message instead. (Bug #32020)

  • A column with malformed multibyte characters could cause the full-text parser to go into an infinite loop. (Bug #31950)

  • In debug builds, testing the result of an IN subquery against NULL caused an assertion failure. (Bug #31884)

  • Comparison results for BETWEEN were different from those for operators like < and > for DATETIME-like values with trailing extra characters such as '2007-10-01 00:00:00 GMT-6'. BETWEEN treated the values as DATETIME, whereas the other operators performed a binary-string comparison. Now they all uniformly use a DATETIME comparison, but generate warnings for values with trailing garbage. (Bug #31800)

  • The server could crash during filesort for ORDER BY based on expressions with INET_NTOA() or OCT() if those functions returned NULL. (Bug #31758)

  • For a fatal error during a filesort in find_all_keys(), the error was returned without the necessary handler uninitialization, causing an assertion failure. (Bug #31742)

  • The examined-rows count was not incremented for const queries. (Bug #31700)

  • The mysql_change_user() C API function was subject to buffer overflow. (Bug #31669)

  • For SELECT ... INTO OUTFILE, if the ENCLOSED BY string is empty and the FIELDS TERMINATED BY string started with a special character (one of n, t, r, b, 0, Z, or N), every occurrence of the character within field values would be duplicated. (Bug #31663)

  • SHOW COLUMNS and DESCRIBE displayed null as the column type for a view with no valid definer. This caused mysqldump to produce a nonreloadable dump file for the view. (Bug #31662)

  • The mysqlbug script did not include the correct values of CFLAGS and CXXFLAGS that were used to configure the distribution. (Bug #31644)

  • A buffer used when setting variables was not dimensioned to accommodate the trailing '\0' byte, so a single-byte buffer overrun was possible. (Bug #31588)

  • HAVING could treat lettercase of table aliases incorrectly if lower_case_table_names was enabled. (Bug #31562)

  • The fix for Bug #24989 introduced a problem such that a NULL thread handler could be used during a rollback operation. This problem is unlikely to be seen in practice. (Bug #31517)

  • The length of the result from IFNULL() could be calculated incorrectly because the sign of the result was not taken into account. (Bug #31471)

  • Queries that used the ref access method or index-based subquery execution over indexes that have DECIMAL columns could fail with an error Column col_name cannot be null. (Bug #31450)

  • SELECT 1 REGEX NULL caused an assertion failure for debug servers. (Bug #31440)

  • Executing RENAME while tables were open for use with HANDLER statements could cause a server crash. (Bug #31409)

  • tried to create files in a directory where it could not be expected to have write permission. mysqltest created .reject files in a directory other than the one where test results go. (Bug #31398)

  • DROP USER caused an increase in memory usage. (Bug #31347)

  • For an almost-full MyISAM table, an insert that failed could leave the table in a corrupt state. (Bug #31305)

  • CONVERT(val, DATETIME) failed on invalid input, but processing was not aborted for the WHERE clause, leading to a server crash. (Bug #31253)

  • Allocation of an insufficiently large group-by buffer following creation of a temporary table could lead to a server crash. (Bug #31249)

  • Use of DECIMAL(n, n) ZEROFILL in GROUP_CONCAT() could cause a server crash. (Bug #31227)

  • With small values of myisam_sort_buffer_size, REPAIR TABLE for MyISAM tables could cause a server crash. (Bug #31174)

  • If MAKETIME() returned NULL when used in an ORDER BY that was evaluated using filesort, a server crash could result. (Bug #31160)

  • Full-text searches on ucs2 columns caused a server crash. (FULLTEXT indexes on ucs2 columns cannot be used, but it should be possible to perform IN BOOLEAN MODE searches on ucs2 columns without a crash.) (Bug #31159)

  • An assertion designed to detect a bug in the ROLLUP implementation would incorrectly be triggered when used in a subquery context with noncacheable statements. (Bug #31156)

  • Selecting spatial types in a UNION could cause a server crash. (Bug #31155)

  • Use of GROUP_CONCAT(DISTINCT bit_column) caused an assertion failure. (Bug #31154)

  • GROUP BY NULL WITH ROLLUP could cause a server crash. (Bug #31095)

    References: See also Bug #32558.

  • Internal conversion routines could fail for several multibyte character sets (big5, cp932, euckr, gb2312, sjis) for empty strings or during evaluation of SOUNDS LIKE. (Bug #31069, Bug #31070)

  • The MOD() function and the % operator crashed the server for a divisor less than 1 with a very long fractional part. (Bug #31019)

  • On Windows, the pthread_mutex_trylock() implementation was incorrect. (Bug #30992)

  • A character set introducer followed by a hexadecimal or bit-value literal did not check its argument and could return an ill-formed result for invalid input. (Bug #30986)

  • CHAR(str USING charset) did not check its argument and could return an ill-formed result for invalid input. (Bug #30982)

  • The result from CHAR(str USING ucs2) did not add a leading 0x00 byte for input strings with an odd number of bytes. (Bug #30981)

  • The GeomFromText() function could cause a server crash if the first argument was NULL or the empty string. (Bug #30955)

  • MAKEDATE() incorrectly moved year values in the 100 to 200 range into the 1970 to 2069 range. (This is legitimate for 00 to 99, but three-digit years should be used unchanged.) (Bug #30951)

  • When invoked with constant arguments, STR_TO_DATE() could use a cached value for the format string and return incorrect results. (Bug #30942)

  • GROUP_CONCAT() returned ',' rather than an empty string when the argument column contained only empty strings. (Bug #30897)

  • For MEMORY tables, lookups for NULL values in BTREE indexes could return incorrect results. (Bug #30885)

  • Calling NAME_CONST() with nonconstant arguments triggered an assertion failure. Nonconstant arguments are no longer permitted. (Bug #30832)

  • For a spatial column with a regular (non-SPATIAL) index, queries failed if the optimizer tried to use the index. (Bug #30825)

  • Values for the --tc-heuristic-recover option incorrectly were treated as values for the --myisam-stats-method option. (Bug #30821)

  • On Windows, the pthread_mutex_trylock() implementation was incorrect. One symptom was that invalidating the query cache could cause a server crash. (Bug #30768)

  • Under some circumstances, CREATE TABLE ... SELECT could crash the server or incorrectly report that the table row size was too large. (Bug #30736)

  • Using the MIN() or MAX() function to select one part of a multi-part key could cause a crash when the function result was NULL. (Bug #30715)

  • The optimizer could ignore ORDER BY in cases when the result set is ordered by filesort, resulting in rows being returned in incorrect order. (Bug #30666)

  • MyISAM tables could not exceed 4294967295 (232 - 1) rows on Windows. (Bug #30638)

  • For MEMORY tables, DELETE statements that remove rows based on an index read could fail to remove all matching rows. (Bug #30590)

  • Using GROUP BY on an expression of the form timestamp_col DIV number caused a server crash due to incorrect calculation of number of decimals. (Bug #30587)

  • When expanding a * in a USING or NATURAL join, the check for table access for both tables in the join was done using only the grant information of the first table. (Bug #30468)

  • Versions of mysqldump from MySQL 4.1 or higher tried to use START TRANSACTION WITH CONSISTENT SNAPSHOT if the --single-transaction and --master-data options were given, even with servers older than 4.1 that do not support consistent snapshots. (Bug #30444)

  • Setting certain values on a table using a spatial index could cause the server to crash. (Bug #30286)

  • Some INFORMATION_SCHEMA tables are intended for internal use, but could be accessed by using SHOW statements. (Bug #30079)

  • Under some circumstances, a UDF initialization function could be passed incorrect argument lengths. (Bug #29804)

  • Specifying the --without-geometry option for configure caused server compilation to fail. (Bug #29772)

  • configure did not find nss on some Linux platforms. (Bug #29658)

  • 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 can be accessed in expressions and attempting to set their values produces an error message that the variable is read only. (Bug #29131)

  • SHOW VARIABLES did not display the relay_log, relay_log_index, or relay_log_info_file system variables. (Bug #28893)

  • On Windows, mysql_upgrade created temporary files in C:\ and did not clean them up. (Bug #28774)

  • Index hints specified in view definitions were ignored when using the view to select from the base table. (Bug #28702)

  • Views do not have indexes, so index hints do not apply. Use of index hints when selecting from a view is no longer permitted. (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. (Bug #28687)

  • The result from CHAR() was incorrectly assumed in some contexts to return a single-byte result. (Bug #28550)

  • 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. (Bug #28318, Bug #29816)

  • The result of a comparison between VARBINARY and BINARY columns differed depending on whether the VARBINARY column was indexed. (Bug #28076)

  • The metadata in some MYSQL_FIELD members could be incorrect when a temporary table was used to evaluate a query. (Bug #27990)

  • comp_err created files with permissions such that they might be inaccessible during make install operations. (Bug #27789)

  • The anonymous accounts were not being created during MySQL installation. (Bug #27692)

  • Host names sometimes were treated as case sensitive in account-management statements (CREATE USER, GRANT, REVOKE, and so forth). (Bug #19828)

  • The readline library has been updated to version 5.2. This addresses issues in the mysql client where history and editing within the client failed to work as expected. (Bug #18431)

  • The Aborted_clients status variable was incremented twice if a client exited without calling mysql_close(). (Bug #16918)

  • Clients were ignoring the TCP/IP port number specified as the default port using the --with-tcp-port configuration option. (Bug #15327)

  • 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. (Bug #11589)

  • 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. (Bug #11230, Bug #26215)

  • 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 permitted on 64-bit platforms (except Windows, for which large values are truncated to 4GB with a warning).

    • For join_buffer_size, sort_buffer_size, and myisam_sort_buffer_size, values are limited to 4GB on all platforms. Larger values are truncated to 4GB with a warning.

    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. (Bug #5731, Bug #29419, Bug #29446)

  • Executing DISABLE KEYS and ENABLE KEYS on a nonempty 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. (Bug #4692)