Released on 13 May 2005
MySQL 4.1.12 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.


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.

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)

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

  • Added a --debug option to my_print_defaults.

  • Updated version of libedit to 2.9. (Bug #2596)

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

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

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

  • Added the cp932 Japanese character set.

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

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

Bugs Fixed

  • Security Fix: mysql_install_db created the mysql_install_db.X file with a predictable file name and insecure permissions, which permitted local users to execute arbitrary SQL statements by modifying the file's contents. (CVE-2005-1636)

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

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

  • MySQL Cluster: AUTO_INCREMENT did not work with INSERT..SELECT on NDB tables. (Bug #9675)

  • Queries containing CURRENT_USER() incorrectly were registered in the query cache. (Bug #9796)

  • Concurrent inserts were permitted 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)

  • myisampack run on 64-bit systems resulted in segmentation violations. (Bug #9487)

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

  • mysqld was not checking whether the PID file was successfully created. (Bug #5843)

  • awk script portability problems were found in cmd-line-utils/libedit/ . (Bug #9954)

  • SELECT ROUND(expr) produced a different result from CREATE TABLE ... SELECT ROUND(expr). (Bug #9837)

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

  • The --delimiter option for the nds_select program was nonfunctional. (Bug #10287)

  • 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 to trigger this issue). (Bug #8321)

  • The error message for exceeding MAX_CONNECTIONS_PER_HOUR mistakenly referred to max_connections. (Bug #9947)

  • A problem with readlinecaused the mysql client to crash when the user pressed Control+R.. (Bug #9568)

  • The warning message from GROUP_CONCAT() did not always indicate the correct number of lines. (Bug #8681)

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

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

  • A deadlock resulted from using FLUSH TABLES WITH READ LOCK while an INSERT DELAYED statement was in progress. (Bug #7823)

  • InnoDB: Prevent ALTER TABLE from changing the storage engine if there are foreign key constraints on the table. (Bug #5574, Bug #5670)

  • The optimizer did not compute the union of two ranges for the OR operator correctly. (Bug #9348)

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

  • MySQL no longer automatically blocks IP addresses for which gethostbyname_r() fails when the reason is that the DNS server is down. Thanks to Jeremy Cole for patch. (Bug #8467)

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

  • MAX() for an INT UNSIGNED (unsigned 4-byte integer) column could return negative values if the column contained values larger than 231. (Bug #9298)

  • Floats and doubles were not handled correctly when using the prepared statement API in the embedded server. (Bug #10443)

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

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

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

  • Memory block allocation did not function correctly for the query cache in the embedded server. (Bug #9549)

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

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

  • did not compile correctly using VC++ on Windows. (Bug #10245)

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

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

  • In the client/server protocol for prepared statements, reconnection failed when the connection was killed with reconnection enabled. (Bug #8866)

  • my_print_defaults was ignoring the --defaults-extra-file option or crashing when the option was given. (Bug #9851, Bug #9136)

  • mysql.server no longer uses nonportable alias command or LSB functions. (Bug #9852)

  • 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 lowercase, so that the tablespace name was consistent with the InnoDB internal data dictionary.

  • mysqldump dumped core when invoked with --tmp and --single-transaction options and a nonexistent table name. (Bug #9175)

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

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

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

  • CHAR and VARCHAR columns that used the sjis character set were not being saved correctly, causing the following columns to be corrupted. (Bug #10493)

  • A server installed as a Windows service and started with --shared-memory could not be stopped. (Bug #9665)

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

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

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

  • Indexes on MyISAM tables could sometimes be corrupted; this was the result of padding values with spaces 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)

  • With DISTINCT, CONCAT(col_name,...) 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 contained 1111.) (Bug #4082)

  • RENAME TABLE for an ARCHIVE table failed if the .arn file was not present. (Bug #9911)

  • An error occurred if you specified a default value of TRUE or FALSE for a BOOL column. (Bug #9666)

  • Starting mysqld with the --skip-innodb and --default-storage-engine=innodb (or --default-table-type=innodb caused a server crash. (Bug #9815)

  • MERGE tables could fail on Windows due to incorrect interpretation of path name separator characters for file names in the .MRG file. (Bug #10687)

  • net_read_timeout and net_write_timeout were not being respected on Windows. (Bug #9721)

  • TIMEDIFF() with a negative time first argument and positive time second argument produced incorrect results. (Bug #8068)

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

  • Remove extra slashes in --tmpdir value (for example, convert /var//tmp to /var/tmp, because they caused various errors. (Bug #8497)

  • Corrected some failures of prepared statements for SQL (PREPARE plus EXECUTE) to return all rows for some SELECT statements. (Bug #9777, Bug #9096)

  • The server did not compile correctly with MinGW. Our thanks to Nils Durner for the patch. (Bug #8872)

  • configure did not properly recognize whether NPTL was available on Linux. (Bug #2173)

  • configure did not check the system for atomic operations capabilities. (Bug #7970)