Released on 29 Nov 2005
MySQL 4.1.16 Changelog

End of Product Lifecycle. Active development and support for MySQL Database Server versions 3.23, 4.0, and 4.1 has ended. For details, see Please consider upgrading to a recent version. Further updates to the content of this manual will be minimal. All formats of this manual will continue to be available until 31 Dec 2010.

Functionality Added or Changed

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


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

    (Bug #12476)

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

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

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

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

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: REPLACE failed when attempting to update a primary key value in a Cluster table. (Bug #14007)

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

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

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

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


    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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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