Personal tools
You are here: Home Docs MySQL 4.1 Appendix B. MySQL Change History

Appendix B. MySQL Change History

INSERT ... ON DUPLICATE KEY UPDATE ... syntax. This allows you to UPDATE an existing row if the insert would cause a duplicate value in a PRIMARY or UNIQUE key. (REPLACE allows you to overwrite an existing row, which is something entirely different.) See Section 12.2.4, “INSERT Syntax”.

  • A newly designed GROUP_CONCAT() aggregate function. See Section 11.11, “Functions and Modifiers for Use with GROUP BY Clauses”.

  • Extensive Unicode (UTF8) support.

  • Table names and column names now are stored in UTF8. This makes MySQL more flexible, but might cause some problems upgrading if you have table or column names that use characters outside of the standard 7-bit US-ASCII range. See Section 2.11.1.1, “Upgrading from MySQL 4.0 to 4.1”.

  • Character sets can be defined per column, table, and database.

  • New key cache for MyISAM tables with many tunable parameters. You can have multiple key caches, preload index into caches for batches...

  • BTREE index on HEAP tables.

  • Support for OpenGIS spatial types (geographical data). See Chapter 16, Spatial Extensions.

  • SHOW WARNINGS shows warnings for the last command. See Section 12.5.5.26, “SHOW WARNINGS Syntax”.

  • Faster binary protocol with prepared statements and parameter binding. See Section 17.7.4, “C API Prepared Statements”.

  • You can now issue multiple statements with a single C API call and then read the results in one go. See Section 17.7.12, “C API Support for Multiple Statement Execution”.

  • Create Table: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table2 LIKE table1.

  • Server based HELP command that can be used in the mysql command-line client (and other clients) to get help for SQL statements.

  • B.1.1. Changes in MySQL 4.1.25 (01 December 2008)

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    This is a bugfix release for the MySQL 4.1 release family.

    Functionality added or changed:

    • Security Enhancement: To enable stricter control over the location from which user-defined functions can be loaded, the plugin_dir system variable has been backported from MySQL 5.1. If the value is nonempty, user-defined function object files can be loaded only from the directory named by this variable. If the value is empty, the behavior that is used prior to the inclusion of plugin_dir applies: The UDF object files must be located in a directory that is searched by your system's dynamic linker. (Bug#37428)

    Bugs fixed:

    • Important Change: Security Fix: Additional corrections were made for the symlink-related privilege problem originally addressed in MySQL 4.1.24. The original fix did not correctly handle the data directory path name if it contained symlinked directories in its path, and the check was made only at table-creation time, not at table-opening time later. (Bug#32167, CVE-2008-2079)

      See also Bug#39277.

    • The Windows installer displayed incorrect product names in some images. (Bug#40845)

    • On Windows, the installer attempted to use JScript to determine whether the target data directory already existed. On Windows Vista x64, this resulted in an error because the installer was attempting to run the JScript in a 32-bit engine, which wasn't registered on Vista. The installer no longer uses JScript but instead relies on a native WiX command. (Bug#36103)

    • INSERT INTO ... SELECT caused a crash if innodb_locks_unsafe_for_binlog was enabled. (Bug#27294)

    • The MySQL Instance Configuration Wizard would not allow you to choose a service name, even though the criteria for the service name were valid. The code that checks the name has been updated to support the correct criteria of any string less than 256 character and not containing either a forward or backward slash character. (Bug#27013)

    B.1.2. Changes in MySQL 4.1.24 (01 March 2008)

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    This is a bugfix release for the MySQL 4.1 release family.

    Functionality added or changed:

    • The ndbd and ndb_mgmd man pages have been reclassified from volume 1 to volume 8. (Bug#34642)

    Bugs fixed:

    • Important Change: Security Fix: It was possible to circumvent privileges through the creation of MyISAM tables employing the DATA DIRECTORY and INDEX DIRECTORY options to overwrite existing table files in the MySQL data directory. Use of the MySQL data directory in DATA DIRECTORY and INDEX DIRECTORY path name is now disallowed.

      Note

      Additional fixes were made in MySQL 4.1.25.

      (Bug#32167, CVE-2008-2079)

      See also Bug#39277.

    • 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: A malformed password packet in the connection protocol could cause the server to crash. Thanks for Dormando for reporting this bug, and for providing details and a proof of concept. (Bug#28984, CVE-2007-3780)

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

    • Replication: Connections from one mysqld server to another failed on Mac OS X, affecting replication and FEDERATED tables. (Bug#29083)

      See also Bug#26664.

    • An internal buffer in mysql was too short. Overextending it could cause stack problems or segmentation violations on some architectures. (This is not a problem that could be exploited to run arbitrary code.) (Bug#33841)

    • make_binary_distribution passed the --print-libgcc-file option to the C compiler, but this does not work with the ICC compiler. (Bug#33536)

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

    • With lower_case_table_names set, CREATE TABLE LIKE was treated differently by libmysqld than by the nonembedded server. (Bug#32063)

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

    • ucs2 does not work as a client character set, but attempts to use it as such were not rejected. Now character_set_client cannot be set to ucs2. This also affects statements such as SET NAMES and SET CHARACTER SET. (Bug#31615)

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

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

    • myisamchk --unpack could corrupt a table that when unpacked has static (fixed-length) row format. (Bug#31277)

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

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

    • Data in BLOB or GEOMETRY columns could be cropped when performing a UNION query. (Bug#31158)

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

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

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

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

    • Issuing a DELETE statement having both an ORDER BY clause and a LIMIT clause could cause mysqld to crash. (Bug#30385)

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

    • Tables with a GEOMETRY column could be marked as corrupt if you added a non-SPATIAL index on a GEOMETRY column. (Bug#30284)

    • On some 64-bit systems, inserting the largest negative value into a BIGINT column resulted in incorrect data. (Bug#30069)

    • Adding DISTINCT could cause incorrect rows to appear in a query result. (Bug#29911)

    • If one thread was performing concurrent inserts, other threads reading from the same table using equality key searches could see the index values for new rows before the data values had been written, leading to reports of table corruption. (Bug#29838)

    • In some cases, INSERT INTO ... SELECT ... GROUP BY could insert rows even if the SELECT by itself produced an empty result. (Bug#29717)

    • A field packet with NULL fields caused a libmysqlclient crash. (Bug#29494)

    • SELECT ... INTO OUTFILE followed by LOAD DATA could result in garbled characters when the FIELDS ENCLOSED BY clause named a delimiter of '0', 'b', 'n', 'r', 't', 'N', or 'Z' due to an interaction of character encoding and doubling for data values containing the enclosed-by character. (Bug#29294)

    • If an ENUM column contained '' as one of its members (represented with numeric value greater than 0), and the column contained error values (represented as 0 and displayed as ''), using ALTER TABLE to modify the column definition caused the 0 values to be given the numeric value of the nonzero '' member. (Bug#29251)

    • A network structure was initialized incorrectly, leading to embedded server crashes. (Bug#29117)

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

    • The semantics of BIGINT depended on platform-specific characteristics. (Bug#29079)

    • For InnoDB tables that use the utf8 character set, incorrect results could occur for DML statements such as DELETE or UPDATE that use an index on character-based columns. (Bug#28878)

      See also Bug#29449, Bug#30485, Bug#31395.

      This regression was introduced by Bug#13195.

    • The MySQL preferences pane did not work to start or stop MySQL on Mac OS X 10.5 (Leopard). (Bug#28854)

    • When one thread attempts to lock two (or more) tables and another thread executes a statement that aborts these locks (such as REPAIR TABLE, OPTIMIZE TABLE, or CHECK TABLE), the thread might get a table object with an incorrect lock type in the table cache. The result is table corruption or a server crash. (Bug#28574)

    • PURGE MASTER LOGS BEFORE (subquery) caused a server crash. Subqueries are forbidden in the BEFORE clause now. (Bug#28553)

    • On Mac OS X, shared-library installation path names were incorrect. (Bug#28544)

    • Dropping a user-defined function could cause a server crash if the function was still in use by another thread. (Bug#27564)

    • Error returns from the time() system call were ignored. (Bug#27198)

    • On Mac OS X, the StartupItem for MySQL did not work. (Bug#25008)

    • Format strings in English error messages were insufficiently wide for path names printed in those messages by the embedded server. (Bug#16635)

    • On 64-bit Windows systems, the Config Wizard failed to complete the setup because 64-bit Windows does not resolve dynamic linking of the 64-bit libmysql.dll to a 32-bit application like the Config Wizard. (Bug#14649)

    • mysql_setpermission tried to grant global-only privileges at the database level. (Bug#14618)

    • Performing a full text search on a table could cause a crash on a 64-bit platforms with certain characteristics. Searches that were known to cause a crash with certain datasets included numerical values and strings where the match string included data enclosed in single or double quotes. (Bug#11392)

    • Using up-arrow for command-line recall in mysql could cause a segmentation fault. (Bug#10218)

    B.1.3. Changes in MySQL 4.1.23 (12 June 2007)

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    This is a bugfix release for the MySQL 4.1 release family.

    Functionality added or changed:

    • Incompatible Change: The prepared_stmt_count system variable has been converted to the Prepared_stmt_count global status variable (viewable with the SHOW GLOBAL STATUS statement). (Bug#23159)

    • Incompatible Change: Previously, the DATE_FORMAT() function returned a binary string. Now it returns a string with a character set and collation given by character_set_connection and collation_connection so that it can return month and weekday names containing non-ASCII characters. (Bug#22646)

    • Important Change: When using MERGE tables the definition of the MERGE table and the MyISAM tables are checked each time the tables are opened for access (including any SELECT or INSERT statement. Each table is compared for column order, types, sizes and associated. If there is a difference in any one of the tables then the statement will fail.

    • INSERT DELAYED statements on BLACKHOLE tables are now rejected, due to the fact that the BLACKHOLE storage engine does not support them. (Bug#27998)

    • The server now includes a timestamp in error messages that are logged as a result of unhandled signals (such as mysqld got signal 11 messages). (Bug#24878)

    • The --memlock option relies on system calls that are unreliable on some operating systems. If a crash occurs, the server now checks whether --memlock was specified and if so issues some information about possible workarounds. (Bug#22860)

    • If the user specified the server options --max-connections=N or --table-cache=M , a warning would be given in some cases that some values were recalculated, with the result that --table-cache could be assigned greater value.

      In such cases, both the warning and the increase in the --table-cache value were completely harmless. Note also that it is not possible for the MySQL Server to predict or to control limitations on the maximum number of open files, since this is determined by the operating system.

      The value of --table-cache is no longer increased automatically, and a warning is now given only if some values had to be decreased due to operating system limits. (Bug#21915)

    • mysqldump --single-transaction now uses START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */ rather than BEGIN to start a transaction, so that a consistent snapshot will be used on those servers that support it. (Bug#19660)

    • A dependency on the Intel runtime libraries existed in the shared-xxx RPMs for the IA-64 CPU of some versions of MySQL 4.1 (4.1.16, 4.1.20, and 4.1.22). This has been resolved. (Bug#18776)

    Bugs fixed:

    • Security Fix: The requirement of the DROP privilege for RENAME TABLE was not enforced. (Bug#27515, CVE-2007-2691)

    • Incompatible Change: INSERT DELAYED statements are not supported for MERGE tables, but the MERGE storage engine was not rejecting such statements, resulting in table corruption. Applications previously using INSERT DELAYED into MERGE table will break when upgrading to versions with this fix. To avoid the problem, remove DELAYED from such statements. (Bug#26464)

    • Incompatible Change: For ENUM columns that had enumeration values containing commas, the commas were mapped to 0xff internally. However, this rendered the commas indistinguishable from true 0xff characters in the values. This no longer occurs. However, the fix requires that you dump and reload any tables that have ENUM columns containing any true 0xff values. Dump the tables using mysqldump with the current server before upgrading from a version of MySQL 4.1 older than 4.1.23 to version 4.1.23 or newer. (Bug#24660)

    • MySQL Cluster: When an API node sent more than 1024 signals in a single batch, NDB would process only the first 1024 of these, and then hang. (Bug#28443)

    • MySQL Cluster: In some circumstances, shutting down the cluster could cause connected mysqld processes to crash. (Bug#25668)

    • MySQL Cluster: The management client command node_id STATUS displayed the message Node node_id: not connected when node_id was not the node ID of a data node.

      Note

      The ALL STATUS command in the cluster management client still displays status information for data nodes only. This is by design. See Section 15.7.2, “Commands in the MySQL Cluster Management Client”, for more information.

      (Bug#21715)

    • Replication: GRANT statements were not replicated if the server was started with the --replicate-ignore-table or --replicate-wild-ignore-table option. (Bug#25482)

    • Replication: Changes to the lc_time_names system variable were not replicated. (Bug#22645)

    • Replication: SQL statements close to the size of max_allowed_packet could produce binary log events larger than max_allowed_packet that could not be read by slave servers. (Bug#19402)

    • Replication: If a slave server closed its relay log (for example, due to an error during log rotation), the I/O thread did not recognize this and still tried to write to the log, causing a server crash. (Bug#10798)

    • Replication: Transient errors in replication from master to slave may trigger multiple Got fatal error 1236: 'binlog truncated in the middle of event' errors on the slave. (Bug#4053)

    • Cluster Replication: Some queries that updated multiple tables were not backed up correctly. (Bug#27748)

    • Cluster API: libndbclient.so was not versioned. (Bug#13522)

    • The mysqlserver.lib library on Windows had many missing symbols. (Bug#29007)

    • EXPLAIN for a query on an empty table immediately after its creation could result in a server crash. (Bug#28272)

    • The second execution of a prepared statement from a UNION query with ORDER BY RAND() caused the server to crash. (Bug#27937)

    • Changes to some system variables should invalidate statements in the query cache, but invalidation did not happen. (Bug#27792)

    • Comparisons using row constructors could fail for rows containing NULL values. (Bug#27704)

    • Incorrect results could be returned for some queries that contained a select list expression with IN or BETWEEN together with an ORDER BY or GROUP BY on the same expression using NOT IN or NOT BETWEEN. (Bug#27532)

    • The fix for Bug#17212 provided correct sort order for misordered output of certain queries, but caused significant overall query performance degradation. (Results were correct (good), but returned much more slowly (bad).) The fix also affected performance of queries for which results were correct. The performance degradation has been addressed. (Bug#27531)

    • Passing nested row expressions with different structures to an IN predicate caused a server crash. (Bug#27484)

    • The error message for error number 137 did not report which database/table combination reported the problem. (Bug#27173)

    • Storing NULL values in spatial fields caused excessive memory allocation and crashes on some systems. (Bug#27164)

    • In a MEMORY table, using a BTREE index to scan for updatable rows could lead to an infinite loop. (Bug#26996)

    • For MERGE tables defined on underlying tables that contained a short VARCHAR column (shorter than four characters), using ALTER TABLE on at least one but not all of the underlying tables caused the table definitions to be considered different from that of the MERGE table, even if the ALTER TABLE did not change the definition.

      In addition, when the underlying tables contained a TINYINT or CHAR(1) column, the MERGE storage engine incorrectly reported that they differed from the MERGE table in certain cases. (Bug#26881)

    • Added support for --debugger=dbx for mysql-test-run.pl and added support for --debugger=devenv, --debugger=DevEnv, and --debugger=/path/to/devenv. (Bug#26792)

    • The range optimizer could cause the server to run out of memory. (Bug#26625)

    • The range optimizer could consume a combinatorial amount of memory for certain classes of WHERE clauses. (Bug#26624)

    • For MyISAM tables, COUNT(*) could return an incorrect value if the WHERE clause compared an indexed TEXT column to the empty string (''). This happened if the column contained empty strings and also strings starting with control characters such as tab or newline. (Bug#26231)

    • LOAD DATA INFILE sent an okay to the client before writing the binary log and committing the changes to the table had finished, thus violating ACID requirements. (Bug#26050)

    • X() IS NULL and Y() IS NULL comparisons failed when X() and Y() returned NULL. (Bug#26038)

    • If a thread previously serviced a connection that was killed, excessive memory and CPU use by the thread occurred if it later serviced a connection that had to wait for a table lock. (Bug#25966)

    • Index hints (USE INDEX, IGNORE INDEX, FORCE INDEX) cannot be used with FULLTEXT indexes, but were not being ignored. (Bug#25951)

    • Running CHECK TABLE concurrently with a SELECT, INSERT or other statement on Windows could corrupt a MyISAM table. (Bug#25712)

    • In certain cases it could happen that deleting a row corrupted an RTREE index. This affected indexes on spatial columns. (Bug#25673)

    • The InnoDB parser sometimes did not account for null bytes, causing spurious failure of some queries. (Bug#25596)

    • mysql_stmt_fetch() did an invalid memory deallocation when used with the embedded server. (Bug#25492)

    • Referencing an ambiguous column alias in an expression in the ORDER BY clause of a query caused the server to crash. (Bug#25427)

    • perror crashed on some platforms due to failure to handle a NULL pointer. (Bug#25344)

    • Difficult repair or optimization operations could cause an assertion failure, resulting in a server crash. (Bug#25289)

    • A reference to a nonexistent column in the ORDER BY clause of an UPDATE ... ORDER BY statement could cause a server crash. (Bug#25126)

    • A return value of -1 from user-defined handlers was not handled well and could result in conflicts with server code. (Bug#24987)

    • Duplicate entries were not assessed correctly in a MEMORY table with a BTREE primary key on a utf8 ENUM column. (Bug#24985)

    • The result set of a query that used WITH ROLLUP and DISTINCT could lack some rollup rows (rows with NULL values for grouping attributes) if the GROUP BY list contained constant expressions. (Bug#24856)

    • Accessing a fixed record format table with a crashed key definition results in server/myisamchk segmentation fault. (Bug#24855)

    • mysqld_multi and mysqlaccess looked for option files in /etc even if the --sysconfdir option for configure had been given to specify a different directory. (Bug#24780)

    • Certain joins using Range checked for each record in the query execution plan could cause the server to crash. (Bug#24776)

    • If there was insufficient memory available to mysqld, this could sometimes cause the server to hang during startup. (Bug#24751)

    • Optimizations that are legal only for subqueries without tables and WHERE conditions were applied for any subquery without tables. (Bug#24670)

    • If an ORDER BY or GROUP BY list included a constant expression being optimized away and, at the same time, containing single-row subselects that returned more that one row, no error was reported. If a query required sorting by expressions containing single-row subselects that returned more than one row, execution of the query could cause a server crash. (Bug#24653)

    • For ALTER TABLE, using ORDER BY expression could cause a server crash. Now the ORDER BY clause allows only column names to be specified as sort criteria (which was the only documented syntax, anyway). (Bug#24562)

    • mysqltest crashed with a stack overflow. (Bug#24498)

    • Attempts to access a MyISAM table with a corrupt column definition caused a server crash. (Bug#24401)

    • ALTER ENABLE KEYS or ALTER TABLE DISABLE KEYS combined with another ALTER TABLE option other than RENAME TO did nothing. In addition, if ALTER TABLE was used on a table having disabled keys, the keys of the resulting table were enabled. (Bug#24395)

    • When opening a corrupted .frm file during a query, the server crashes. (Bug#24358)

    • The --extern option for mysql-test-run.pl did not function correctly. (Bug#24354)

    • The MERGE storage engine could return incorrect results when several index values that compare equality were present in an index (for example, 'gross' and 'gross ', which are considered equal but have different lengths). (Bug#24342)

    • Foreign key identifiers for InnoDB tables could not contain certain characters. (Bug#24299)

    • ALTER TABLE statements that performed both RENAME TO and {ENABLE|DISABLE} KEYS operations caused a server crash. (Bug#24219)

    • There was a race condition in the InnoDB fil_flush_file_spaces() function. (Bug#24089)

      This regression was introduced by Bug#15653.

    • Hebrew-to-Unicode conversion failed for some characters. Definitions for the following Hebrew characters (as specified by the ISO/IEC 8859-8:1999) were added: LEFT-TO-RIGHT MARK (LRM), RIGHT-TO-LEFT MARK (RLM) (Bug#24037)

    • The server was built even when configure was run with the --without-server option. (Bug#23973)

      See also Bug#32898.

    • ISNULL(DATE(NULL)) and ISNULL(CAST(NULL AS DATE)) erroneously returned false. (Bug#23938)

    • Using CAST() to convert DATETIME values to numeric values did not work. (Bug#23656)

    • LAST_DAY('0000-00-00') could cause a server crash. (Bug#23653)

    • DOUBLE values such as 20070202191048.000000 were being treated as illegal arguments by WEEK(). (Bug#23616)

    • The stack size for NetWare binaries was increased to 128KB to prevent problems caused by insufficient stack size. (Bug#23504)

    • If elements in a nontop-level IN subquery were accessed by an index and the subquery result set included a NULL value, the quantified predicate that contained the subquery was evaluated to NULL when it should return a non-NULL value. (Bug#23478)

    • User-defined variables could consume excess memory, leading to a crash caused by the exhaustion of resources available to the MEMORY storage engine, due to the fact that this engine is used by MySQL for variable storage and intermediate results of GROUP BY queries. Where SET had been used, such a condition could instead give rise to the misleading error message You may only use constant expressions with SET, rather than Out of memory (Needed NNNNNN bytes). (Bug#23443)

    • For ODBC compatibility, MySQL supports use of WHERE col_name IS NULL for DATE 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#23412)

    • The arguments to the ENCODE() and the DECODE() functions were not printed correctly, causing problems in the output of EXPLAIN EXTENDED and in view definitions. (Bug#23409)

    • A table created with the ROW_FORMAT = FIXED table option lost the option if an index was added or dropped with CREATE INDEX or DROP INDEX. (Bug#23404)

    • For not-yet-authenticated connections, the Time column in SHOW PROCESSLIST was a random value rather than NULL. (Bug#23379)

    • A deadlock could occur, with the server hanging on Closing tables, with a sufficient number of concurrent INSERT DELAYED, FLUSH TABLES, and ALTER TABLE operations. (Bug#23312)

    • MySQL failed to build on Linux/Alpha. (Bug#23256)

      This regression was introduced by Bug#21250.

    • If COMPRESS() returned NULL, subsequent invocations of COMPRESS() within a result set or within a trigger also returned NULL. (Bug#23254)

    • NOW() returned the wrong value in statements executed at server startup with the --init-file option. (Bug#23240)

    • If there was insufficient memory to store or update a blob record in a MyISAM table then the table will marked as crashed. (Bug#23196)

    • A compressed MyISAM table that became corrupted could crash myisamchk and possibly the MySQL Server. (Bug#23139)

    • The number of setsockopt() calls performed for reads and writes to the network socket was reduced to decrease system call overhead. (Bug#22943)

    • mysql did not check for errors when fetching data during result set printing. (Bug#22913)

    • InnoDB exhibited thread thrashing with more than 50 concurrent connections under an update-intensive workload. (Bug#22868)

    • The return value from my_seek() was ignored. (Bug#22828)

    • The Handler_rollback status variable sometimes was incremented when no rollback had taken place. (Bug#22728)

    • SET lc_time_names = value allowed only exact literal values, not expression values. (Bug#22647)

    • Storing values specified as hexadecimal values 64 or more bits long into BIGINT or BIGINT UNSIGNED columns did not raise any warning or error if the value was out of range. (Bug#22533)

    • Queries using a column alias in an expression as part of an ORDER BY clause failed, an example of such a query being SELECT mycol + 1 AS mynum FROM mytable ORDER BY 30 - mynum. (Bug#22457)

    • SHOW COLUMNS reported some NOT NULL columns as NULL. (Bug#22377)

    • A server crash occurred when using LOAD DATA to load a table containing a NOT NULL spatial column, when the statement did not load the spatial column. Now a NULL supplied to NOT NULL column error occurs. (Bug#22372)

    • Some small double precision numbers (such as 1.00000001e-300) that should have been accepted were truncated to zero. (Bug#22129)

    • Changing the value of MI_KEY_BLOCK_LENGTH in myisam.h and recompiling MySQL resulted in a myisamchk that saw existing MyISAM tables as corrupt. (Bug#22119)

    • A crash of the MySQL Server could occur when unpacking a BLOB column from a row in a corrupted MyISAM table. This could happen when trying to repair a table using either REPAIR TABLE or myisamchk; it could also happen when trying to access such a “broken” row using statements like SELECT if the table was not marked as crashed. (Bug#22053)

    • Trailing spaces were not removed from Unicode CHAR column values when used in indexes. This resulted in excessive usage of storage space, and could affect the results of some ORDER BY queries that made use of such indexes.

      Note

      When upgrading, it is necessary to re-create any existing indexes on Unicode CHAR columns in order to take advantage of the fix. This can be done by using a REPAIR TABLE statement on each affected table.

      (Bug#22052)

    • STR_TO_DATE() returned NULL if the format string contained a space following a nonformat character. (Bug#22029)

    • Adding a day, month, or year interval to a DATE value produced a DATE, but adding a week interval produced a DATETIME value. Now all produce a DATE value. (Bug#21811)

    • It was possible to use DATETIME values whose year, month, and day parts were all zeroes but whose hour, minute, and second parts contained nonzero values, an example of such an illegal DATETIME being '0000-00-00 11:23:45'.

      Note

      This fix was reverted in MySQL 4.1.24.

      (Bug#21789)

      See also Bug#25301.

    • Through the C API, the member strings in MYSQL_FIELD for a query that contains expressions may return incorrect results. (Bug#21635)

    • When updating a table that used a JOIN of the table itself (for example, when building trees) and the table was modified on one side of the expression, the table would either be reported as crashed or the wrong rows in the table would be updated. (Bug#21310)

    • InnoDB: During a restart of the MySQL Server that followed the creation of a temporary table using the InnoDB storage engine, MySQL failed to clean up in such a way that InnoDB still attempted to find the files associated with such tables. (Bug#20867)

    • Selecting into variables sometimes returned incorrect wrong results. (Bug#20836)

    • Range searches on columns with an index prefix could miss records. (Bug#20732)

    • Some long error messages were printed incorrectly. (Bug#20710)

    • The creation of MySQL system tables was not checked for by mysql-test-run.pl. (Bug#20166)

    • The BUILD/check-cpu script did not recognize Celeron processors. (Bug#20061)

    • ORDER BY values of the DOUBLE or DECIMAL types could change the result returned by a query. (Bug#19690)

    • mysqltest incorrectly tried to retrieve result sets for some queries where no result set was available. (Bug#19410)

    • The server could send incorrect column count information to the client for queries that produce a larger number of columns than can fit in a two-byte number. (Bug#19216)

    • The server might fail to use an appropriate index for DELETE when ORDER BY, LIMIT, and a nonrestricting WHERE are present. (Bug#17711)

    • mysql_fix_privilege_tables did not accept a password containing embedded space or apostrophe characters. (Bug#17700)

    • mysql would lose its connection to the server if its standard output was not writable. (Bug#17583)

    • No warning was issued for use of the DATA DIRECTORY or INDEX DIRECTORY table options on a platform that does not support them. (Bug#17498)

    • mysql-test-run did not work correctly for RPM-based installations. (Bug#17194)

    • IN() and CHAR() can return NULL, but did not signal that to the query processor, causing incorrect results for IS NULL operations. (Bug#17047)

    • Conversion of DATETIME values in numeric contexts sometimes did not produce a double (YYYYMMDDHHMMSS.uuuuuu) value. (Bug#16546)

    • InnoDB showed substandard performance with multiple queries running concurrently. (Bug#15815)

    • For BOOLEAN mode full-text searches on nonindexed columns, NULL rows generated by a LEFT JOIN caused incorrect query results. (Bug#14708, Bug#25637)

    • mysqldump --order-by-primary failed if the primary key name was an identifier that required quoting. (Bug#13926)

    • INSERT...ON DUPLICATE KEY UPDATE could cause Error 1032: Can't find record in ... for inserts into an InnoDB table unique index using key column prefixes with an underlying utf8 string column. (Bug#13191)

    • Lack of validation for input and output TIME values resulted in several problems: SEC_TO_TIME() in some cases did not clip large values to the TIME range appropriately; SEC_TO_TIME() treated BIGINT UNSIGNED values as signed; only truncation warnings were produced when both truncation and out-of-range TIME values occurred. (Bug#11655, Bug#20927)

    • Metadata for columns calculated from scalar subqueries was limited to integer, double, or string, even if the actual type of the column was different. (Bug#11032)

    • The internal functions for table preparation, creation, and alteration were not re-execution friendly, causing problems in code that: repeatedly altered a table; repeatedly created and dropped a table; opened and closed a cursor on a table, altered the table, and then reopened the cursor; used ALTER TABLE to change a table's current AUTO_INCREMENT value; created indexes on utf8 columns.

      Re-execution of CREATE DATABASE, CREATE TABLE, and ALTER TABLE statements as prepared statements also caused incorrect results or crashes. (Bug#4968, Bug#6895, Bug#19182, Bug#19733, Bug#22060, Bug#24879)

    B.1.4. Changes in MySQL 4.1.22 (02 November 2006)

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    This is a bugfix release for the MySQL 4.1 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:

    Bugs fixed:

    • MySQL Cluster: Packaging: 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)

    • MySQL Cluster: Backup of a cluster failed if there were any tables with 128 or more columns. (Bug#23502)

    • MySQL Cluster: INSERT ... ON DUPLICATE KEY UPDATE on an NDB table could lead to deadlocks and memory leaks. (Bug#23200)

    • MySQL Cluster: If a node restart could not be performed from the REDO log, no node takeover took place. This could cause partitions to be left empty during a system restart. (Bug#22893)

    • MySQL Cluster: Multiple node restarts in rapid succession could cause a system restart to fail , or induce a race condition. (Bug#22892, Bug#23210)

    • MySQL Cluster: (NDB API): Attempting to read a nonexistent tuple using Commit mode for NdbTransaction::execute() caused node failures. (Bug#22672)

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

    • MySQL Cluster: The node recovery algorithm was missing a version check for tables in the ALTER_TABLE_COMMITTED state (as opposed to the TABLE_ADD_COMMITTED state, which has the version check). This could cause inconsistent schemas across nodes following node recovery. (Bug#21756)

    • MySQL Cluster: The server provided a nondescriptive error message when encountering a fatally corrupted REDO log. (Bug#21615)

    • MySQL Cluster: The output for the --help option used with NDB executable programs (such as ndbd, ndb_mgm, ndb_restore, ndb_config, and others mentioned in Section 15.6, “MySQL Cluster Programs”) referred to the Ndb.cfg file, instead of to my.cnf. (Bug#21585)

    • MySQL Cluster: A partial rollback could lead to node restart failures. (Bug#21536)

    • MySQL Cluster: The ndb_mgm management client did not set the exit status on errors, always returning 0 instead. (Bug#21530)

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

    • MySQL Cluster: Attempting to create an NDB table on a MySQL with an existing non-Cluster table with the same name in the same database could result in data loss or corruption. MySQL now issues a warning when a SHOW TABLES or other statement causing table discovery finds such a table. (Bug#21378)

    • MySQL Cluster: Cluster logs were not rotated following the first rotation cycle. (Bug#21345)

    • MySQL 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 the same node group to shut down. (Bug#21213)

    • MySQL Cluster: The ndb_size.pl script did not account for TEXT and BLOB column values correctly. (Bug#21204)

    • MySQL Cluster: When inserting a row into an NDB table with a duplicate value for a nonprimary unique key, the error issued would reference the wrong key. (Bug#21072)

    • MySQL Cluster: Some queries involving joins on very large NDB tables could crash the MySQL server. (Bug#21059)

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

    • MySQL Cluster: Under some circumstances, local checkpointing would hang, keeping any unstarted nodes from being started. (Bug#20895)

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

    • MySQL Cluster: ndb_size.pl and ndb_error_reporter were missing from RPM packages. (Bug#20426)

    • MySQL Cluster: In some cases where SELECT COUNT(*) from an NDB table should have yielded an error, MAX_INT was returned instead. (Bug#19914)

    • MySQL Cluster: ndb_restore did not always make clear that it had recovered successfully from temporary errors while restoring a cluster backup. (Bug#19651)

    • MySQL Cluster: The server failed with a nondescriptive error message when out of data memory. (Bug#18475)

    • MySQL Cluster: SELECT ... FOR UPDATE failed to lock the selected rows. (Bug#18184)

    • MySQL Cluster: A problem with takeover during a system restart caused ordered indexes to be rebuilt incorrectly. (Bug#15303)

    • Insufficient memory (myisam_sort_buffer_size) could cause a server crash for several operations on MyISAM tables: repair table, create index by sort, repair by sort, parallel repair, bulk insert. (Bug#23175)

    • REPAIR TABLE ... USE_FRM could cause a server crash or hang when used for a MyISAM table in a database other than the default database. (Bug#22562)

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

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

    • Execution of a prepared statement that uses an IN subquery with aggregate functions in the HAVING clause could cause a server crash. (Bug#22085)

    • Running SHOW MASTER LOGS at the same time as binary log files were being switched would cause mysqld to hang. (Bug#21965)

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

    • The optimizer sometimes mishandled R-tree indexes for GEOMETRY data types, resulting in a server crash. (Bug#21888)

    • A query that used GROUP BY and an ALL or ANY quantified subquery in a HAVING clause could trigger an assertion failure. (Bug#21853)

    • COUNT(*) queries with ORDER BY and LIMIT could return the wrong result.

      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 nongroup queries with aggregate functions. The current fix disables the optimization in such cases.

      (Bug#21787)

    • Redundant binary log LAST_INSERT_ID events could be generated; LAST_INSERT_ID(expr) did not return the value of expr; LAST_INSERT_ID() could return the value generated by the current statement if the call occurred after value generation, as in:

      CREATE TABLE t1 (i INT AUTO_INCREMENT PRIMARY KEY, j INT);
      INSERT INTO t1 VALUES (NULL, 0), (NULL, LAST_INSERT_ID());
      

      (Bug#21726)

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

    • For INSERT ... ON DUPLICATE KEY UPDATE, use of VALUES(col_name) within the UPDATE clause sometimes was handled incorrectly. (Bug#21555)

    • EXPORT_SET() did not accept arguments with coercible character sets. (Bug#21531)

    • Adding ORDER BY to a SELECT DISTINCT(expr) query could produce incorrect results. (Bug#21456)

    • Table aliases in multiple-table DELETE statements sometimes were not resolved. (Bug#21392)

    • For multiple-table UPDATE statements, storage engines were not notified of duplicate-key errors. (Bug#21381)

    • Within a prepared statement, SELECT (COUNT(*) = 1) (or similar use of other aggregate functions) did not return the correct result for statement re-execution. (Bug#21354)

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

    • Under heavy load (executing more than 1024 simultaneous complex queries), a problem in the code that handles internal temporary tables could lead to writing beyond allocated space and memory corruption. (Bug#21206)

    • A subquery that uses an index for both the WHERE and ORDER BY clauses produced an empty result. (Bug#21180)

    • Certain malformed INSERT statements could crash the mysql client. (Bug#21142)

    • Creating a TEMPORARY table with the same name as an existing table that was locked by another client could result in a lock conflict for DROP TEMPORARY TABLE because the server unnecessarily tried to acquire a name lock. (Bug#21096)

    • For InnoDB tables, the server could crash when executing NOT IN(...) subqueries. (Bug#21077)

    • The myisam_stats_method variable was mishandled when set from an option file or on the command line. (Bug#21054)

    • A query using WHERE column = constant OR column IS NULL did not return consistent results on successive invocations. The column 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)

    • A query using WHERE NOT (column < ANY (subquery)) yielded a different result from the same query using the same column and subquery with WHERE (column > ANY (subquery)). (Bug#20975)

    • Under certain circumstances, AVG(key_val) returned a value but MAX(key_val) returned an empty set due to incorrect application of MIN()/MAX() optimization. (Bug#20954)

    • Using ALTER TABLE to add an ENUM column with an enumeration value containing 0xFF caused the name of the first table column to be lost. (Bug#20922)

    • WITH ROLLUP could group unequal values. (Bug#20825)

    • Using aggregate functions in subqueries yielded incorrect results under certain circumstances due to incorrect application of MIN()/MAX() optimization. (Bug#20792)

    • mysql_install_db incorrectly had a blank first line. (Bug#20721)

    • Character set collation was ignored in GROUP BY clauses. (Bug#20709)

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

    • LIKE searches failed for indexed utf8 character columns. (Bug#20471)

    • User names have a maximum length of 16 characters (even if they contain multi-byte characters), but were being truncated to 16 bytes. (Bug#20393)

    • PROCEDURE ANALYSE() returned incorrect values of M FLOAT(M, D) and DOUBLE(M, D). (Bug#20305)

    • SUBSTRING() results sometimes were stored improperly into a temporary table when multi-byte character sets were used. (Bug#20204)

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

    • mysqld --flush failed to flush MyISAM table changes to disk following an UPDATE statement for which no updated column had an index. (Bug#20060)

    • libmysqld returned TEXT columns to the client as number of bytes, not number of characters (which can be different for multi-byte character sets). (Bug#19983)

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

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

    • For a MyISAM table with a FULLTEXT index, compression with myisampack or a check with myisamchk after compression resulted in table corruption. (Bug#19702)

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

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

    • DELETE IGNORE could hang for foreign key parent deletes. (Bug#18819)

    • Using > ALL with subqueries that return no rows yielded incorrect results under certain circumstances due to incorrect application of MIN()/MAX() optimization. (Bug#18503)

    • Multiple invocations of the REVERSE() function could return different results. (Bug#18243)

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

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

    • Use of the join cache in favor of an index for ORDER BY operations could cause incorrect result sorting. (Bug#17212)

    • Queries containing a subquery that used aggregate functions could return incorrect results. (Bug#16792)

    • Conversion of TIMESTAMP values between UTC and the local time zone resulted in some values having the year 2069 rather than 1969. (Bug#16327)

    • Using ANY with “nontable” subqueries such as SELECT 1 yielded incorrect results under certain circumstances due to incorrect application of MIN()/MAX() optimization. (Bug#16302)

    • Parallel builds occasionally failed on Solaris. (Bug#16282)

    • A subquery in the WHERE clause of the outer query and using IN and GROUP BY returned an incorrect result. (Bug#16255)

    • The --collation-server server option was being ignored. With the fix, if you choose a nondefault character set with --character-set-server, you should also use --collation-server to specify the collation. (Bug#15276)

    • When using tables containing VARCHAR columns created under MySQL 4.1 with a 5.0 or later server, for some queries the metadata sent to the client could have an empty column name. (Bug#14897)

    • The use of WHERE col_name IS NULL in SELECT statements reset the value of LAST_INSERT_ID() to zero. (Bug#14553)

    • A literal string in a GROUP BY clause could be interpreted as a column name. (Bug#14019)

    • libmysqld produced some warnings to stderr which could not be silenced. These warnings now are suppressed. (Bug#13717)

    • The source distribution failed to compile when configured with the --without-geometry option. (Bug#12991)

    • On Mac OS X, zero-byte read() or write() calls to an SMB-mounted file system could return a nonstandard return value, leading to data corruption. Now such calls are avoided. (Bug#12620)

    • Entries in the slow query log could have an incorrect Rows_examined value. (Bug#12240)

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

    • DELETE with WHERE condition on a BTREE-indexed column for a MEMORY table deleted only the first matched row. (Bug#9719)

    • A server or network failure with an open client connection would cause the client to hang even though the server was no longer available.

      As a result of this change, the MYSQL_OPT_READ_TIMEOUT and MYSQL_OPT_WRITE_TIMEOUT options for mysql_options() now apply to TCP/IP connections on all platforms. Previously, they applied only to Windows. (Bug#9678)

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

    • FROM_UNIXTIME() did not accept arguments up to POWER(2,31)-1, which it had previously. (Bug#9191)

    • The result for CAST() when casting a value to UNSIGNED was limited to the maximum signed BIGINT value (9223372036854775808), rather than the maximum unsigned value (18446744073709551615). (Bug#8663)

    • OPTIMIZE TABLE with myisam_repair_threads > 1 could result in MyISAM table corruption. (Bug#8283)

    • For cross-database multiple-table UPDATE statements, a user with all privileges for the default database could update tables in another database for which the user did not have UPDATE privileges. (Bug#7391)

    • The --with-collation option was not honored for client connections. (Bug#7192)

    • Incorporated portability fixes into the definition of __attribute__ in my_global.h. (Bug#2717)

    • A patch fixing the omission of leading zeros in dates in MySQL 4.1.21 was reverted.

      The patch for the following bugs was reverted: Bug#16377.

    B.1.5. Changes in MySQL 4.1.21 (19 July 2006)

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    This is a bugfix release for the MySQL 4.1 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:

    Bugs fixed:

    • Security Fix: Invalid arguments to DATE_FORMAT() caused a server crash. Thanks to Jean-David Maillefer for discovering and reporting this problem to the Debian project and to Christian Hammers from the Debian Team for notifying us of it. (Bug#20729, CVE-2006-3469)

    • Security Fix: On Linux, and possibly other platforms using case-sensitive file systems, 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. (Bug#17647, CVE-2006-4226)

    • 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, CVE-2006-4031)

    • MySQL Cluster: The repeated creating and dropping of a table would eventually lead to NDB Error 826, Too many tables and attributes ... Insufficient space. (Bug#20847)

    • MySQL Cluster: When attempting to restart the cluster following a data import, the cluster failed during Phase 4 of the restart with Error 2334: Job buffer congestion. (Bug#20774)

    • MySQL Cluster: The ndb_mgm client command ALL CLUSTERLOG STATISTICS=15 had no effect. (Bug#20336)

    • MySQL Cluster: A node failure during a scan could sometime cause the node to crash when restarting too quickly following the failure. (Bug#20197)

    • MySQL Cluster: The failure of a data node when preparing to commit a transaction (that is, while the node's status was CS_PREPARE_TO_COMMIT) could cause the failure of other cluster data nodes. (Bug#20185)

    • MySQL Cluster: Renaming a table in such a way as to move it to a different database failed to move the table's indexes. (Bug#19967)

    • MySQL Cluster: The cluster's data nodes failed while trying to load data when NoOfFrangmentLogFiles was set equal to 1. (Bug#19894)

    • MySQL Cluster: Resources for unique indexes on Cluster table columns were incorrectly allocated, so that only one-fourth as many unique indexes as indicated by the value of UniqueHashIndexes could be created. (Bug#19623)

    • MySQL Cluster: (NDBAPI): On big-endian platforms, NdbOperation::write_attr() did not update 32-bit fields correctly. (Bug#19537)

    • MySQL Cluster: LOAD DATA LOCAL failed to ignore duplicate keys in Cluster tables. (Bug#19496)

    • MySQL Cluster: A problem with error handling when ndb_use_exact_count was enabled could lead to incorrect values returned from queries using COUNT(). A warning is now returned in such cases. (Bug#19202)

    • MySQL Cluster: TRUNCATE failed on tables having BLOB or TEXT columns with the error Lock wait timeout exceeded. (Bug#19201)

    • MySQL Cluster: It was possible to use port numbers greater than 65535 for ServerPort in the config.ini file. (Bug#19164)

    • MySQL Cluster: TRUNCATE TABLE failed to reset the AUTO_INCREMENT counter. (Bug#18864)

    • MySQL Cluster: Repeated CREATE - INSERT - DROP operations on tables could in some circumstances cause the MySQL table definition cache to become corrupt, so that some mysqld processes could access table information but others could not. (Bug#18595)

    • MySQL Cluster: Repeated use of the SHOW and ALL STATUS commands in the ndb_mgm client could cause the mgmd process to crash. (Bug#18591)

    • MySQL Cluster: Some queries having a WHERE clause of the form c1=val1 OR c2 LIKE 'val2' were not evaluated correctly. (Bug#17421)

    • MySQL Cluster: An issue with ndb_mgmd prevented more than 27 mysqld processes from connecting to a single cluster at one time. (Bug#17150)

    • MySQL Cluster: Using “stalemysqld .FRM files could cause a newly-restored cluster to fail. This situation could arise when restarting a MySQL Cluster using the --initial option while leaving connected mysqld processes running. (Bug#16875)

    • MySQL 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 nondefault character sets or collations. (Bug#14918)

    • MySQL Cluster: Data node failures could cause excessive CPU usage by ndb_mgmd. (Bug#13987)

    • Replication: The binary log would create an incorrect DROP query when creating temporary tables during replication. (Bug#17263)

    • Failure to account for a NULL table pointer on big-endian machines could cause a server crash during type conversion. (Bug#21135)

    • Closing of temporary tables failed if binary logging was not enabled. (Bug#20919)

    • The fill_help_tables.sql file did not contain a SET NAMES 'utf8' statement to indicate its encoding. This caused problems for some settings of the MySQL character set such as big5. (Bug#20551)

    • The fill_help_tables.sql file did not load properly if the ANSI_QUOTES SQL mode was enabled. (Bug#20542)

    • The mysql client did not ignore client-specific commands (such as use or help) that occurred as the first word on a line within multiple-line /* ... */ comments. (Bug#20432)

    • Queries using an indexed column as the argument for the MIN() and MAX() functions following an ALTER TABLE .. DISABLE KEYS statement returned Got error 124 from storage engine until ALTER TABLE ... ENABLE KEYS was run on the table. (Bug#20357)

    • The mysql client did not understand help commands that had spaces at the end. (Bug#20328)

    • Improper character set initialization in the embedded server could result in a server crash. (Bug#20318)

    • For a DATE parameter sent via a MYSQL_TIME data structure, mysql_stmt_execute() zeroed the hour, minute, and second members of the structure rather than treating them as read-only. (Bug#20152)

    • A number of dependency issues in the RPM bench and test packages caused installation of these packages to fail. (Bug#20078)

    • Use of MIN() or MAX() with GROUP BY on a ucs2 column could cause a server crash. (Bug#20076)

    • Using SELECT on a corrupt MyISAM table using the dynamic record format could cause a server crash. (Bug#19835)

    • InnoDB unlocked its data directory before committing a transaction, potentially resulting in nonrecoverable tables if a server crash occurred before the commit. (Bug#19727)

    • A cast problem caused incorrect results for prepared statements that returned float values when MySQL was compiled with gcc 4.0. (Bug#19694)

    • InnoDB failed to increment the handler_read_prev counter. (Bug#19542)

    • Repeated DROP TABLE statements in a stored procedure could sometimes cause the server to crash. (Bug#19399)

    • Multiple-table DELETE statements containing a subquery that selected from one of the tables being modified caused a server crash. (Bug#19225)

    • Use of uninitialized user variables in a subquery in the FROM clause resulted in invalid entries in the binary log. (Bug#19136)

    • The MySQL server startup script /etc/init.d/mysql (created from mysql.server) is now marked to ensure that the system services ypbind, nscd, ldap, and NTP are started first (if these are configured on the machine). (Bug#18810)

    • mysqldump did not respect the order of tables named with the --tables option. (Bug#18536)

    • MONTHNAME(STR_TO_DATE(NULL, '%m')) could cause a server crash. (Bug#18501)

    • 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#18359, Bug#16674)

    • The use of MIN() and MAX() on columns with an index prefix produced incorrect results in some queries. (Bug#18206)

    • An update that used a join of a table to itself and modified the table on both sides of the join reported the table as crashed. (Bug#18036)

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

    • For a reference to a nonexistent index in FORCE INDEX, the error message referred to a column, not an index. (Bug#17873)

    • Slave SQL thread cleanup was not handled properly on Mac OS X when a statement was killed, resulting in a slave crash. (Bug#16900)

    • The ref optimizer could choose the ref_or_null access method in cases where it was not applicable. This could cause inconsistent EXPLAIN or SELECT results for a given statement. (Bug#16798)

    • Concatenating the results of multiple constant subselects produced incorrect results. (Bug#16716)

    • IS_USED_LOCK() could return an incorrect connection identifier. (Bug#16501)

    • 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 omission of leading zeros in dates could lead to erroneous results when these were compared with the output of certain date and time functions.

      Note

      The patch for this bug was reverted in MySQL 4.1.22.

      (Bug#16377)

    • Concurrent reading and writing of privilege structures could crash the server. (Bug#16372)

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

    • Some memory leaks in the libmysqld embedded server were corrected. (Bug#16017)

    • When mysqldump disabled keys and locked a MyISAM table, the lock operation happened second. If another client performed a query on the table in the interim, it could take a long time due to indexes not being used. Now the lock operation happens first. (Bug#15977)

    • The server no longer uses a signal handler for signal 0 because it could cause a crash on some platforms. (Bug#15869)

    • The ARCHIVE storage engine does not support TRUNCATE TABLE, but the server was not returning an appropriate error when truncation of an ARCHIVE table was attempted. (Bug#15558)

    • The MD5() and SHA() functions treat their arguments as case-sensitive strings. But when they are compared, their arguments were compared as case-insensitive strings, which leads to two function calls with different arguments (and thus different results) compared as being identical. This can lead to a wrong decision made in the range optimizer and thus to an incorrect result set. (Bug#15351)

    • Invalid escape sequences in option files caused MySQL programs that read them to abort. (Bug#15328)

    • ANALYZE TABLE for TEMPORARY tables had no effect. (Bug#15225)

    • A statement containing GROUP BY and HAVING clauses could return incorrect results when the HAVING clause contained logic that returned FALSE for every row. (Bug#14927)

    • An invalid comparison between keys with index prefixes over multi-byte character fields could lead to incorrect result sets if the selected query execution plan used a range scan by an index prefix over a UTF8 character field. This also caused incorrect results under similar circumstances with many other character sets. (Bug#14896)

    • SHOW CREATE TABLE did not display the AUTO_INCREMENT column attribute if the SQL mode was MYSQL323 or MYSQL40. This also affected mysqldump, which uses SHOW CREATE TABLE to get table definitions. (Bug#14515)

    • Using SELECT and a table join while running a concurrent INSERT operation would join incorrect rows. (Bug#14400)

    • The binary log lacked character set information for table names when dropping temporary tables. (Bug#14157)

    • DATE_ADD() and DATE_SUB() returned NULL when the result date was on the day '9999-12-31'. (Bug#12356)

    • For very complex SELECT statements could create temporary tables that were too large, and for which the temporary files were not removed, causing subsequent queries to fail. (Bug#11824)

    • LOAD_FILE() returned an error if the file did not exist, rather than NULL as it should according to the manual. (Bug#10418)

    • When myisamchk needed to rebuild a table, AUTO_INCREMENT information was lost. (Bug#10405)

    • INSERT INTO ... SELECT ... LIMIT 1 could be slow because the LIMIT was ignored when selecting candidate rows. (Bug#9676)

    • The DATA DIRECTORY table option did not work for TEMPORARY tables. (Bug#8706)

    • No error message was being issued for storage engines that do not support ALTER TABLE. Now an ER_NOT_SUPPORTED_YET error occurs. (Bug#7643)

    • In a multiple-row INSERT statement, LAST_INSERT_ID() should return the same value for each row. However, in some cases, the value could change if the table being inserted into had its own AUTO_INCREMENT column. (Bug#6880)

    • Some queries that used ORDER BY and LIMIT performed quickly in MySQL 3.23, but slowly in MySQL 4.x/5.x due to an optimizer problem. (Bug#4981)

    B.1.6. Changes in MySQL 4.1.20 (24 May 2006)

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    This is a security fix release for the MySQL 4.1 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.

    Bugs fixed:

    • Security Fix: An SQL-injection security hole has been found in multi-byte encoding processing. The bug was in the server, incorrectly parsing the string escaped with the mysql_real_escape_string() C API function.

      This vulnerability was discovered and reported by Josh Berkus and Tom Lane as part of the inter-project security collaboration of the OSDB consortium. For more information about SQL injection, please see the following text.

      Discussion.  An SQL injection security hole has been found in multi-byte encoding processing. An SQL injection security hole can include a situation whereby when a user supplied data to be inserted into a database, the user might inject SQL statements into the data that the server will execute. With regards to this vulnerability, when character set-unaware escaping is used (for example, addslashes() in PHP), it is possible to bypass the escaping in some multi-byte character sets (for example, SJIS, BIG5 and GBK). As a result, a function such as addslashes() is not able to prevent SQL-injection attacks. It is impossible to fix this on the server side. The best solution is for applications to use character set-aware escaping offered by a function such mysql_real_escape_string().

      However, a bug was detected in how the MySQL server parses the output of mysql_real_escape_string(). As a result, even when the character set-aware function mysql_real_escape_string() was used, SQL injection was possible. This bug has been fixed.

      Workarounds.  If you are unable to upgrade MySQL to a version that includes the fix for the bug in mysql_real_escape_string() parsing, but run MySQL 5.0.1 or higher, you can use the NO_BACKSLASH_ESCAPES SQL mode as a workaround. (This mode was introduced in MySQL 5.0.1.) NO_BACKSLASH_ESCAPES enables an SQL standard compatibility mode, where backslash is not considered a special character. The result will be that queries will fail.

      To set this mode for the current connection, enter the following SQL statement:

      SET sql_mode='NO_BACKSLASH_ESCAPES';
      

      You can also set the mode globally for all clients:

      SET GLOBAL sql_mode='NO_BACKSLASH_ESCAPES';
      

      This SQL mode also can be enabled automatically when the server starts by using the command-line option --sql-mode=NO_BACKSLASH_ESCAPES or by setting sql-mode=NO_BACKSLASH_ESCAPES in the server option file (for example, my.cnf or my.ini, depending on your system). (Bug#8378, CVE-2006-2753)

      See also Bug#8303.

    • Replication: The dropping of a temporary table whose name contained a backtick ('`') character was not correctly written to the binary log, which also caused it not to be replicated correctly. (Bug#19188)

    • The client libraries were not compiled for position-independent code on Solaris-SPARC and AMD x86_64 platforms. (Bug#18091, Bug#13159, Bug#14202)

    • RPM packages had spurious dependencies on Perl modules and other programs. (Bug#13634)

    • Running myisampack followed by myisamchk with the --unpack option would corrupt the auto_increment key. (Bug#12633)

    • The patch for Bug#8303 broke the fix for Bug#8378 and was reverted.

      In string literals with an escape character (\) followed by a multi-byte character that had (\) as its second byte, the literal was not interpreted correctly. Now only next byte now is escaped, and not the entire multi-byte character. This means it is a strict reverse of the mysql_real_escape_string() function.

    B.1.7. Changes in MySQL 4.1.19 (29 April 2006)

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    This release includes the patches for recently reported security vulnerabilites in the MySQL client-server protocol. We would like to thank Stefano Di Paola for finding and reporting these to us.

    Functionality added or changed:

    • Security Enhancement: Added the global max_prepared_stmt_count system variable to limit the total number of prepared statements in the server. This limits the potential for denial-of-service attacks based on running the server out of memory by preparing huge numbers of statements. The current number of prepared statements is available through the prepared_stmt_count system variable. (Bug#16365)

    • Packaging: The MySQL-shared-compat-4.1.X-.i386.rpm shared compatibility RPMs no longer contain libraries for MySQL 5.0 and up. They now contain libraries for MySQL 3.23, 4.0, and 4.1.1 only. (Bug#19288)

    • New charset command added to mysql command-line client. By typing charset name or \C name (such as \C UTF8), the client character set can be changed without reconnecting. (Bug#16217)

    • InnoDB now caches a list of unflushed files instead of scanning for unflushed files during a table flush operation. This improves performance when --innodb_file_per_table is set on a system with a large number of InnoDB tables. (Bug#15653)

    • When using the GROUP_CONCAT() function where the group_concat_max_len system variable was greater than 512, the type of the result was BLOB only if the query included an ORDER BY clause; otherwise the result was a VARCHAR.

      The result type of the GROUP_CONCAT() function is now VARCHAR only if the value of the group_concat_max_len system variable is less than or equal to 512. Otherwise, this function returns a BLOB. (Bug#14169)

    • Large file support was re-enabled for the MySQL server binary for the AIX 5.2 platform. (Bug#13571)

    Bugs fixed:

    • Security Fix: A malicious client, using specially crafted invalid login or COM_TABLE_DUMP packets was able to read uninitialized memory, which potentially, though unlikely in MySQL, could have led to an information disclosure. (, ) Thanks to Stefano Di Paola for finding and reporting this bug. (CVE-2006-1516, CVE-2006-1517)

    • MySQL Cluster: A simultaneous DROP TABLE and table update operation utilising a table scan could trigger a node failure. (Bug#18597)

    • MySQL Cluster: A timeout in the handling of an ABORT condition with more that 32 operations could yield a node failure. (Bug#18414)

    • MySQL Cluster: A node restart immediately following a CREATE TABLE would fail.

      Important

      This fix supports 2-node Clusters only.

      (Bug#18385)

    • MySQL Cluster: In event of a node failure during a rollback, a “false” lock could be established on the backup for that node, which lock could not be removed without restarting the node. (Bug#18352)

    • MySQL Cluster: The cluster created a crashed replica of a table having an ordered index — or when logging was not enabled, of a table having a table or unique index — leading to a crash of the cluster following 8 successive restarts. (Bug#18298)

    • MySQL Cluster: When replacing a failed master node, the replacement node could cause the cluster to crash from a buffer overflow if it had an excessively large amount of data to write to the cluster log. (Bug#18118)

    • MySQL Cluster: Backups could fail for large clusters with many tables, where the number of tables approached MaxNoOfTables. (Bug#17607)

    • MySQL Cluster: The REDO log would become corrupted (and thus unreadable) in some circumstances, due to a failure in the query handler. (Bug#17295)

    • MySQL Cluster: An UPDATE with an inner join failed to match any records if both tables in the join did not have a primary key. (Bug#17257)

    • MySQL Cluster: A DELETE with a join in the WHERE clause failed to retrieve any records if both tables in the join did not have a primary key. (Bug#17249)

    • MySQL Cluster: In some cases, LOAD DATA INFILE did not load all data into NDB tables. (Bug#17081)

    • MySQL Cluster: Restarting nodes were allowed to start and join the cluster too early. (Bug#16772)

    • MySQL Cluster: ndb_delete_all ran out of memory when processing tables containing BLOB columns. (Bug#16693)

    • MySQL Cluster: In a 2-node cluster with a node failure, restarting the node with a low value for StartPartialTimeout could cause the cluster to come up partitioned (“split-brain” issue).

      A similar issue could occur when the cluster was first started with a sufficiently low value for this parameter. (Bug#16447, Bug#18612)

    • MySQL Cluster: On systems with multiple network interfaces, data nodes would get “stuck” in startup phase 2 if the interface connecting them to the management server was working on node startup while the interface interconnecting the data nodes experienced a temporary outage. (Bug#15695)

    • MySQL Cluster: Inserting and deleting BLOB column values while a backup was in process could cause data nodes to shut down. (Bug#14028)

    • MySQL Cluster: No error message was generated for setting NoOfFragmentLogFiles too low. (Bug#13966)

    • MySQL Cluster: No error message was generated for setting MaxNoOfAttributes too low. (Bug#13965)

    • MySQL Cluster: The server would not compile with NDB support on AIX 5.2. (Bug#10776)

    • Replication: Use of TRUNCATE TABLE for a TEMPORARY table on a master server was propagated to slaves properly, but slaves did not decrement the Slave_open_temp_tables counter properly. (Bug#17137)

    • Attempting to set the default value of an ENUM or SET column to NULL caused a server crash. (Bug#19145)

    • Index prefixes for utf8 VARCHAR columns did not work for UPDATE statements. (Bug#19080)

    • Index corruption could occur in cases when key_cache_block_size was not a multiple of the myisam-block-size value (for example, with --key_cache_block_size=1536 and --myisam-block-size=1024). (Bug#19079)

    • Creating a table in an InnoDB database with a column name that matched the name of an internal InnoDB column (including DB_ROW_ID, DB_TRX_ID, DB_ROLL_PTR and DB_MIX_ID) would cause a crash. MySQL now returns Error 1005 Cannot create table with errno set to -1. (Bug#18934)

    • MySQL would not compile on Linux distributions that use the tinfo library. (Bug#18912)

    • mysql_reconnect() sent a SET NAMES statement to the server, even for pre-4.1 servers that do not understand the statement. (Bug#18830)

    • For single-SELECT union constructs of the form (SELECT ... ORDER BY order_list1 [LIMIT n]) ORDER BY order_list2, the ORDER BY lists were concatenated and the LIMIT clause was ignored. (Bug#18767)

    • Conversion of a number to a CHAR UNICODE string returned an invalid result. (Bug#18691)

    • UNCOMPRESS(NULL) could cause subsequent UNCOMPRESS() calls to return NULL for legal non-NULL arguments. (Bug#18643)

    • A LOCK TABLES statement that failed could cause MyISAM not to update table statistics properly, causing a subsequent CHECK TABLE to report table corruption. (Bug#18544)

    • The IN-to-EXISTS transformation was making a reference to a parse tree fragment that was left out of the parse tree. This caused problems with prepared statements. (Bug#18492)

    • 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 euro sign () was not stored correctly in columns using the latin1_german1_ci or latin1_general_ci collation. (Bug#18321)

    • If InnoDB encountered a HA_ERR_LOCK_TABLE_FULL error and rolled back a transaction, the transaction was still written to the binary log. (Bug#18283)

    • Connecting to a server with a UCS2 default character set with a client using a non-UCS2 character set crashed the server. (Bug#18004)

    • Executing SELECT on a large table that had been compressed within myisampack could cause a crash. (Bug#17917)

    • A call to MIN() with a CASE expression as its argument could return a nonminimum value. (Bug#17896)

    • MyISAM: Keys for which the first part of the key was a CHAR or VARCHAR column using the UTF-8 character set and longer than 254 bytes could become corrupted. (Bug#17705)

    • SELECT ... WHERE column LIKE 'A%', when column had a key and used the latin2_czech_cs collation, caused the wrong number of rows to be returned. (Bug#17374)

    • A FULLTEXT query in a UNION could result in unexpected behavior. (Bug#16893)

    • IA-64 RPM packages for Red Hat and SuSE Linux that were built with the icc compiler incorrectly depended on icc runtime libraries. (Bug#16662)

    • A race condition could occur when dropping the adaptive hash index for a B-tree page in InnoDB. (Bug#16582)

    • MySQL-shared-compat-4.1.15-0.i386.rpm, MySQL-shared-compat-4.1.16-0.i386.rpm, and MySQL-shared-compat-4.1.18-0.i386.rpm incorrectly depended on glibc 2.3 and could not be installed on a glibc 2.2 system. (Bug#16539)

    • mysqldump tried to dump data from a view. (In MySQL 4.1, this applies when connecting to a server from MySQL 5.0 or higher.) (Bug#16389)

    • Dropping InnoDB constraints named tbl_name_ibfk_0 could crash the server. (Bug#16387)

    • A query using WHERE (column_1, column_2) IN ((value_1, value_2)[, (..., ...), ...]) would return incorrect results. (Bug#16248)

    • Character set conversion of string constants for UNION of constant and table column was not done when it was safe to do so. (Bug#15949)

    • The mysql_close() C API function leaked handles for shared-memory connections on Windows. (Bug#15846)

    • Security improvement: In grant table comparisons, improper use of a latin1 collation caused some host name matches to be true that should have been false. Thanks to Deomid Ryabkov for finding this bug and proposing a solution. (Bug#15756)

    • Binary distributions for Solaris contained files with group ownership set to the nonexisting wheel group. Now the bin group is used. (Bug#15562)

    • When running a query that contained a GROUP_CONCAT(SELECT GROUP_CONCAT(...) ), the result was NULL except in the ROLLUP part of the result, if there was one. (Bug#15560)

    • During conversion from one character set to ucs2, multi-byte characters with no ucs2 equivalent were converted to multiple characters, rather than to 0x003F QUESTION MARK. (Bug#15375)

    • SET value definitions containing commas were not rejected. Now a definition such as SET('a,b','c,d') results in an error. (Bug#15316)

    • LOAD DATA FROM MASTER produced invalid warnings and Packet out of order errors when the database already existed on the slave. (Bug#15302)

    • CAST(double AS SIGNED INT) for large double values outside the signed integer range truncated the result to be within range, but the result sometimes had the wrong sign, and no warning was generated. (Bug#15098)

    • SELECT COUNT(*) for a MyISAM table could return different results depending on whether an index was used. (Bug#14980)

    • Killing a long-running query containing a subquery could cause a server crash. (Bug#14851)

    • A FULLTEXT query in a prepared statement could result in unexpected behavior. (Bug#14496)

    • Security Improvement: GRANTs to users with wildcards in their host information could be erroneously applied to similar users with the same user name and similar wildcards. For example, a privilege granted to foo@% are also applied to user foo@192.%. (Bug#14385)

    • Avoid trying to include <asm/atomic.h> when it doesn't work in C++ code. (Bug#13621)

    • mysql_config returned incorrect libraries on x86_64 systems. (Bug#13158)

    • A key on a MEMORY table would sometimes fail to match a row. (Bug#12796)

    • MYSQL_STMT objects were not preserved following a connection reset. Attempting to operate on them afterwards caused the server to crash. (Bug#12744)

    • The server was always built as though --with-extra-charsets=complex had been specified. (Bug#12076)

    • Setting the myisam_repair_threads system variable to a value larger than 1 could cause corruption of large MyISAM tables. (Bug#11527)

    • Repeated invocation of my_init() and my_end() caused corruption of character set data and connection failure. (Bug#6536)

    B.1.8. Changes in MySQL 4.1.18 (27 January 2006)

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    Functionality added or changed:

    • MySQL Cluster: More descriptive warnings are now issued when inappropriate logging parameters are set in config.ini. (Formerly, the warning issued was simply Could not add logfile destination.) (Bug#11331)

    • libmysqlclient now uses versioned symbols with GNU ld. (Bug#3074)

    Bugs fixed:

    • Replication: The --replicate-do and --replicate-ignore options were not being enforced on multiple-table statements. (Bug#16487, Bug#15699)

    • UPDATE statement crashed multi-byte character set FULLTEXT index if update value was almost identical to initial value only differing in some spaces being changed to &nbsp;. (Bug#16489)

    • Single table UPDATE statements without ORDER BY clauses which updated the same indexed column that was being filtered on were optimized with a full index scan instead of a more appropriate index range scan. (Bug#15935)

    • STR_TO_DATE(1,NULL) caused a server crash. (Bug#15828, CVE-2006-3081)

    • Test suite func_math test returned warnings when the server was not compiled with InnoDB support. (Bug#15429)

    • RPM packages had an incorrect zlib dependency. (Bug#15223)

    • Running out of diskspace in the location specified by the tmpdir option resulted in incorrect error message. (Bug#14634)

    • The MBROverlaps GIS function returned incorrect results. (Bug#14320)

    • The length of a VARCHAR() column that used the utf8 character set would increase each time the table was re-created in a stored procedure or prepared statement, eventually causing the CREATE TABLE statement to fail. (Bug#13134)

    • A prepared statement created from a SELECT ... LIKE query (such as PREPARE stmt1 FROM 'SELECT col_1 FROM tedd_test WHERE col_1 LIKE ?';) would begin to produce erratic results after being executed repeatedly numerous (thousands) of times. (Bug#12734)

    • A CREATE TABLE ... SELECT ... on an equation involving DOUBLE values could result in the table being created with columns too small to hold the equation result. (Bug#9855)

    B.1.9. Changes in MySQL 4.1.17 (Not released)

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    Functionality added or changed:

    • Support files for compiling with Visual Studio 6 have been removed. (Bug#15094)

    • Internal sha1_result function renamed to mysql_sha1_result to prevent conflicts with other projects. (Bug#13944)

    • In the latin5_turkish_ci collation, the order of the characters A WITH CIRCUMFLEX, I WITH CIRCUMLEX, and U WITH CIRCUMFLEX was changed. If you have used these characters in any indexed columns, you should rebuild those indexes. (Bug#13421)

    Bugs fixed:

    • MySQL Cluster: If an abort by the Transaction Coordinator timed out, the abort condition was incorrectly handled, causing the transaction record to be released prematurely. (Bug#15685)

    • MySQL Cluster: Under some circumstances, it was possible for a restarting node to undergo a forced shutdown. (Bug#15632)

    • MySQL Cluster: A node which failed during cluster startup was sometimes not removed from the internal list of active nodes. (Bug#15587)

    • MySQL Cluster: There was a small window for a node failure to occur during a backup without an error being reported. (Bug#15425)

    • MySQL Cluster: A memory leak occurred when performing ordered index scans using indexes on columns larger than 32 bytes. This would eventually lead to the forced shutdown of all mysqld server processes used with the cluster. (Bug#13078)

    • Cluster API: Upon the completion of a scan where a key request remained outstanding on the primary replica and a starting node died, the scan did not terminate. This caused incomplete error handling for the failed node. (Bug#15908)

    • Performing a RENAME TABLE on an InnoDB table when the server was started with the --innodb_file_per_table option and the data directory was a symlink caused a server crash. (Bug#15991)

    • Piping the fill_help_tables.sql file into mysqld resulted in a syntax error. (Bug#15965)

    • CAST(... AS TIME) operations returned different results when using versus not using prepared-statement protocol. (Bug#15805)

    • Issuing a DROP USER command could cause some users to encounter a hostname is not allowed to connect to this MySQL server error. (Bug#15775)

    • Certain permission management statements could create a NULL host name for a user, resulting in a server crash. (Bug#15598)

    • The COALESCE() function truncated data in a TINYTEXT column. (Bug#15581)

    • BDB: A DELETE, INSERT, or UPDATE of a BDB table could cause the server to crash where the query contained a subquery using an index read. (Bug#15536)

    • Characters in the gb2312 and euckr character sets which did not have Unicode mappings were truncated. (Bug#15377)

    • Multiple-table update operations were counting updates and not updated rows. As a result, if a row had several updates it was counted several times for the “rows matched” value but updated only once. (Bug#15028)

    • Symbolic links did not function properly on Windows platforms. (Bug#14960, Bug#14310)

    • SELECT queries that began with an opening parenthesis were not being placed in the query cache. (Bug#14652)

    • InnoDB: Comparison of indexed VARCHAR CHARACTER SET ucs2 COLLATE ucs2_bin columns using LIKE could fail. (Bug#14583)

    • Using an aggregate function as the argument for a HAVING clause resulted in the aggregate function always returning FALSE. (Bug#14274)

    • For InnoDB tables, using a column prefix for a utf8 column in a primary key caused Cannot find record errors when attempting to locate records. (Bug#14056)

    • InnoDB: If foreign_key_checks was 0, InnoDB allowed inconsistent foreign keys to be created. (Bug#13778)

    • Certain CREATE TABLE ... AS ... statements involving ENUM columns could cause server crash. (Bug#12913)

    • Using CAST() to convert values with long fractional and/or exponent parts to TIME returned wrong results. (Bug#12440)

    • A race condition when creating temporary files caused a deadlock on Windows with threads in Opening tables or Waiting for table states. (Bug#12071)

    • DELETE could report full-text index corruption (Invalid key for table ...) if the index was built with repair-by-sort, the data in the full-text index used UCA collation, and some word appeared in the data terminated by a 0xC2A0 character as well as by other nonletter characters. (Bug#11336)

    • Access Denied error could be erroneously returned with specific grant combinations under high load. (Bug#7209)

    • An INSERT ... SELECT statement between tables in a MERGE set can return errors when statement involves insert into child table from merge table or vice-versa. (Bug#5390)

    B.1.10. Changes in MySQL 4.1.16 (29 November 2005)

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    Functionality added or changed:

    • When a date column is set NOT NULL and contains 0000-00-00, it will be updated for UPDATE statements that contains columnname IS NULL in the WHERE clause. (Bug#14186)

    • When executing single-table UPDATE or DELETE queries containing an ORDER BY ... LIMIT N clause, but not having any WHERE clause, MySQL can now take advantage of an index to read the first N rows in the ordering specified in the query. If an index is used, only the first N records will be read, as opposed to scanning the entire table. (Bug#12915)

    • The MySQL-server RPM now explicitly assigns the mysql system user to the mysql user group during the postinstallation process. This corrects an issue with upgrading the server on some Linux distributions whereby a previously existing mysql user was not changed to the mysql group, resulting in wrong groups for files created following the installation. (Bug#12823)

    • MySQL 4.1 now supports character set conversion for seven additional cp950 characters into the big5 character set: 0xF9D6, 0xF9D7, 0xF9D8, 0xF9D9, 0xF9DA, 0xF9DB, and 0xF9DC.

      Note

      If you move data containing these additional characters to an older MySQL installation which does not support them, you may encounter errors.

      (Bug#12476)

    • The CHAR() function now takes an optional USING charset clause that may be used to produce a result in a specific character set rather than in the connection character set.

    Bugs fixed:

    • MySQL Cluster: Creating a table with packed keys failed silently. NDB now supports the PACK_KEYS option to CREATE TABLE correctly. (Bug#14514)

    • MySQL Cluster: Repeated transactions using unique index lookups could cause a memory leak leading to error 288, Out of index operations in transaction coordinator. (Bug#14199)

    • MySQL Cluster: REPLACE failed when attempting to update a primary key value in a Cluster table. (Bug#14007)

    • MySQL Cluster: The perror utility included with the MySQL-Server RPM did not provide support for the --ndb option. It now supports this option, and so can be used to obtain error message text for MySQL Cluster error codes. (Bug#13740)

    • MySQL Cluster: Placing multiple [tcp default] sections in the cluster's config.ini file crashed ndb_mgmd. (The process now exits gracefully in such cases, with an appropriate error message.) (Bug#13611)

    • Replication: Multiple update queries using any type of subquery would be ignored by a replication slave when a condition such as --replicate-ignore-table like condition was used. (Bug#13236)

    • Replication: An UPDATE query using a join would be executed incorrectly on a replication slave. (Bug#12618)

    • Replication: On Windows, the server could crash during shutdown if both replication threads and normal client connection threads were active. (Bug#11796)

    • Replication: InnoDB: During replication, There was a failure to record events in the binary log that still occurred even in the event of a ROLLBACK. For example, this sequence of commands:

      BEGIN;
      CREATE TEMPORARY TABLE t1 (a INT) ENGINE=INNODB;
      ROLLBACK;
      INSERT INTO t1 VALUES (1);
      

      would succeed on the replication master as expected. However, the INSERT would fail on the slave because the ROLLBACK would (erroneously) cause the CREATE TEMPORARY TABLE statement not to be written to the binlog. (Bug#7947)

    • Closed a memory leak in the SSL code. (Bug#14780)

    • Deletes from a CSV table could cause table corruption. (Bug#14672)

    • A LIMIT-related optimization failed to take into account that MyISAM table indexes can be disabled, causing Error 124 when it tried to use such an index. (Bug#14616)

    • Selecting from a table in both an outer query and a subquery could cause a server crash. (Bug#14482)

    • CREATE TABLE tbl_name (...) SELECT ... could crash the server and write invalid data into the .frm file if the CREATE TABLE and SELECT both contained a column with the same name. Also, if a default value is specified in the column definition, it is now actually used. (Bug#14480)

    • mysql_fix_privilege_tables.sql contained an erroneous comment that resulted in an error when the file contents were processed. (Bug#14469)

    • Creating a table containing an ENUM or SET column from within a stored procedure or prepared statement caused a server crash later when executing the procedure or statement. (Bug#14410)

    • Non-latin1 object names were written with wrong character set to grant tables. (Bug#14406)

    • For a table that had been opened with HANDLER OPEN, issuing OPTIMIZE TABLE, ALTER TABLE, or REPAIR TABLE caused a server crash. (Bug#14397)

    • Portability fixes to support OpenSSL 0.9.8a. (Bug#14221)

    • A UNION of DECIMAL columns could produce incorrect results. (Bug#14216)

    • Statements of the form CREATE TABLE ... SELECT ... that created a column with a multi-byte character set could incorrectly calculate the maximum length of the column, resulting in a Specified key was too long error. (Bug#14139)

    • Use of WITH ROLLUP PROCEDURE ANALYSE() could hang the server. (Bug#14138)

    • When the DATE_FORMAT() function appeared in both the SELECT and ORDER BY clauses of a query but with arguments that differ by case (for example, %m and %M), incorrect sorting may have occurred. (Bug#14016)

    • TIMEDIFF(), ADDTIME(), and STR_TO_DATE() were not reporting that they could return NULL, so functions that invoked them might misinterpret their results. (Bug#14009)

    • An update of a CSV table could cause a server crash. (Bug#13894)

    • For MyISAM tables, incorrect query results or incorrect updates could occur under these conditions: There is a multiple-column index that includes a BLOB column that is not the last column in the index, and the statement performs a lookup on the index using key column values that have NULL for the BLOB column and that provide values for all columns up to the BLOB column and at least the next column in the index. (Bug#13814)

    • The example configuration files supplied with MySQL distributions listed the thread_cache_size variable as thread_cache. (Bug#13811)

    • mysqld_safe did not correctly start the -max version of the server (if it was present) if the --ledir option was given. (Bug#13774)

    • Character set conversion was not being done for FIND_IN_SET(). (Bug#13751)

    • On BSD systems, the system crypt() call could return an error for some salt values. The error was not handled, resulting in a server crash. (Bug#13619)

    • Given a column col_name defined as NOT NULL, a SELECT ... FROM ... WHERE col_name IS NULL query following SHOW TABLE STATUS would erroneously return a nonempty result. (Bug#13535)

    • Specifying --default-character-set=cp-932 for mysqld would cause SQL scripts containing comments written using that character set to fail with a syntax error. (Bug#13487)

    • Use of col_name = VALUES(col_name) in the ON DUPLICATE KEY UPDATE clause of an INSERT statement failed with an Column 'col_name' in field list is ambiguous error. (Bug#13392)

    • LIKE operations did not work reliably for the cp1250 character set. (Bug#13347)

    • CAST(1E+300 TO SIGNED INT) produced an incorrect result on little-endian machines. (Bug#13344)

    • The default value of query_prealloc_size was set to 8192, lower than its minimum of 16384. The minimum has been lowered to 8192. (Bug#13334)

    • mysqladmin and mysqldump would hang on SCO OpenServer. (Bug#13238)

    • SELECT DISTINCT CHAR(col_name) returned incorrect results after SET NAMES utf8. (Bug#13233)

    • The server did not take character set into account in checking the width of the mysql.user.Password column. As a result, it could incorrectly generate long password hashes even if the column was not long enough to hold them. (Bug#13064)

    • With --log-slave-updates Exec_master_log_pos of SQL thread lagged IO (Bug#13023)

    • Maximum values were handled incorrectly for command-line options of type GET_LL. (Bug#12925)

    • The endian byte in for spatial values in WKB format was not consistently respected. (Bug#12839)

    • make failed when attempting to build MySQL in different directory other than that containing the source. (Bug#11827)

    • An expression in an ORDER BY clause failed with Unknown column 'col_name' in 'order clause' if the expression referred to a column alias. (Bug#11694)

    • LOAD DATA INFILE would not accept the same character for both the ESCAPED BY and the ENCLOSED BY clauses. (Bug#11203)

    • Issuing STOP SLAVE after having acquired a global read lock with FLUSH TABLES WITH READ LOCK caused a deadlock. Now STOP SLAVE is generates an error in such circumstances. (Bug#10942)

    • Corrected a memory-copying problem for big5 values when using icc compiler on Linux IA-64 systems. (Bug#10836)

    • PROCEDURE ANALYSE() could suggest a data type with a negative display width. (Bug#10716)

    • InnoDB: Pad UTF-8 VARCHAR columns with 0x20. Pad UCS2 CHAR columns with 0x0020. (Bug#10511)

    • Perform character set conversion of constant values whenever possible without data loss. (Bug#10446)

    • PURGE MASTER LOGS statement that used subquery for date crashed server. (Bug#10308)

    • Multiple race conditions existed in OpenSSL, particularly noticeable on Solaris. (Bug#9270)

    • The --interactive-timeout and --slave-net-timeout options for mysqld were not being obeyed on Mac OS X and other BSD-based platforms. (Bug#8731)

    • Queries of the form (SELECT ...) ORDER BY ... were being treated as a UNION. This improperly resulted in only distinct values being returned (because UNION by default eliminates duplicate results). Also, references to column aliases in ORDER BY clauses following parenthesized SELECT statements were not resolved properly. (Bug#7672)

    • Character set file parsing during mysql_real_connect() read past the end of a memory buffer. (Bug#6413)

    • Full-text indexing/searching failed for words that end with more than one apostrophe. (Bug#5686)

    • On Windows, the server was not ignoring hidden or system directories that Windows may have created in the data directory, and would treat them as available databases. (Bug#4375)

    B.1.11. Changes in MySQL 4.1.15 (13 October 2005)

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    Functionality added or changed:

    • MySQL Cluster: The parsing of the CLUSTERLOG command by ndb_mgm was corrected to allow multiple items. (Bug#12833)

    • Replication: Better detection of connection timeout for replication servers on Windows allows elimination of extraneous Lost connection errors in the error log. (Bug#5588)

    • The limit of 255 characters on the input buffer for mysql on Windows has been lifted. The exact limit depends on what the system allows, but can be up to 64K characters. A typical limit is 16K characters. (Bug#12929)

    • Added the myisam_stats_method, which controls whether NULL values in indexes are considered the same or different when collecting statistics for MyISAM tables. This influences the query optimizer as described in Section 7.4.6, “MyISAM Index Statistics Collection”. (Bug#12232)

    • A new command line argument was added to mysqld to ignore client character set information sent during handshake, and use server side settings instead, to reproduce 4.0 behavior :

      mysqld --skip-character-set-client-handshake

      (Bug#9948)

    • RAND() no longer allows nonconstant initializers. (Prior to MySQL 4.1.15, the effect of nonconstant initializers is undefined.) (Bug#6172)

    • When using IF NOT EXISTS with CREATE DATABASE or CREATE TABLE, a warning now is generated if the database or table already exists. : (Bug#6008)

    Bugs fixed:

    • MySQL Cluster: Adding an index to a table with a large number of columns (more then 100) crashed the storage node. (Bug#13316)

    • MySQL Cluster: The cluster management client START BACKUP command could be interrupted by a SHOW command. (Bug#13054)

    • MySQL Cluster: Updating a column of one of the TEXT types during a cluster backup could cause the ndbd process to crash, due to the incorrect use of charset-normalized reads. This could also lead to character data having the wrong lettercase in the backup if such a column was updated during the backup; for example, supposing that the column used latin_ci, then “ aAa ” might be stored in the backup as “ AAA ”. (Bug#12950)

    • MySQL Cluster: When it could not copy a fragment, ndbd exited without printing a message about the condition to the error log. Now the message is written. (Bug#12900)

    • MySQL Cluster: When a Disk is full condition occurred, ndbd exited without reporting this condition in the error log. (Bug#12716)

    • MySQL Cluster: An ALTER TABLE command caused loss of data stored prior to the issuing of the command. (Bug#12118)

    • MySQL Cluster: Invalid values in config.ini caused ndb_mgmd to crash. (Bug#12043)

    • MySQL Cluster: Multiple ndb_mgmd processes in a cluster did not know each other's IP addresses. (Bug#12037)

    • MySQL Cluster: When a schema was detected to be corrupt, ndb neglected to close it, resulting in a file already open error if the schema was opened again later. written. (Bug#12027)

    • MySQL Cluster: With two mgmd processes in a cluster, ndb_mgm output for SHOW would display the same IP address for both processes, even when they were on different hosts. (Bug#11595)

    • MySQL Cluster: MySQL failed to compile when --with-ndb-ccflags was specified. (Bug#11538)

    • MySQL Cluster: Improved error messages related to file system issues. (Bug#11218)

    • MySQL Cluster: LOAD DATA INFILE with a large data file failed. (Bug#10694)

    • MySQL Cluster: A cluster shutdown following the crash of a data node failed to terminate any remaining node processes, even though ndb_mgm showed the shutdown request as having been completed. (Bug#9996, Bug#10938, Bug#11623)

    • MySQL Cluster: When deleting a great many (tens of thousands of) rows at once from an NDB table, an improperly dereferenced pointer could cause the mysqld process to crash. (Bug#9282)

    • Replication: When any --replicate-wild-* option is used, the slave ignores SET ONE_SHOT TIME_ZONE statements as belonging to a nonreplicated table. (Bug#12542)

    • Replication: The --replicate-rewrite-db and --replicate-do-table options did not work for statements in which tables were aliased to names other than those listed by the options. (Bug#11139)

    • Replication: If a DROP DATABASE fails on a master server due to the presence of a nondatabase file in the database directory, the master have the database tables deleted, but not the slaves. To deal with failed database drops, we now write DROP TABLE statements to the binary log for the tables so that they are dropped on slaves. (Bug#4680)

    • The server could over-allocate memory when performing a FULLTEXT search for stopwords only. (Bug#13582)

    • After running configure with the --with-embedded-privilege-control option, the embedded server failed to build. (Bug#13501)

    • UNION of two DECIMAL columns returned wrong field type. (Bug#13372)

    • Comparisons involving row constructors containing constants could cause a server crash. (Bug#13356)

    • MySQL would pass an incorrect key length to storage engines for MIN(). This could cause spurious warnings such as InnoDB: Warning: using a partial-field key prefix in search to appear in the .err log. (Bug#13218, Bug#11039)

    • Aggregate functions sometimes incorrectly were allowed in the WHERE clause of UPDATE and DELETE statements. (Bug#13180)

    • If special characters such as '_' , '%', or the escape character were included within the prefix of a column index, LIKE pattern matching on the indexed column did not return the correct result. (Bug#13046, Bug#13919)

    • SHOW CREATE TABLE did not display any FOREIGN KEY clauses if a temporary file could not be created. Now SHOW CREATE TABLE displays an error message in an SQL comment if this occurs. (Bug#13002)

    • On HP-UX 11.x (PA-RISC), the -L option caused mysqlimport to crash. (Bug#12958)

    • The counters for the Key_read_requests, Key_reads, Key_write_requests, and Key_writes status variables were changed from unsigned long to unsigned longlong to accommodate larger values before the variables roll over and restart from 0. (Bug#12920)

    • For queries with DISTINCT and WITH ROLLUP, the DISTINCT should be applied after the rollup operation, but was not always. (Bug#12887)

    • A column that can be NULL was not handled properly for WITH ROLLUP in a subquery or view. (Bug#12885)

    • MIN() and MAX() sometimes returned a non-NULL value for an empty row set (for example, SELECT MAX(1) FROM empty_table). (Bug#12882)

    • GROUP_CONCAT() ignored an empty string if it was the first value to occur in the result. (Bug#12863)

    • SELECT GROUP_CONCAT(...) FROM DUAL in a subquery could cause the client to hang. (Bug#12861)

    • If a client has opened an InnoDB table for which the .ibd file is missing, InnoDB would not honor a DROP TABLE statement for the table. (Bug#12852)

    • The server crashed when one thread resized the query cache while another thread was using it. (Bug#12848)

    • A concurrency problem for CREATE ... SELECT could cause a server crash. (Bug#12845)

    • The ARCHIVE storage engine does not support deletes, but it was possible to delete by using DELETE or TRUNCATE TABLE with a FEDERATED table that points to an ARCHIVE table. (Bug#12836)

    • After changing the character set with SET CHARACTER SET, the result of the GROUP_CONCAT() function was not converted to the proper character set. (Bug#12829)

    • Reverted a change introduced in MySQL 4.1.13 (SHOW FIELDS truncated the TYPE column to 40 characters). This fix was reverted for MySQL 4.1 because it broke existing applications. The fix will be made in MySQL 5.0 instead (5.0.13). (Bug#12817)

      The patch for the following bugs was reverted: Bug#7142.

    • An optimizer estimate of zero rows for a nonempty InnoDB table used in a left or right join could cause incomplete rollback for the table. (Bug#12779)

    • Shared-memory connections were not working on Windows. (Bug#12723)

    • Performing an IS NULL check on the MIN() or MAX() of an indexed column in a complex query could produce incorrect results. (Bug#12695)

    • CHECKSUM TABLE locked InnoDB tables and did not use a consistent read. (Bug#12669)

    • A SELECT DISTINCT query with a constant value for one of the columns would return only a single row. (Bug#12625)

    • The LIKE ... ESCAPE syntax produced invalid results when escape character was larger than one byte. (Bug#12611)

    • DELETE or UPDATE for an indexed MyISAM table could fail. This was due to a change in end-space comparison behavior from 4.0 to 4.1. (Bug#12565)

    • A UNION of long utf8 VARCHAR columns was sometimes returned as a column with a LONGTEXT data type rather than VARCHAR. This could prevent such queries from working at all if selected into a MEMORY table because the MEMORY storage engine does not support the TEXT data types. (Bug#12537)

    • A client connection thread cleanup problem caused the server to crash when closing the connection if the binary log was enabled. (Bug#12517)

    • MEMORY tables using B-Tree index on 64-bit platforms could produce false table is full errors. (Bug#12460)

    • Deadlock occurred when several account management statements were run (particularly between FLUSH PRIVILEGES/SET PASSWORD and GRANT/REVOKE statements). (Bug#12423)

    • InnoDB was too permissive with LOCK TABLE ... READ LOCAL and allowed new inserts into the table. Now READ LOCAL is equivalent to READ for InnoDB. This will cause slightly more locking in mysqldump, but makes InnoDB table dumps consistent with MyISAM table dumps. (Bug#12410)

    • A prepared statement failed with Illegal mix of collations if the client character set was utf8 and the statement used a table that had a character set of latin1. (Bug#12371)

    • The value of character_set_results could be set to NULL, but returned the string "NULL" when retrieved. (Bug#12363)

    • On Windows, the server was preventing tables from being created if the table name was a prefix of a forbidden name. For example, nul is a forbidden name because it is the same as a Windows device name, but a table with the name of n or nu was being forbidden as well. (Bug#12325)

    • Users created using an IP address or other alias rather than a host name listed in /etc/hosts could not set their own passwords. (Bug#12302)

    • CHECKSUM TABLE command returned incorrect results for tables with deleted rows. After upgrading, users who used stored checksum information to detect table changes should rebuild their checksum data. (Bug#12296)

    • For VARCHAR columns with the ucs2 character set, InnoDB trimmed trailing 0x20 bytes rather than 0x0020 words, resulting in incorrect index lookups later. (Bug#12178)

    • Outer join elimination was erroneously applied for some queries that used a NOT BETWEEN condition, an IN(value_list) condition, or an IF() condition. (Bug#12102, Bug#12101)

    • LOAD DATA INFILE did not respect the NO_AUTO_VALUE_ON_ZERO SQL mode setting. (Bug#12053)

    • TRUNCATE TABLE did not work with TEMPORARY InnoDB tables. (Bug#11816)

    • Queries that created implicit temporary tables could return incorrect data types for some columns. (Bug#11718)

    • Use of a user-defined function within the HAVING clause of a query resulted in an Unknown column error. (Bug#11553)

    • ALTER TABLE db_name.t RENAME t did not move the table to default database unless the new name was qualified with the database name. (Bug#11493)

    • mysqld_multi now quotes arguments on command lines that it constructs to avoid problems with arguments that contain shell metacharacters. (Bug#11280)

    • Spatial index corruption could occur during updates. (Bug#9645)

    • The have_innodb read-only system variable could not be selected with SELECT @@have_innodb. (Bug#9613)

    • Queries against a MERGE table that has a composite index could produce incorrect results. (Bug#9112)

    • Display of the AUTO_INCREMENT attribute by SHOW CREATE TABLE was not controlled by the NO_FIELD_OPTIONS SQL mode as it should have been. (Bug#7977)

    • The data type for DECIMAL columns was not respected when updating the column from another column. For example, updating a DECIMAL(10,1) column with the value from a DECIMAL(10,5) column resulted in a DECIMAL(10,5) value being stored. Similarly, altering a column with a DECIMAL(10,5) datatype to a DECIMAL(10,1) data type did not properly convert data values. (Bug#7598)

    • MySQL programs in binary distributions for Solaris 8/9/10 x86 systems would not run on Pentium III machines. (Bug#6772)

    • On Windows when the --innodb_buffer_pool_awe_mem_mb option has been given, the server detects whether AWE support is available and has been compiled into the server, and displays an appropriate error message if not. (Bug#6581)

    • myisampack did not properly pack BLOB values larger than 224 bytes. (Bug#4214)

    B.1.12. Changes in MySQL 4.1.14 (17 August 2005)

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    Functionality added or changed:

    • MySQL Cluster: Improved handling of the configuration variables NoOfPagesToDiskDuringRestartACC, NoOfPagesToDiskAfterRestartACC, NoOfPagesToDiskDuringRestartTUP, and NoOfPagesToDiskAfterRestartTUP should result in noticeably faster startup times for MySQL Cluster. (Bug#12149)

    • MySQL Cluster: A new -P option is available for use with the ndb_mgmd client. When called with this option, ndb_mgmd prints all configuration data to stdout, then exits.

    • If a thread (connection) has tables locked, the query cache is switched off for that thread. This prevents invalid results where the locking thread inserts values between a second thread connecting and selecting from the table. (Bug#12385)

    • Added an optimization that avoids key access with NULL keys for the ref method when used in outer joins. (Bug#12144)

    • Added support of where clause for queries with FROM DUAL. (Bug#11745)

    • SHOW CHARACTER SET and INFORMATION_SCHEMA now properly report the Latin1 character set as cp1252. (Bug#11216)

    • Added new query cache test for the embedded server to the test suite, there are now specific tests for the embedded and nonembedded servers. (Bug#9508)

    • The MySQL server now starts correctly with all combinations of --basedir and --datadir, resolving an issue introduced by the original fix for this bug in MySQL 4.1.9. (Bug#7249)

      See also Bug#7518.

    Bugs fixed:

    • MySQL Cluster: The temporary tables created by an ALTER TABLE on an NDB table were visible to all SQL nodes in the cluster. (Bug#12055)

    • MySQL Cluster: NDB ignored the Hostname option in the [ndbd default] section of the cluster configuration file. (Bug#12028)

    • MySQL Cluster: The output of perror --help did not display any information about the --ndb option. (Bug#11999)

    • MySQL Cluster: Attempting to create or drop tables during a backup would cause the cluster to shut down. (Bug#11942)

    • MySQL Cluster: ndb_mgmd leaked file descriptors. (Bug#11898)

    • Replication: Slave I/O threads were considered to be in the running state when launched (rather than after successfully connecting to the master server), resulting in incorrect SHOW SLAVE STATUS output. (Bug#10780)

    • Mishandling of comparison for rows containing NULL values against rows produced by an IN subquery could cause a server crash. (Bug#12392)

    • Concatenating USER() or DATABASE() with a column produced invalid results. (Bug#12351)

    • Creation of the mysql group account failed during the RPM installation. (Bug#12348)

    • Renamed the rest() macro in my_list.h to list_rest() to avoid name clashes with user code. (Bug#12327)

    • Performing DATE(LEFT(column,8)) on a DATE column produces incorrect results. (Bug#12266)

    • myisampack failed to delete .TMD temporary files when run with -T option. (Bug#12235)

    • Updated dependency list for RPM builds to include missing dependencies such as useradd and groupadd. (Bug#12233)

    • InnoDB: Do not flush after each write, not even before setting up the doublewrite buffer. Flushing can be extremely slow on some systems. (Bug#12125)

    • Two threads could potentially initialize different characters sets and overwrite each other. (Bug#12109)

    • GROUP_CONCAT ignores the DISTINCT modifier when used in a query joining multiple tables where one of the tables has a single row. (Bug#12095)

    • big5 strings were not being stored in FULLTEXT index. (Bug#12075)

    • SHOW BINARY LOGS displayed a file size of 0 for all log files but the current one if the files were not located in the data directory. (Bug#12004)

    • mysql_next_result() returns incorrect value if final query in a batch fails. (Bug#12001)

    • Character data truncated when GBK characters 0xA3A0 and 0xA1 are present. (Bug#11987)

    • UNION query with FULLTEXT could cause server crash. (Bug#11869)

    • Corrected an optimizer problem with NOT NULL constraints within a subquery in an UPDATE statement that resulted in a server crash. (Bug#11868)

    • Some subqueries of the form SELECT ... WHERE ROW(...) IN (subquery) were being handled incorrectly. (Bug#11867)

    • Creating a table with a SET or ENUM column with the DEFAULT 0 clause caused a server crash if the table's character set was utf8. (Bug#11819)

    • Comparisons like SELECT "A\\" LIKE "A\\"; fail when using SET NAMES utf8;. (Bug#11754)

    • The mysql_info() C API function could return incorrect data when executed as part of a multi-statement that included a mix of statements that do and do not return information. (Bug#11688)

    • Attempting to repair a table having a fulltext index on a column containing words whose length exceeded 21 characters and where myisam_repair_threads was greater than 1 would crash the server. (Bug#11684)

    • LIKE pattern matching using prefix index didn't return correct result. (Bug#11650)

    • Corrected a problem with the optimizer incorrectly adding NOT NULL constraints, producing in incorrect results for complex queries. (Bug#11482)

    • Queries with subqueries that contain outer joins could return wrong results. (Bug#11479)

    • Multiplying ABS() output by a negative number would return incorrect results. (Bug#11402)

    • For PKG installs on Mac OS X, the preinstallation and postinstallation scripts were being run only for new installations and not for upgrade installations, resulting in an incomplete installation process. (Bug#11380)

    • Prepared statement parameters could cause errors in the binary log if the character set was cp932. (Bug#11338)

    • The LPAD() and RPAD() functions returned the wrong length to mysql_fetch_fields(). (Bug#11311)

    • For prepared statements, the SQL parser did not disallow “ ? ” parameter markers immediately adjacent to other tokens, which could result in malformed statements in the binary log. (For example, SELECT * FROM t WHERE? = 1 could become SELECT * FROM t WHERE0 = 1.) (Bug#11299)

    • The C API function mysql_stmt_reset() did not clear error information. (Bug#11183)

    • myisam.test failed when server compiled using --without-geometry option. (Bug#11083)

    • User variables were not automatically cast for comparisons, causing queries to fail if the column and connection character sets differed. Now when mixing strings with different character sets but the same coercibility, allow conversion if one character set is a superset of the other. (Bug#10892)

    • SELECT @@local... returned @@session... in the column header. (Bug#10724)

    • When two threads competed for the same table, a deadlock could occur if one thread also had a lock on another table through LOCK TABLES and the thread was attempting to remove the table in some manner while the other thread tried to place locks on both tables. (Bug#10600)

    • Incorrect error message displayed if user attempted to create a table in a nonexisting database using CREATE database_name.table_name syntax. (Bug#10407)

    • GROUP_CONCAT() sometimes returned a result with a different collation from that of its arguments. (Bug#10201)

    • INSERT ... SELECT ... ON DUPLICATE KEY UPDATE could fail with an erroneous “Column 'col_name' specified twice” error. (Bug#10109)

    • Multiple-table UPDATE queries using CONVERT_TZ() would fail with an error. (Bug#9979)

    • The value of max_connections_per_hour was capped by the unrelated max_user_connections setting. (Bug#9947)

    • mysql_fetch_fields() returned incorrect length information for MEDIUM and LONG TEXT and BLOB columns. (Bug#9735)

    • FLUSH TABLES WITH READ LOCK combined with LOCK TABLE .. WRITE caused deadlock. (Bug#9459)

    • Server-side prepared statements failed for columns with a character set of ucs2. (Bug#9442)

    • In SQL prepared statements, comparisons could fail for values not equally space-padded. For example, SELECT 'a' = 'a '; returns 1, but PREPARE s FROM 'SELECT ?=?'; SET @a = 'a', @b = 'a '; PREPARE s FROM 'SELECT ?=?'; EXECUTE s USING @a, @b; incorrectly returned 0. (Bug#9379)

    • References to system variables in an SQL statement prepared with PREPARE were evaluated during EXECUTE to their values at prepare time, not to their values at execution time. (Bug#9359)

    • For server shutdown on Windows, error messages of the form Forcing close of thread n user: 'name' were being written to the error log. Now connections are closed more gracefully without generating error messages. (Bug#7403)

    • ISO-8601 formatted dates were not being parsed correctly. (Bug#7308)

    • Pathame values for options such as --basedir or --datadir didn't work on Japanese Windows machines for directory names containing multi-byte characters having a second byte of 0x5C (“ \ ”). (Bug#5439)

    B.1.13. Changes in MySQL 4.1.13 (15 July 2005)

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    Functionality added or changed:

    Bugs fixed:

    • Security Fix: A vulnerability in zlib could result in a buffer overflow and arbitrary code execution. Shortly after MySQL 4.1.13 was released, a second potential zlib security flaw was discovered and fixed. A patch for this flaw was applied to the 4.1.13 sources, and the result published as MySQL 4.1.13a. The affected binaries were rebuilt. (Bug#11844, CVE-2005-2096, CVE-2005-1849)

    • Security Fix: On Windows systems, a user with any of the following privileges on *.* could crash mysqld by issuing a USE LPT1; or USE PRN; command:

      In addition, any of the commands USE NUL;, USE CON;, USE COM1;, or USE AUX; would report success even though the database was not in fact changed. (Bug#9148)

    • MySQL Cluster: NDB failed to build with gcc 4.0. (Bug#11377)

    • MySQL Cluster: When trying to open a table that could not be discovered or unpacked, the cluster returned error codes which the MySQL server falsely interpreted as operating system errors. (Bug#10365)

    • Replication: LOAD DATA ... REPLACE INTO ... on a replication slave failed for an InnoDB table having a unique index in addition to the primary key. (Bug#11401)

    • Replication: An invalid comaprison caused warnings for packet length in replication on 64-bit compilers. (Bug#11064)

    • Replication: Queries of the form UPDATE ... (SELECT ... ) SET ... run on a replication master would crash all the slaves. (Bug#10442, CVE-2004-4380)

    • Replication: An UPDATE query containing a subquery caused replication to fail. (Bug#9361)

    • When applying the group_concat_max_len limit, GROUP_CONCAT() could truncate multi-byte characters in the middle. (Bug#23451)

    • Selecting the result of an aggregate function for an ENUM or SET column within a subquery could result in a server crash. (Bug#11821)

    • Corrected an optimization failure where a query returned an incorrect result for use of a newly populated table until the table was flushed. (Bug#11700)

    • The --master-data option for mysqldump resulted in no error if the binary log was not enabled. Now an error occurs unless the --force option is given. (Bug#11678)

    • Invoking the DES_ENCRYPT() function could cause a server crash if the server was started without the --des-key-file option. (Bug#11643)

    • mysqldump now exports HASH index definitions using USING rather than TYPE when the index name is optional. This corrects a problem when reloading the output for PRIMARY KEY definition, because TYPE must be preceded an index name, which is not given for a PRIMARY KEY. (Bug#11635)

    • IP addresses not shown in ndb_mgm SHOW command on second ndb_mgmd (or on ndb_mgmd restart). (Bug#11596)

    • Modifying a CHAR column with the utf8 character set to a shorter length did not properly truncate values due to not computing their length in utf8 character units. (Bug#11591)

    • MySQL would not compile correctly on QNX due to missing rint() function. (Bug#11544)

    • A ROLLUP query could return a wrong result set when its GROUP BY clause contained references to the same column. (Bug#11543)

    • Queries with subqueries in the FROM clause were not being added to the query cache. (Bug#11522)

    • Using CONCAT_WS() on a column set NOT NULL caused incorrect results when used in a LEFT JOIN. (Bug#11469)

    • Prepared statement with subqueries returned corrupt data. (Bug#11458)

    • Temporary tables were created in the data directory instead of tmpdir. (Bug#11440)

    • Errors could occur when performing GROUP BY on calculated values of a single row table. These could sometimes cause the server to crash on Windows. (Bug#11414)

    • Server crashed when using GROUP BY on the result of a DIV operation on a DATETIME value. (Bug#11385)

    • Manually inserting a row with host='' into mysql.tables_priv and performing a FLUSH PRIVILEGES would cause the server to crash. (Bug#11330)

    • Possible NULL values in BLOB columns could crash the server when a BLOB was used in a GROUP BY query. (Bug#11295)

    • Optimizer performed range check when comparing unsigned integers to negative constants, could cause errors. (Bug#11185)

    • Some internal functions did not take into account that, for multi-byte character sets, CHAR and VARCHAR columns could exceed 255 bytes, which could cause the server to crash. (Bug#11167)

    • Testing for crypt() support caused compilation problems when using OpenSSL/yaSSL on HP-UX and Mac OS X. (Bug#11150, Bug#10675)

    • The NULLIF() function could produce incorrect results if the first argument was NULL. (Bug#11142)

    • mysqld_safe would sometimes fail to remove the pid file for the old mysql process after a crash. As a result, the server would fail to start due to a false A mysqld process already exists... error. (Bug#11122)

    • SHOW WARNINGS with a LIMIT 0 clause returned all messages rather than an empty result set. (Bug#11095)

    • The server could crash due to an attempt to allocate too much memory when GROUP BY blob_col and COUNT(DISTINCT) were used. (Bug#11088)

    • A CREATE TABLE db_name.tbl_name LIKE ... statement would crash the server when no database was selected. (Bug#11028)

    • The mysql_config script did not handle symbolic linking properly. (Bug#10986)

    • The value returned by the FIELD() function was incorrect when its parameter list contained one or more instances of NULL. (Bug#10944)

    • The host name cache was not working. (Bug#10931)

    • INSERT ... SELECT ... ON DUPLICATE KEY UPDATE produced inaccurate results. (Bug#10886)

    • A three byte buffer overflow in the client functions caused improper exiting of the client when reading a command from the user. (Bug#10841)

    • The mysql client would output a prompt twice following input of very long strings, because it incorrectly assumed that a call to the _cgets() function would clear the input buffer. (Bug#10840)

    • Setting @@sql_mode = NULL caused an erroneous error message. (Bug#10732)

    • Inserting a DOUBLE value into a utf8 string column crashed the server on Windows. (Bug#10714)

    • On Mac OS X, libmysqlclient_r.a now is built with --fno-common to make it possible to link a shared two-level namespace library against libmysqlclient_r.a. (Bug#10638)

    • InnoDB wrongly reported in the .err log that MySQL wass trying to drop a nonexistent table, if no more room remained in the tablespace. (Bug#10607)

    • Executing LOAD INDEX INTO CACHE for a table while other threads where selecting from the table caused a deadlock. (Bug#10602)

    • DES_ENCRYPT() and DES_DECRYPT() require SSL support to be enabled, but were not checking for it. Checking for incorrect arguments or resource exhaustion was also improved for these functions. (Bug#10589)

    • The LAST_DAY() failed to return NULL when supplied with an invalid argument. See Section 11.6, “Date and Time Functions”. (Bug#10568)

    • INSERT ... ON DUPLICATE KEY UPDATE with MERGE tables, which do not have unique indexes, caused the server to crash. (Bug#10400)

    • A problem with the my_global.h file caused compilation of MySQL to fail on single-processor Linux systems running 2.6 kernels. (Bug#10364)

    • SUBSTRING() did not work properly for input in the ucs2 character set. (Bug#10344)

    • DROP DATABASE failed check for all referencing InnoDB tables from other databases before dropping any tables. (Bug#10335)

    • mysqldump crashed using the --complete-insert option while dumping tables with a large number of long column names. (Bug#10286)

    • When used within a subquery, SUBSTRING() returned an empty string. (Bug#10269)

    • Queries against a table using a compound index based on the length of a UTF-8 text column produced incorrect results. For example, given a table with an index defined as shown:

      CREATE TABLE t (
        id INT NOT NULL,
        city VARCHAR(20) NOT NULL,
        KEY (city(7),id)
      ) TYPE=MYISAM CHARACTER SET=utf8;
      

      Assuming that suitable data has been inserted into the table, then a query such as SELECT * FROM t WHERE city = 'Durban'; would fail. (Bug#10253)

    • Using #pragma interface or #pragma implementation in source files caused portability issues for cygwin. (Bug#10241)

    • A simultaneous CREATE TABLE ... SELECT FROM table and ALTER TABLE table on the same table caused the server to crash. (Bug#10224)

    • Under certain rare circumstances, inserting into the mysql.host table could cause the server to crash. (Bug#10181)

    • For MEMORY tables, it was possible for updates to be performed using outdated key statistics when the updates involved only very small changes in a very few rows. This resulted in the random failures of queries such as UPDATE t SET col = col + 1 WHERE col_key = 2; where the same query with no WHERE clause would succeed. (Bug#10178)

    • CASE operator returns incorrect result when its arguments are not constants and its return value is put into a regular or temporary table (temporary == created by SQL engine for UNION/nonindexed GROUP BY and such operations). (Bug#10151)

    • When used in joins, SUBSTRING() failed to truncate to zero those string values that could not be converted to numbers. (Bug#10124)

    • For a UNION that involved long string values, values were not being converted correctly to TEXT values. (Bug#10025)

    • An overly strict debugging assertion caused debug server builds to fail for some col_name = const_expr, where const_expr was a constant expression such as a subquery. (Bug#10020)

    • The handling by the HEX() function of numbers larger than 264 was improved. (Bug#9854)

    • A problem with the cp1250_czech_cs collation caused some LIKE comparisons to fail. (Bug#9759)

    • On Windows, with lower_case_table_names set to 2, using ALTER TABLE to alter a MEMORY or InnoDB table that had a mixed-case name also improperly changed the name to lowercase. (Bug#9660)

    • mysqldump --xml did not format NULL column values correctly. (Bug#9657)

    • ALTER TABLE ... ENABLE INDEXES treated NULL values as equal when collecting index statistics for MyISAM tables, resulting in different statistics from those generated by ANALYZE TABLE and causing the optimizer to make poor index choices later. The same problem occurred for bulk insert statistics collection. Now NULL values are treated as unequal, just as for ANALYZE TABLE. (Bug#9622)

    • The --no-data option for mysqldump was being ignored if table names were given after the database name. (Bug#9558)

    • MySQL sometimes reported erroneously that certain character values had crashed a table when trying to convert other character sets to UTF-8. (Bug#9557)

    • CREATE TABLE t AS SELECT UUID() created a VARCHAR(12) column, which is too small to hold the 36-character result from UUID(). (Bug#9535)

    • Table names were not handled correctly when lower_case_table_names = 2 if the table name lettercase differed in the FROM and WHERE clauses. (Bug#9500)

    • SHOW WARNINGS did not properly display warnings generated by executing a cached query. (Bug#9414)

    • Incorrect results when searching using IN() where search items included NULL and 0. (Bug#9393)

    • mysqldump could crash for illegal or nonexistent table names. (Bug#9358)

    • SELECT DISTINCT ... GROUP BY constant returned multiple rows (it should return a single row). (Bug#8614)

    • The server timed out SSL connections too quickly on Windows. (Bug#8572)

    • For a MERGE table with MyISAM tables in other, symlinked, databases, SHOW CREATE TABLE reported the MyISAM tables using the name of the symlinked directory rather than the database name. (Bug#8183)

    • OPTIMIZE run on an InnoDB table did not return a Table is full error if there was insufficient room in the tablespace. (Bug#8135)

    • The mysqlhotcopy script was not parsing the output of SHOW SLAVE STATUS correctly when called with the --record_log_pos option. (Bug#7967)

    • An incorrect result was obtained for columns that included an aggregate function as part of an expression, and when WITH ROLLUP was used with GROUP BY. (Bug#7914)

    • Queries with ROLLUP returned wrong results for expressions containingGROUP BY columns. (Bug#7894)

    • A Boolean full-text search where a query contained more query terms than one-third of the query length caused the server to hang or crash. (Bug#7858)

    • GROUP_CONCAT() with DISTINCT and WITH ROLLUP ignored DISTINCT for some rows. (Bug#7405)

    • SHOW FIELDS truncated the TYPE column to 40 characters.

      Note

      This fix was reverted in MySQL 4.1.15 because it broke existing applications.

      (Bug#7142)

      See also Bug#12817.

    • Added a missing mutex when rotating the relay logs. Also, the server now logs an error message if the size of a relay log cannot be read. (Bug#6987)

    • Locking for CREATE TABLE ... SELECT for InnoDB tables was too weak. It allowed INSERT statements issued for the created table while the CREATE TABLE statement was still running to appear in the binary log before the CREATE TABLE statement. (Bug#6678)

    • The incorrect sequence of statements HANDLER tbl_name READ index_name NEXT without a preceding HANDLER tbl_name READ index_name = (value_list) for an InnoDB table resulted in a server crash rather than an error. (Bug#5373)

    B.1.14. Changes in MySQL 4.1.12 (13 May 2005)

    Note

    The fix for interpretation of MERGE table .MRG files (Bug#10687) was made for Windows builds after MySQL 4.1.12 was released and is present in MySQL 4.1.12a.

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    Functionality added or changed:

    • Incompatible Change: The behavior of LOAD DATA INFILE and SELECT ... INTO OUTFILE has changed when the FIELDS TERMINATED BY and FIELDS ENCLOSED BY values both are empty. Formerly, a column was read or written the display width of the column. For example, INT(4) was read or written using a field with a width of 4. Now columns are read and written using a field width wide enough to hold all values in the field. However, data files written before this change was made might not be reloaded correctly with LOAD DATA INFILE for MySQL 4.1.12 and up. This change also affects data files read by mysqlimport and written by mysqldump --tab, which use LOAD DATA INFILE and SELECT ... INTO OUTFILE. For more information, see Section 12.2.5, “LOAD DATA INFILE Syntax”. (Bug#12564)

    • When the server cannot read a table because it cannot read the .frm file, print a message that the table was created with a different version of MySQL. (This can happen if you create tables that use new features and then downgrade to an older version of MySQL.) (Bug#10435)

    • InnoDB: When foreign_key_checks = 0, ALTER TABLE and RENAME TABLE will ignore any type incompatibilities between referencing and referenced columns. Thus, it will be possible to convert the character sets of columns that participate in a foreign key. Be sure to convert all tables before modifying any data! (Bug#9802)

    • New /*> prompt for mysql. This prompt indicates that a /* ... */ comment was begun on an earlier line and the closing */ sequence has not yet been seen. (Bug#9186)

    • InnoDB: When the maximum length of SHOW INNODB STATUS output would be exceeded, truncate the beginning of the list of active transactions, instead of truncating the end of the output. (Bug#5436)

    • Updated version of libedit to 2.9. (Bug#2596)

    • InnoDB: If innodb_locks_unsafe_for_binlog is enabled and the isolation level of the transaction is not set to SERIALIZABLE, InnoDB uses a consistent read for select in clauses such as INSERT INTO ... SELECT and UPDATE ... (SELECT) that do not specify FOR UPDATE or LOCK IN SHARE MODE. Thus, no locks are set to rows read from selected table.

    • Previously in MySQL 4.1, an Illegal mix of collations error occurred when mixing strings from same character set when one had a nonbinary collation and the other a binary collation. Now the binary collation takes precedence, so that both strings are treated as having the binary collation. This restores compatibility with MySQL 4.0 behavior.

    • Added the cp932 Japanese character set.

    • Added a --debug option to my_print_defaults.

    Bugs fixed:

    • Security Fix: Starting mysqld with --user=non_existent_user caused it to run using the privileges of the account from which it was invoked, including the root account. (Bug#9833)

    • Security Fix: mysql_install_db created the mysql_install_db.X file with a predictable file name and insecure permissions, which allowed local users to execute arbitrary SQL statements by modifying the file's contents. (CVE-2005-1636)

    • MySQL Cluster: AUTO_INCREMENT did not work with INSERT..SELECT on NDB tables. (Bug#9675)

    • MERGE tables could fail on Windows due to incorrect interpretation of path name separator characters for file names in the .MRG file. (Bug#10687)

    • CHAR and VARCHAR columns that used the sjis character set were not being saved correctly, causing the following columns to be corrupted. (Bug#10493)

    • Floats and doubles were not handled correctly when using the prepared statement API in the embedded server. (Bug#10443)

    • The --delimiter option for the nds_select program was nonfunctional. (Bug#10287)

    • mysql.cc did not compile correctly using VC++ on Windows. (Bug#10245)

    • In some cases, concurrent DELETE and INSERT...SELECT queries could crash the MySQL server. The issue was a problem in the key cache. (Bug#10167)

    • When SELECT constant was the final SELECT in a UNION, a trailing LIMIT ... worked, but a trailing ORDER BY ... or ORDER BY ... LIMIT ... did not. (Bug#10032)

    • awk script portability problems were found in cmd-line-utils/libedit/makelist.sh . (Bug#9954)

    • The error message for exceeding MAX_CONNECTIONS_PER_HOUR mistakenly referred to max_connections. (Bug#9947)

    • Concurrent inserts were allowed into the tables in the SELECT part of INSERT ... SELECT ... UNION .... This could result in the incorrect order of queries in the binary log. (Bug#9922)

    • For a user-defined function invoked from within a prepared statement, the UDF's initialization routine was invoked for each execution of the statement, but the deinitialization routine was not. (It was invoked only when the statement was closed.) For UDFs that have an expensive deinit function (such as myperl), this fix has negative performance consequences. (Bug#9913)

    • RENAME TABLE for an ARCHIVE table failed if the .arn file was not present. (Bug#9911)

    • mysql.server no longer uses nonportable alias command or LSB functions. (Bug#9852)

    • my_print_defaults was ignoring the --defaults-extra-file option or crashing when the option was given. (Bug#9851, Bug#9136)

    • SELECT ROUND(expr) produced a different result from CREATE TABLE ... SELECT ROUND(expr). (Bug#9837)

    • Starting mysqld with the --skip-innodb and --default-storage-engine=innodb (or --default-table-type=innodb caused a server crash. (Bug#9815)

    • Queries containing CURRENT_USER() incorrectly were registered in the query cache. (Bug#9796)

    • Corrected some failures of prepared statements for SQL (PREPARE plus EXECUTE) to return all rows for some SELECT statements. (Bug#9777, Bug#9096)

    • CREATE TABLE ... LIKE did not work correctly when lower_case_table_names was set on a case-sensitive file system and the source table name was not given in lowercase. (Bug#9761)

    • net_read_timeout and net_write_timeout were not being respected on Windows. (Bug#9721)

    • Use of a subquery that used WITH ROLLUP in the FROM clause of the main query sometimes resulted in a Column cannot be null error. (Bug#9681)

    • InnoDB: Assertion failures of types ut_a(cursor->old_stored == BTR_PCUR_OLD_STORED) and prebuilt->template_type == 0 could occur when performing multi-table updates. This bug was introduced in 4.1.10 and 4.0.24. (Bug#9670)

    • An error occurred if you specified a default value of TRUE or FALSE for a BOOL column. (Bug#9666)

    • A server installed as a Windows service and started with --shared-memory could not be stopped. (Bug#9665)

    • A problem with readlinecaused the mysql client to crash when the user pressed Control-R.. (Bug#9568)

    • Memory block allocation did not function correctly for the query cache in the embedded server. (Bug#9549)

    • ENUM and SET columns in InnoDB tables were treated incorrectly as character strings. This bug did not manifest itself with latin1 collations, but it caused malfunction with utf8. Old tables will continue to work. In new tables, ENUM and SET will be stored internally as unsigned integers. (Bug#9526)

    • A segmentation fault in mysqlcheck occurred when the last table checked in --auto-repair mode returned an error (such as the table being a MERGE table). (Bug#9492)

    • myisampack run on 64-bit systems resulted in segmentation violations. (Bug#9487)

    • Changed metadata for result of SHOW KEYS: Data type for Sub_part column now is SMALLINT rather than TINYINT because key part length can be longer than 255. (Bug#9439)

    • An InnoDB test suite failure was caused by a locking conflict between two server instances at server shutdown or startup. This conflict on advisory locks appears to be the result of a bug in the operating system; these locks should be released when the files are closed, but somehow that does not always happen immediately in Linux. (Bug#9381)

    • The optimizer did not compute the union of two ranges for the OR operator correctly. (Bug#9348)

    • MAX() for an INT UNSIGNED (unsigned 4-byte integer) column could return negative values if the column contained values larger than 231. (Bug#9298)

    • Indexes on MyISAM tables could sometimes be corrupted; this was the result of padding values with blanks for comparison: Dumping a table with mysqldump, reloading it, and then re-running the binary log against it crashed the index and required a repair. (Bug#9188)

    • mysqldump dumped core when invoked with --tmp and --single-transaction options and a nonexistent table name. (Bug#9175)

    • Multiple-table updates could produce spurious data-truncation warnings if they used a join across columns that are indexed using a column prefix. (Bug#9103)

    • Extraneous comparisons between NULL values in indexed columns were performed by the optimzer for operators such as = that are never true for NULL. (Bug#8877)

    • The server did not compile correctly with MinGW. Our thanks to Nils Durner for the patch. (Bug#8872)

    • In the client/server protocol for prepared statements, reconnection failed when the connection was killed with reconnection enabled. (Bug#8866)

    • The warning message from GROUP_CONCAT() did not always indicate the correct number of lines. (Bug#8681)

    • Remove extra slashes in --tmpdir value (for example, convert /var//tmp to /var/tmp, because they caused various errors. (Bug#8497)

    • MySQL no longer automatically blocks IP numbers for which gethostbyname_r() fails when the reason is that the DNS server is down. Thanks to Jeremy Cole for patch. (Bug#8467)

    • An error in the implementation of the MyISAM compression algorithm caused myisampack to fail with very large sets of data (total size of all the records in a single column needed to be at least 3 GB in order to trigger this issue). (Bug#8321)

    • TIMEDIFF() with a negative time first argument and positive time second argument produced incorrect results. (Bug#8068)

    • A deadlock could occur on an update followed by a SELECT on an InnoDB table without any explicit locks being taken. InnoDB now takes an exclusive lock when INSERT ON DUPLICATE KEY UPDATE is checking duplicate keys. (Bug#7975)

    • configure did not check the system for atomic operations capabilities. (Bug#7970)

    • A deadlock resulted from using FLUSH TABLES WITH READ LOCK while an INSERT DELAYED statement was in progress. (Bug#7823)

    • INSERT ... ON DUPLICATE KEY UPDATE incorrectly updated a TIMESTAMP column to the current timestamp, even if the update list included col_name = col_name for that column to prevent the update. (Bug#7806)

    • Additional fix for mysql_server_init() and mysql_server_end() C API functions so that stopping and restarting the embedded server would not cause a crash. (Bug#7344)

    • Setting the initial AUTO_INCREMENT value for an InnoDB table using CREATE TABLE ... AUTO_INCREMENT = n did not work, and ALTER TABLE ... AUTO_INCREMENT = n did not reset the current value. (Bug#7061)

    • CAST(string_argument AS UNSIGNED) didn't work for big integers above the signed range. Now this function and CAST(string_argument AS SIGNED) also produces warnings for wrong string arguments. (Bug#7036)

    • The latin2_croatian_ci collation was not sorted correctly. After upgrading to MySQL 4.1.12, all tables that have indexes using this collation are treated as crashed; for each such table, you must use CHECK TABLE and possibly repair the table.

      Support for the cp1250_croatian_ci collation was also added as part of the fix for this bug. (Bug#6505)

    • For MERGE tables, avoid writing absolute path names in the .MRG file for the names of the constituent MyISAM tables so that if the data directory is moved, MERGE tables will not break. For mysqld, write just the MyISAM table name if it is in the same database as the MERGE table, and a path relative to the data directory otherwise. For the embedded servers, absolute path names may still be used. (Bug#5964)

    • mysqld was not checking whether the PID file was successfully created. (Bug#5843)

    • InnoDB: Prevent ALTER TABLE from changing the storage engine if there are foreign key constraints on the table. (Bug#5574, Bug#5670)

    • With DISTINCT CONCAT(col,...) returned incorrect results when the arguments to CONCAT() were columns with an integer data type declared with a display width narrower than the values in the column. (For example, if an INT(1) column contain 1111.) (Bug#4082)

    • configure did not properly recognize whether NPTL was available on Linux. (Bug#2173)

    • InnoDB: Add fault tolerance in the scan of .ibd files at a crash recovery; formerly a single failure of readdir_get_next caused the rest of the directory to be skipped.

    • InnoDB: Crash recovery of .ibd files on Windows did not work correctly if lower_case_table_names = 0or lower_case_table_names = 2 had been used; the directory scan used in crash recovery failed to force all paths to lower case, so that the tablespace name was consistent with the InnoDB internal data dictionary.

    • InnoDB: At shutdown, the latest lsn is now written only to the first pages of the ibdata files of the system tablespace, and not to the .ibd files, saving up to several minutes in some cases.

    B.1.15. Changes in MySQL 4.1.11 (01 April 2005)

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    Functionality added or changed:

    • Replication: MySQL Cluster: Added a new global system variable slave_transaction_retries: If the replication slave SQL thread fails to execute a transaction because of an InnoDB deadlock or exceeded InnoDB's innodb_lock_wait_timeout or NDBCLUSTER's TransactionDeadlockDetectionTimeout or TransactionInactiveTimeout, it automatically retries slave_transaction_retries times before stopping with an error. The default is 0, and you must explicitly set the value greater than 0 to enable the “retry” behavior. (Bug#8325)

    • MySQL Cluster: More informative error messages are provided when a query is issued against an NDB table that has been modified by another mysqld server. (Bug#6762)

    • Replication: For slave replication servers started with --replicate-* options, statements that should not be replicated according those options no longer are written to the slave's general query log. (Bug#8297)

    • The use of SESSION or GLOBAL is now disallowed for user variables. (Bug#9286)

    • mysqld_safe will create the directory where the UNIX socket file is to be located if the directory does not exist. This applies only to the last component of the directory path name. (Bug#8513)

    • ONLY_FULL_GROUP_BY no longer is included in the ANSI composite SQL mode. (Bug#8510)

    • Added sql_notes session variable to cause Note-level warnings not to be recorded. (Bug#6662)

    • Modified the parser to allow SELECT statements following the UNION keyword to be subqueries in parentheses. (Bug#2435)

    • InnoDB: Commit after every 10,000 copied rows when executing CREATE INDEX, DROP INDEX or OPTIMIZE TABLE, which are internally implemented as ALTER TABLE. This makes it much faster to recover from an aborted operation.

    • User variable coercibility has been changed from “coercible” to “implicit.” That is, user variables have the same coercibility as column values.

    • Added --with-big-tables compilation option to configure. (Previously it was necessary to pass -DBIG_TABLES to the compiler manually in order to enable large table support.) See Section 2.9.2, “Typical configure Options”, for details.

    • The coercibility for the return value of functions such as USER() or VERSION() now is “system constant” rather than “implicit.” This makes these functions more coercible than column values so that comparisons of the two do not result in Illegal mix of collations errors. COERCIBILITY() was modified to accommodate this new coercibility value. See Section 11.10.3, “Information Functions”.

    • Added configuration directives !include and !includedir for including option files and searching directories for option files. See Section 4.2.3.3, “Using Option Files”, for usage.

    • NULL now is considered more coercible than string constants. This resolves some Illegal mix of collations conflicts.

    Bugs fixed:

    • Replication: If multiple semicolon-separated statements were received in a single packet, they were written to the binary log as a single event rather than as separate per-statement events. For a server serving as a replication master, this caused replication to fail when the event was sent to slave servers. (Bug#8436)

    • Replication: A replication master stamped a generated statement (such as a SET statement) with an error code intended only for another statement. This could happen, for example, when a statement generated a duplicate key error on the master but still had be to replicated to the slave. (Bug#8412)

    • Replication: If the slave was running with --replicate-*-table options which excluded one temporary table and included another, and the two tables were used in a single DROP TEMPORARY TABLE IF EXISTS statement, as the ones the master automatically writes to its binary log upon client's disconnection when client has not explicitly dropped these, the slave could forget to delete the included replicated temporary table. Only the slave needs to be upgraded. (Bug#8055)

    • Replication: Treat user variables as having IMPLICIT derivation (coercibility) to avoid “Illegal mix of collations” errors when replicating user variables. (Bug#6676)

    • For MyISAM tables, REPAIR TABLE no longer discard rows that have incorrect checksum. (Bug#9824)

    • Fixed option-parsing code for the embedded server to understand K, M, and G suffixes for the net_buffer_length and max_allowed_packet options. (Bug#9472)

    • Some user variables were not being handled with “implicit” coercibility. (Bug#9425)

    • Using TIMESTAMP columns with no minute or second parts in GROUP BY clauses with the new system variable set to 1 caused the server to crash. (Bug#9401)

    • Allow extra HKSCS and cp950 characters (big5 extension characters) to be accepted in big5 columns. (Bug#9357)

    • Subqueries using ALLor ANY that contained a HAVING clause did not work correctly. (Bug#9350)

    • BLOB(M) and TEXT(M) columns, with M less than 256, were being created as BLOB and TEXT columns rather than TINYBLOB or TINYTEXT columns. (Bug#9303)

    • InnoDB: If MySQL wrote to its binlog, but for some reason trx->update_undo and trx->insert_undo were NULL in InnoDB, then trx->commit_lsn was garbage, and InnoDB could assert in the log flush of trx_commit_complete_for_mysql(). (Bug#9277)

    • The utf8_spanish2_ci and ucs2_spanish2_ci collations no longer consider r equal to rr . If you upgrade to this version from an earlier version, you should rebuild the indexes of any affected tables. (Bug#9269)

    • Depending on index statistics, GROUP BY col1, col2, ... could return incorrect results if the first table processed for a join had several indexes that cover the grouped columns. (Bug#9213)

    • OPTIMIZE TABLE was written twice to the binary log when used on InnoDB tables. (Bug#9149)

    • The CHARSET(), COLLATION(), and COERCIBILITY() functions sometimes returned NULL. CHARSET() and COLLATION() returned NULL when given any of these arguments that evaluated to NULL: A system function such as DATABASE(); a column value; and a user variable. Now CHARSET() and COLLATION() return the system character set and collation; the column character set and collation; and binary. COERCIBILITY(NULL) now returns “ignorable” coercibility rather than NULL. (Bug#9129)

    • mysqldump misinterpreted “ _ ” and “ % ” characters in the names of tables to be dumped as wildcard characters. (Bug#9123)

    • Bundled zlib in the source distribution was upgraded to 1.2.2. (Bug#9118)

    • Setting the max_error_count system variable to 0 resulted in a setting of 1. (Bug#9072)

    • The use of XOR together with NOT ISNULL() erroneously resulted in some outer joins being converted to inner joins by the optimizer. (Bug#9017)

    • MIN(col_name) and MAX(col_name) could fail to produce the correct result if col_name was contained in multiple indexes and the optimizer did not choose the first index that contained the column. (Bug#8893)

    • Using a compariosn where the left expression of IN, ALL, or ANY was a subquery caused the server to crash (Bug#8888)

    • When using the cp1250_czech_cs collation, empty literal strings were not regarded as equal to empty character columns. (Bug#8840)

    • Binary data stored in BLOB or BINARY columns would be erroneously dumped if mysqldump was invoked with --hex-blob and --skip-extended-insert arguments. This happened if data contained characters larger then 0x7F . (Bug#8830)

    • Using NOW() in a subquery caused the server to crash. (Bug#8824)

    • In prepared statements, subqueries containing parameters were erroneously treated as const tables during preparation, resulting in a server crash. (Bug#8807)

    • Killing a filesort could cause an assertion failure. (Bug#8799)

    • Expressions involving nested CONCAT() calls and character set conversion of string constants could return an incorrect result. (Bug#8785)

    • Do not try to space-pad BLOB columns containing ucs2 characters. (Bug#8771)

      This regression was introduced by Bug#7350.

    • If max_join_size was set, a query containing a subquery that exceeded the examined-rows limit could hang. (Bug#8726)

    • Table creation for a MyISAM table failed if DATA DIRECTORY or INDEX DIRECTORY options were given that specified the path name to the database directory where the table files would be created by default. (Bug#8707)

    • A rare race condition could cause FLUSH TABLES WITH READ LOCK to hang. (Bug#8682)

    • InnoDB: If one used LOCK TABLES, created an InnoDB temp table, and did a multiple-table update where a MyISAM table was the update table and the temp table was a read table, then InnoDB asserted in row0sel.c because n_mysql_tables_in_use was 0. Also, we remove the assertion altogether and just print an error to the .err log if this important consistency check fails. (Bug#8677)

    • AES_DECRYPT(col_name,key) could fail to return NULL for invalid values in col_name, if col_name was declared as NOT NULL. (Bug#8669)

    • Use of GROUP_CONCAT(x) in a subquery, where x was an alias to a column in the outer query, resulted in a server crash. (Bug#8656)

    • Too many rows were returned from queries that combined ROLLUP and LIMIT if SQL_CALC_FOUND_ROWS was given. (Bug#8617)

    • Incorrect results were returned from queries that combined SELECT DISTINCT, GROUP BY , and ROLLUP. (Bug#8616)

    • Queries that combined SELECT DISTINCT, SUM(), and ROLLUP could cause the MySQL server to crash. (Bug#8615)

    • A join on two tables failed when each contained a BIGINT UNSIGNED column that were compared when their values exceeded 263 – 1. The match failed and the join returned no rows. (Bug#8562)

    • LIKE pattern-matching for strings did not work correctly with the cp1251_bin collation. (Bug#8560)

    • MATCH ... AGAINST in natural language mode could cause a server crash if the FULLTEXT index was not used in a join (that is, EXPLAIN did not show fulltext join mode) and the search query matched no rows in the table. (Bug#8522)

    • perror was printing a spurious extra line of output ("Error code ###: Unknown error ###" printed directly before the correct line with the error message). (Bug#8517)

    • The tee command could sometimes cause the mysql client to crash. (Bug#8499)

    • The MEMORY storage engine did not properly increment an AUTO_INCREMENT column if there was a second composite index that included the column. (Bug#8489)

    • REPAIR TABLE did not invalidate query results in the query cache that were generated from the table. (Bug#8480)

    • For a statement string that contained multiple slow queries, only the last one would be written to the slow query log. (Bug#8475)

    • When the server was started with --skip-name-resolve, specifying host name values that included netmasks in GRANT statements did not work. (Bug#8471)

    • The Cyrillic letters I (И) and SHORT I (Й) were treated as being the same character by the utf8_general_ci collation. (Bug#8385)

    • With a database was dropped with lower_case_table_names = 2, tables in the database also were dropped but not being flushed properly from the table cache. If the database was re-created, the tables also would appear to have been re-created. (Bug#8355)

    • When performing boolean full-text searches on utf8 columns, a double-quote character in the search string caused the server to crash. (Bug#8351)

    • The MAX_CONNECTIONS_PER_HOUR resource limit was not being reset hourly and thus imposed an absolute limit on number of connections per account until the server is restarted or the limits flushed. (Bug#8350)

    • The --set-character-set option for myisamchk was changed to --set-collation. The value needed for specifying how to sort indexes is a collation name, not a character set name. (Bug#8349)

    • Corruption of MyISAM table indexes could occur with TRUNCATE TABLE if the table had already been opened. For example, this was possible if the table had been opened implicitly by selecting from a MERGE table that mapped to the MyISAM table. The server now issues an error message for TRUNCATE TABLE under these conditions. (Bug#8306)

    • In string literals with an escape character (“ \ ”) followed by a multi-byte character that has a second byte of “ \ ”, the literal was not interpreted correctly. The next character now is escaped, not just the next byte. (Bug#8303)

    • On Windows, create shared memory objects with the proper access rights to make them usable when the client and server are running under different accounts. (Bug#8226)

    • For a query with both GROUP BY and COUNT(DISTINCT) clauses and a FROM clause with a subquery, NULL was returned for any VARCHAR column selected by the subquery. (Bug#8218)

    • With lower_case_table_names set to 1, mysqldump on Windows could write the same table name in different lettercase for different SQL statements. (Bug#8216)

    • Matching of table names by mysqlhotcopy now accommodates DBD::mysql versions 2.9003 and up, which implement identifier quoting. (Bug#8136)

    • Creating a table using a name containing a character that is illegal in character_set_client resulted in the character being stripped from the name and no error. The character now is considered an error. (Bug#8041)

    • mysqldump now avoids writing SET NAMES to the dump output if the server is older than version 4.1 and would not understand that statement. (Bug#7997)

    • Mixed-case database and table names in the grant tables were ignored for authentication if the lower_case_table_names system variable was set. GRANT will not create such privileges when lower_case_table_names is set, but it is possible to create them by direct manipulation of the grant tables, or that old grant records were present before setting the variable. (Bug#7989)

    • Accented letters were improperly treated as distinct by the utf_general_ci collation. (Bug#7878)

    • Conversion of strings to doubles is now more accurate for floating point values that can be represented by integers, such as 123.45E+02. (Bug#7840)

    • ENUM and SET columns in privilege tables incorrectly had a case-sensitive collation, resulting in failure of assignments of values that did not have the same lettercase as given in the column definitions. The collation was changed to be case insensitive. (Bug#7617)

    • The output of the STATUS (\s) command in mysql had the values for the server and client character sets reversed. (Bug#7571)

    • A problem in index cost calculation caused a USE INDEX or FORCE INDEX hint not to be used properly for a LEFT JOIN across indexed BLOB columns. (Bug#7520)

    • Ordering by an unsigned expression (more complex than a column reference) was treating the value as signed, producing incorrectly sorted results. HAVING was also treating unsigned columns as signed. (Bug#7425)

    • Changed mysql_server_end() C API function to restore more variables to their initial state so that a subsequent call to mysql_server_init() would not cause a client program crash. (Bug#7344)

    • Made the relay_log_space_limit system variable show up in the output of SHOW VARIABLES. (Bug#7100)

    • An expression that tested a case-insensitive character column against string constants that differed in lettercase could fail because the constants were treated as having a binary collation. (For example, WHERE city='London' AND city='london' could fail.) (Bug#7098, Bug#8690)

    • When setting integer system variables to a negative value with SET VARIABLES, the value was treated as a positive value modulo 232. (Bug#6958)

    • If a MyISAM table on Windows had INDEX DIRECTORY or DATA DIRECTORY table options, mysqldump dumped the directory path names with single-backslash path name separators. This would cause syntax errors when importing the dump file. mysqldump now changes “ \ ” to “ / ” in the path names on Windows. (Bug#6660)

    • Incorrectly ordered results were returned from a query using a FULLTEXT index to retrieve rows and there was another index that was usable for ORDER BY. For such a query, EXPLAIN showed the fulltext join type, but showed the other (not FULLTEXT) index in the Key column. (Bug#6635)

    • Neither SHOW ERRORS nor SHOW WARNINGS were displaying Error-level messages. (Bug#6572)

    • Retrieving from a view defined as a SELECT that mixed UNION ALL and UNION DISTINCT resulted in a different result than retrieving from the original SELECT. (Bug#6565)

    • A problem with static variables did not allow building the server on Fedora Core 3. (Bug#6554)

    • Unions between binary and nonbinary columns failed due to a a collation coercibility problem. (Bug#6519)

    • The CHAR() function was not ignoring NULL arguments, contrary to the documentation. (Bug#6317)

    • FOUND_ROWS() returned an incorrect value for preceding SELECT statements that used no table or view. (Bug#6089)

    • InnoDB: Honor the --tmpdir startup option when creating temporary files. Previously, InnoDB temporary files were always created in the temporary directory of the operating system. On Netware, InnoDB will continue to ignore --tmpdir. (Bug#5822)

    • The bundled readline library caused a segmentation fault in mysql when the user entered Shift+Enter. (Bug#5672)

    • The data type for MAX(datetime_col) was returned as VARCHAR rather than DATETIME if the query included a GROUP BY clause. (Bug#5615)

    • Worked around a bug in support for NSS support in glibc when static linking is used and LDAP is one of the NSS sources. The workaround is to detect when the bug causes a segmentation fault and issue a diagnostic message with information about the problem. (Bug#4872, Bug#3037)

    • If the mysql prompt was configured to display the default database name, and that database was dropped, mysql did not update the prompt. (Bug#4802)

    • Platform and architecture information in version information produced for --version option on Windows was always Win95/Win98 (i32). More accurately determine platform as Win32 or Win64 for 32-bit or 64-bit Windows, and architecture as ia32 for x86, ia64 for Itanium, and axp for Alpha. (Bug#4445)

    • Host name matching didn't work if a netmask was specified for table-specific privileges. (Bug#3309)

    • InnoDB: An error in mysqld caused InnoDB in MySQL 4.1.8 to 4.1.10 InnoDB to refuse to use a table created with MySQL 3.23.49 or earlier if it was in the new compact InnoDB table format of 5.0.3 or later.

      Workaround.  Upgrade to 4.1.11 or newer, or dump the table and re-create it with MySQL 3.23.50 or newer before upgrading.

    • InnoDB: A table with a primary key that contained at least two column prefixes was prone to memory corruption. An example of an affected CREATE TABLE statement is shown here:

      CREATE TABLE t  (
          a CHAR(100),
          b TINYBLOB,
          PRIMARY KEY(a(5), b(10))
      );

    • InnoDB: If InnoDB cannot allocate memory, keep retrying for 60 seconds before we intentionally crash mysqld; maybe the memory shortage is just temporary.

    • my_print_defaults ignored the --defaults-extra-file and --defaults-file options.

    • Privileges could be escalated via database wildcards in GRANT statements. (CVE-2004-0957)

    • InnoDB: Work around a problem in AIX 5.1 patched with ML7 security patch: InnoDB would refuse to open its ibdata files, complaining about an operating system error 0.

    B.1.16. Changes in MySQL 4.1.10 (12 February 2005)

    Note

    The security improvements related to creation of table files and to user-defined functions were made after MySQL 4.1.10 was released and are present in MySQL 4.1.10a. We would like to thank Stefano Di Paola for making us aware of these.

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    Functionality added or changed:

    • Thread stack size was increased from 192KB to 256KB on Linux/IA-64 (too small stack size was causing server crashes on some queries). (Bug#8391)

    • Setting the connection collation to a value different from the server collation followed by a CREATE TABLE statement that included a quoted default value resulted in a server crash. (Bug#8235)

    • The server now issues a warning when lower_case_table_names = 2 and the data directory is on a case-sensitive file system, just as when lower_case_table_names = 0 on a case-insensitive file system. (Bug#7887)

    • The server now issues a warning to the error log when it encounters older tables that contain character columns that might be interpreted by newer servers to have a different column length. See Section 2.11.1.1, “Upgrading from MySQL 4.0 to 4.1”, for a discussion of this problem and what to do about it. (Bug#6913)

    • Added mysql_library_init() and mysql_library_end() as synonyms for the mysql_server_init() and mysql_server_end() C API functions. mysql_library_init() and mysql_library_end() are #define symbols, but the names more clearly indicate that they should be called when beginning and ending use of a MySQL C API library no matter whether the application uses libmysqlclient or libmysqld. (Bug#6149)

    • InnoDB: Relaxed locking in INSERT ... SELECT, single table UPDATE ... (SELECT) and single table DELETE ... (SELECT) clauses when innodb_locks_unsafe_for_binlog is used and isolation level of the transaction is not SERIALIZABLE. InnoDB uses consistent read in these cases for a selected table.

    • From the Windows distribution, predefined accounts without passwords for remote users ("root@%", "@%") were removed (other distributions never had them).

    • InnoDB: When MySQL/InnoDB is compiled on Mac OS X 10.2 or earlier, detect the operating system version at run time and use the fcntl() file flush method on Mac OS X versions 10.3 and later. In Mac OS X, fsync() does not flush the write cache in the disk drive, but the special fcntl() does; however, the flush request is ignored by some external devices. Failure to flush the buffers may cause severe database corruption at power outages.

    • Security improvement: User-defined functions should have at least one symbol defined in addition to the xxx symbol that corresponds to the main xxx() function. These auxiliary symbols correspond to the xxx_init(), xxx_deinit(), xxx_reset(), xxx_clear(), and xxx_add() functions. mysqld by default no longer loads UDFs unless they have at least one auxiliary symbol defined in addition to the main symbol. The --allow-suspicious-udfs option controls whether UDFs that have only an xxx symbol can be loaded. By default, the option is off. mysqld also checks UDF file names when it reads them from the mysql.func table and rejects those that contain directory path name separator characters. (It already checked names as given in CREATE FUNCTION statements.) See Section 18.2.2.1, “UDF Calling Sequences for Simple Functions”, Section 18.2.2.2, “UDF Calling Sequences for Aggregate Functions”, and Section 18.2.2.6, “User-Defined Function Security Precautions”. Thanks to Stefano Di Paola for finding and informing us about this issue. (CVE-2005-0709, CVE-2005-0710)

    • Added back faster subquery execution from 4.1.8. This adds also back a bug from 4.1.8 in comparing NULL to the value of a subquery. See Section A.1.8.4, “Open Issues in MySQL”.

    • Security improvement: The server creates .frm, .MYD, .MYI, .MRG, .ISD, and .ISM table files only if a file with the same name does not already exist. Thanks to Stefano Di Paola for finding and informing us about this issue. (CVE-2005-0711)

    • InnoDB: A shared record lock (LOCK_REC_NOT_GAP) is now taken for a matching record in the foreign key check because inserts can be allowed into gaps.

    Bugs fixed:

    • Replication: Multiple-table updates did not replicate properly to slave servers where --replicate-*-table options had been specified. (Bug#7011)

    • LOAD INDEX statement now loads the index into memory. (Bug#8452)

    • DELETE FROM tbl_name ... WHERE ... ORDER BY tbl_name.col_name when the ORDER BY column was qualified with the table name caused the server to crash. (Bug#8392)

    • Cardinality estimates for HASH indexes of TEMPORARY tables created using MEMORY storage engine were inaccurate. As a result, queries that were using this index (as shown by EXPLAIN) could returned incorrect results. (Bug#8371)

    • If multiple prepared statements were executed without retrieving their results, executing one of them again would cause the client program to crash. (Bug#8330)

    • Certain joins used with boolean full-text search could cause the server to crash. (Bug#8234)

    • Add description of debug command to mysqladmin help output. (Bug#8207)

    • Removed a dependence of boolean full-text search on --default-character-set option. (Bug#8159)

    • Modify SET statements produced by mysqldump to write quoted strings using single quotes rather than double quotes. This avoids problems if the dump file is reloaded while the ANSI_QUOTES SQL mode is in effect. (Bug#8148)

    • Strings that began with CHAR(31) were considered equal to the empty string. (Bug#8134)

    • Re-execution of prepared statements containing subqueries caused the server to crash. (Bug#8125)

    • Certain correlated subqueries with forward references (referring to an alias defined later in the outer query) could crash the server. (Bug#8025)

    • Corrected a problem with references to DUAL where statements such as SELECT 1 AS a FROM DUAL would succeed but statements such as SELECT 1 AS a FROM DUAL LIMIT 1 would fail. (Bug#8023)

    • Comparing a nested row expression (such as ROW(1,(2,3))) with a subquery caused the server to crash. (Bug#8022)

    • InnoDB: Fixed a bug introduced in 4.1.9, where, if you used innodb_file_per_table with the Windows version of MySQL, mysqld stopped with Windows error 87. (See the Bugs database or the MySQL 4.1.9 changelog for information about a workaround for the issue in 4.1.9). (Bug#8021)

    • The number of columns in a row comparison against a subquery was calculated incorrectly. (Bug#8020)

    • mysqld had problems finding its language files if the --basedir value was specified as a very long path name. (Bug#8015)

    • mysql_stmt_close() C API function was not clearing an error indicator when a previous prepare call failed, causing subsequent invocations of error-retrieving calls to indicate spurious error values. (Bug#7990)

    • Executing a multi-statement query more than once with the query cache active could yield incorrect result sets. (Bug#7966)

    • A slave running MySQL 3.23.51 or newer hung while trying to connect to a master running MySQL 3.23.50 or older. (The reason for this was a bug in the old masters — SELECT @@unknown_var caused the server to hang — which was fixed in MySQL 3.23.50.) (Bug#7965)

    • Erroneous output resulted from SELECT DISTINCT combined with a subquery and GROUP BY. (Bug#7946)

    • FOUND_ROWS() returned an incorrect value after a SELECT SQL_CALC_FOUND_ROWS DISTINCT statement that selected constants and included GROUP BY and LIMIT clauses. (Bug#7945)

    • SHOW INDEX reported Sub_part values in bytes rather than characters for columns with a multi-byte character set. (Bug#7943)

    • Changed mysql client so that including \p as part of a prompt command uses the name of the shared memory connection when the connection is using shared memory. (Bug#7922)

    • If one used CONVERT_TZ() function in SELECT, which in its turn was used in CREATE TABLE statements, then system time zone tables were added to list of tables joined in SELECT and thus erroneous result was produced. (Bug#7899)

    • Comparing the result of a subquery to a nonexistent column caused the server to crash. This issue affected MySQL on Windows platforms only. (Bug#7885)

    • ALTER TABLE improperly accepted an index on a TIMESTAMP column that CREATE TABLE would reject. (Bug#7884)

    • MySQL allowed concurrent updates (including inserts and deletes) to a table if binary logging was enabled. Now, all updates are executed in a serialized fashion, because they are executed serialized when the binary log is replayed. (Bug#7879)

    • Ensured that mysqldump --single-transaction sets its transaction isolation level to REPEATABLE READ before proceeding (otherwise if the MySQL server was configured to run with a default isolation level lower than REPEATABLE READ it could give an inconsistent dump). (Bug#7850)

    • InnoDB: ALTER TABLE ... ADD CONSTRAINT PRIMARY KEY ... complained about bad foreign key definition. (Bug#7831)

    • mysqlbinlog forgot to add backquotes around the collation of user variables (causing later parsing problems as BINARY is a reserved word). (Bug#7793)

    • A Table is full error occurred when the table was still smaller than max_heap_table_size. (Bug#7791)

    • Multiple-table UPDATE statements could cause spurious Table '#sql_....' is full errors if the number of rows to update was sufficiently large. (Bug#7788)

    • Conversion of floating-point values to character values was not performed correctly when the absolute value of the float was less than 1 (including negative values). (Bug#7774)

    • Use of GROUP_CONCAT() with HAVING caused the server to crash. (Bug#7769)

    • The CONV() function returned an unsigned BIGINT number, which does not fit in 32 bits. (Bug#7751)

    • The IN() operator did not return correct results if all values in the list were constants and some of them used substring functions such as LEFT(), RIGHT(), or MID(). (Bug#7716)

    • The CONVERT_TZ() function, when its second or third argument was from a const table, caused the server to crash. (See Section 12.3.2, “EXPLAIN Syntax”.) (Bug#7705)

    • The TIMEDIFF() function returned incorrect results if one of its arguments had a nonzero microsecond part. (Bug#7586)

    • TIMESTAMP columns with their display width so specified were not treated as identical to DATETIME columns when the server was run in MAXDB mode. (Bug#7418)

    • perror.exe was always returning “Unknown error” on Windows. See Section 4.8.1, “perror — Explain Error Codes”. (Bug#7390)

    • SHOW INDEX on a MERGE table could cause debug versions of the server to crash. (Bug#7377)

    • Corrected the handling of trailing spaces in the ucs2 character set. (Bug#7350)

    • Adding an ORDER BY clause for an indexed column caused a SELECT to return an empty result. (Bug#7331)

    • ALTER TABLE on a TEMPORARY table with a mixed-lettercase name could cause the table to disappear when lower_case_table_names was set to 2. (Bug#7261)

    • For indexes, SHOW CREATE TABLE now displays the index type even if it is the default, for storage engines that support multiple index types. (Bug#7235)

    • Updates were being written to the binary log when there were binlog-do-db or binlog-ignore-db options even when there was no current database, contrary to Section 5.3.4, “The Binary Log”. (Bug#6749)

    • CREATE TABLE ... LIKE failed on Windows when the source or destination table was located in a symlinked database directory. (Bug#6607)

    • Column headers in query results retrieved from the query cache could be corrupted when a non-4.1 client was served a result originally generated for a 4.1 client. The query cache was not keeping track of which client/server protocol was being used. (Bug#6511)

    • Correct a problem with mysql_config, which was failing to produce proper zlib option for linking under some circumstances. (Bug#6273)

    • Nonnumeric values inserted into a YEAR column were being stored as 2000 rather than as 0000. (Bug#6067)

    • mysql_stmt_prepare() was very slow when used in client programs on Windows. (Bug#5787)

    • A HAVING clause that referred to RAND() or a user-defined function in the SELECT part of a query through an alias could cause MySQL to crash or to return an incorrect value. (Bug#5185)

    • Key cache statistics were reported incorrectly by the server after receipt of a SIGHUP signal. (Bug#4285)

    • A problem with UNION statements resulted in the wrong number of examined rows being reported in the slow query log.

    • A symlink vulnerability in the mysqlaccess script was reported by Javier Fernandez-Sanguino Pena and Debian Security Audit Team. (CVE-2005-0004)

    • InnoDB: Use native tmpfile() function on Netware. All InnoDB temporary files are created under sys:\tmp. Previously, InnoDB temporary files were never deleted on Netware.

    • The combination of -not and trunc* operators in a full-text search did not work correctly. Using more than one truncated negative search term caused the result to be empty.

    • InnoDB: A rare race condition could cause an assertion in DROP TABLE or in ALTER TABLE.

    B.1.17. Changes in MySQL 4.1.9 (11 January 2005)

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    Functionality added or changed:

    • mysqld_safe no longer tests for the presence of the data directory when using a relatively located server binary. It just assumes the directory is there, and fails to start up if it is not. This allows the data directory location to be specified on the command line, and avoids running a server binary that was not intended. (Bug#7249)

      See also Bug#7518.

    • The MySQL-shared-compat Linux RPM now includes the 3.23 as well as the 4.0 libysqlclient.so shared libraries. (Bug#6342)

    • The Mac OS X 10.3 installation disk images now include a MySQL Preference Pane for the Mac OS X Control Panel that enables the user to start and stop the MySQL server via the GUI and activate and deactivate the automatic MySQL server startup on bootup.

    • The naming scheme of the Windows installation packages has changed slightly:

      • The platform suffix was changed from -win to -win32

      • The product descriptions -noinstall and -essential have been moved in front of the version number

      Examples: mysql-essential-4.1.9-win32.msi, mysql-noinstall-4.1.9-win32.zip See Section 2.3, “Installing MySQL on Windows”.

    • Seconds_Behind_Master is NULL (which means “unknown”) if the slave SQL thread is not running, or if the slave I/O thread is not running or not connected to master. It is zero if the SQL thread has caught up with the I/O thread. It no longer grows indefinitely if the master is idle.

    • InnoDB: Do not acquire an internal InnoDB table lock in LOCK TABLES if autocommit = 1. This helps in porting old MyISAM applications to InnoDB. InnoDB table locks in that case caused deadlocks very easily.

    • The binary log file and binary log index file now behave like MyISAM when there is a "disk full" or "quota exceeded" error. See Section A.1.4.3, “How MySQL Handles a Full Disk”.

    • The product descriptions -noinstall and -essential have been moved in front of the version number

    • InnoDB: Print a more descriptive error and refuse to start InnoDB if the size of ibdata files is smaller than what is stored in the tablespace header; innodb_force_recovery overrides this.

    • The platform suffix was changed from -win to -win32

    • The MySQL server aborts immediately instead of simply issuing a warning if it is started with the --log-bin option but cannot initialize the binary log at startup (that is, an error occurs when writing to the binary log file or binary log index file).

    Bugs fixed:

    • Replication: A replication slave could crash after replicating many ANALYZE TABLE, OPTIMIZE TABLE, or REPAIR TABLE statements from the master. (Bug#6461, Bug#7658)

    • When encountering a disk full or quota exceeded write error, MyISAM sometimes failed to sleep and retry the write, resulting in a corrupted table. (Bug#7714)

    • Running mysql_fix_privilege_tables could result in grant table columns with lengths that were too short if the server character set had been set to a multi-byte character set first. (Bug#7539)

    • Added a --default-character-set option to mysqladmin to avoid problems when the default character set is not latin1. (Bug#7524)

    • InnoDB: When innodb_file_per_table was enabled in my.cnf, records could disappear from the secondary indexes of a table after mysqld was killed.

      Note

      This fix introduced a new Bug#8021, affecting Windows and users of innodb_file_per_table only. If you are using innodb_file_per_table on Windows, you can work around this new issue by adding the line innodb_flush_method= unbuffered to the my.cnf or my.ini file.

      (Bug#7496)

    • Microseconds were dropped from the string result of the STR_TO_DATE function, when there was some other specifier in the format string following %f. (Bug#7458)

    • mysqladmin password now checks whether the server has --old-passwords turned on or predates 4.1 and uses the old-format password if so. (Bug#7451)

    • Linking both the MySQL client library and IMAP library in the same build failed. (Bug#7428)

    • FLOAT values were not truncated correctly. (Bug#7361)

    • Made the MySQL server accept executing SHOW CREATE DATABASE even if the connection has an open transaction or locked tables. Refusing it made mysqldump --single-transaction sometimes fail to print a complete CREATE DATABASE statement for some dumped databases. (Bug#7358)

    • --expire-logs-days was not honored if using only transactions. (Bug#7236)

    • Include compression library flags in the output from mysql_config --lib_r. (Bug#7021)

    • Corrected a problem with mysql_config not producing all relevant flags from CFLAGS. (Bug#6964)

    • Incorrect results were obtained for complex datetime expressions containing casts of datetime values to TIME or DATE values. (Bug#6914)

    • InnoDB: 32-bit mysqld binaries built on HP-UX 11 did not work with InnoDB files greater than 2 GB in size. (Bug#6189)

    • Corrected a problem with mysqld_safe not properly capturing output from ps. (Bug#5878)

    • PROCEDURE ANALYSE() did not quote some ENUM values properly. (Bug#2813)

    • InnoDB: Use the fcntl(F_FULLFSYNC) flush method on Mac OS X versions 10.3 and up instead of fsync() that could cause corruption at power outages.

    • InnoDB: The storgae of an SQL NULL value in some rare cases took more space than should have been required.

    • InnoDB: Dropping a table where an INSERT was waiting for a lock to check a FOREIGN KEY constraint caused an assertion.

    • InnoDB: When DISCARD TABLESPACE failed because the table was referenced by a foreign key, the error code returned did not indicate that this was the case.

    • Using INSERT DELAYED with prepared statements could lead to table corruption.

    • InnoDB: InnoDB failed to drop a table in the background drop queue if the table was referenced by a FOREIGN KEY constraint.

    B.1.18. Changes in MySQL 4.1.8 (14 December 2004)

    Note

    Due to a libtool-related bug in the source distribution, the creation of shared libmysqlclient libraries was not possible (the resulting files were missing the .so file name extension). The file ltmain.sh was updated to fix this problem and the resulting source distribution was released as mysql-4.1.8a.tar.gz. This modification did not affect the binary packages. (Bug#7401)

    End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).

    Functionality added or changed:

    • MySQL Cluster: Added support for a [mysql_cluster] section to the my.cnf file for configuration settings specific to MySQL Cluster. The ndb-connectstring variable was moved here.

    • Replication: mysqldump --single-transaction --master-data is now able to take an online (nonblocking) dump of InnoDB and report the corresponding binary log coordinates, which makes a backup suitable for point-in-time recovery, roll-forward or replication slave creation. See Section 4.5.4, “mysqldump — A Database Backup Program”.

    • A connection doing a rollback now displays "Rolling back" in the State column of SHOW PROCESSLIST.

    • Added --lock-all-tables to mysqldump to lock all tables by acquiring a global read lock.

    • In the normal log MySQL now prints the log position for Binlog Dump requests.

    • mysqlbinlog now prints an informative commented line (thread id, timestamp, server id, and so forth) before each LOAD DATA INFILE, like it does for other queries; unless --short-form is used.

    • Added --disable-log-bin option to mysqlbinlog. Using this option you can disable binary logging for the statements produced by mysqlbinlog. That is, mysqlbinlog --disable-log-bin <file_name> | mysql won't write any statements to the MySQL server binary log.

    • Automatic character set conversion formerly was done for operations that mix a column and a string such as assigning a string to a column, when this was possible without loss of information. Automatic conversion for operations that mix columns and strings has been expanded to cover many functions (such as CONCAT()) and assignment operators. This reduces the frequency of Illegal mix of collations errors.

    • For ALTER DATABASE, the database name now can be omitted to apply the change to the default database.

    • Added WITH CONSISTENT SNAPSHOT clause to START TRANSACTION to begin a transaction with a consistent read.

    • The statements CREATE TABLE, TRUNCATE TABLE, DROP DATABASE, and CREATE DATABASE cause an implicit commit.

    • The --master-data option for mysqldump now takes an optional argument of 1 or 2 to produce a noncommented or commented CHANGE MASTER TO statement. The default is 1 for backward compatibility.

    • Added --hex-blob option to mysqldump for dumping binary string columns using hexadecimal notation.

    • Added --order-by-primary to mysqldump, to sort each table's data in a dump file. This may be useful when dumping a MyISAM table which will be loaded into an InnoDB table. Dumping a MyISAM table with this option is considerably slower than without.

    • InnoDB: Commit after every 10,000 copied rows when executing ALTER TABLE. This makes it much faster to recover from an aborted ALTER TABLE or OPTIMIZE TABLE.

    • FULLTEXT index block size is changed to be 1024 instead of 2048.

    • InnoDB: Do not periodically write SHOW INNODB STATUS information to a temporary file unless the configuration option innodb_status_file = 1 is set.

    • Added mysql_hex_string() C API function that hex-encodes a string.

    Bugs fixed: