Documentation Home
MySQL 5.0 Release Notes
Related Documentation Download these Release Notes
PDF (US Ltr) - 2.1Mb
PDF (A4) - 2.1Mb

MySQL 5.0 Release Notes  /  Changes in MySQL 5.0.3 (2005-03-23, Beta)

Changes in MySQL 5.0.3 (2005-03-23, Beta)


This Beta release, as any other pre-production release, should not be installed on production level systems or systems with critical data. It is good practice to back up your data before installing any new version of software. Although MySQL worked very hard to ensure a high level of quality, protect your data by making a backup as you would for any software beta release.

Functionality Added or Changed

  • Incompatible Change: The DECIMAL and NUMERIC data types now are handled with a fixed-point library that enables precision math handling that results in more accurate results. See Precision Math.

    A consequence of the change in handling of the DECIMAL and NUMERIC fixed-point data types is that the server is more strict to follow standard SQL. For example, a data type of DECIMAL(3,1) stores a maximum value of 99.9. Previously, the server permitted larger numbers to be stored. That is, it stored a value such as 100.0 as 100.0. Now the server clips 100.0 to the maximum permissible value of 99.9. If you have tables that were created before MySQL 5.0.3 and that contain floating-point data not strictly legal for the data type, you should alter the data types of those columns. For example:

    ALTER TABLE tbl_name MODIFY col_name DECIMAL(4,1);

    For user-defined functions, exact-value decimal arguments such as 1.3 or DECIMAL column values were passed as REAL_RESULT values prior to MySQL 5.0.3. As of 5.0.3, they are passed as strings with a type of DECIMAL_RESULT. If you upgrade to 5.0.3 and find that your UDF now receives string values, use the initialization function to coerce the arguments to numbers as described in UDF Argument Processing.

    For the FLOOR() and CEILING() functions, the return type is no longer always BIGINT. For exact-value numeric arguments, the return value has an exact-value numeric type. For string or floating-point arguments, the return value has a floating-point type.

  • Incompatible Change: The C API ER_WARN_DATA_TRUNCATED warning symbol was renamed to WARN_DATA_TRUNCATED.

  • MySQL Cluster; Replication: 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 10. (Bug #8325)

  • MySQL Cluster: When using this storage engine, the output of SHOW TABLE STATUS now displays properly calculated values in the Avg_row_length and Data_length columns. (Note that BLOB columns are not yet taken into account.) In addition, the number of replicas is now shown in the Comment column (as number_of_replicas).

  • Replication: If the MySQL server is started without an argument to --log-bin and without --log-bin-index, thus not providing a name for the binary log index file, a warning is issued because MySQL falls back to using the host name for that name, and this is prone to replication issues if the server's host name gets changed later.

  • Replication: The LOAD DATA statement was extended to support user variables in the target column list, and an optional SET clause. Now one can perform some transformations on data after they have been read and before they are inserted into the table. For example:

    LOAD DATA INFILE 'file.txt'
      INTO TABLE t1
      (column1, @var1)
      SET column2 = @var1/100;

    Also, replication of LOAD DATA was changed, so you can't replicate such statements from a 5.0.3 master to pre-5.0.3 slaves.

  • Replication: The way the character set information is stored into the binary log was changed, so that it is now possible to have a replication master and slave running with different global character sets. A disadvantage is that replication from 5.0.3 masters to pre-5.0.3 slaves is impossible.

  • Nonoptimal index_merge query execution plans were chosen on IRIX. (Bug #8578)

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

  • The server now includes a timestamp in the Ready for connections message that is written to the error log at startup. (Bug #8444)

  • CHECKSUM TABLE returns a warning for nonexisting tables. The checksum value remains NULL as before. (Bug #8256)

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

  • When a client releases a user-level lock, DO RELEASE_LOCK() will not be written to the binary log anymore (this makes the binary log smaller); as a counterpart, the slave does not actually take the lock when it executes GET_LOCK(). This is mainly an optimization and should not affect existing setups. (Bug #7998)

  • InnoDB: Corrected a bug in the crash recovery of ROW_FORMAT=COMPACT tables that caused corruption. There may still be bugs in the crash recovery, especially in COMPACT tables. (Bug #7973)

  • Permitted the service-installation command for Windows servers to specify a single option other than --defaults-file following the service name. This is for compatibility with MySQL 4.1. (Bug #7856)

  • Changed XML format for mysql from <col_name>col_value</col_name> to <field name="col_name">col_value</field> to enable proper encoding of column names that are not legal as element names. (Bug #7811)

  • SHOW CREATE TABLE now uses USING index_type rather than TYPE index_type to specify an index type. (Bug #7233)

  • InnoDB: Implemented fast TRUNCATE TABLE. The old approach (deleting rows one by one) may be used if the table is being referenced by foreign keys. (Bug #7150)

  • Out-of-order packets were sent (ERROR after OK or EOF) following a KILL QUERY statement. (Bug #6804)

  • Added sql_notes session variable to cause Note-level warnings not to be recorded. (Bug #6662)

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

  • Added VAR_POP() and STDDEV_POP() as standard SQL aliases for the VARIANCE() and STDDEV() functions that compute population variance and standard deviation. Added new VAR_SAMP() and STDDEV_SAMP() functions to compute sample variance and standard deviation. (Bug #3190)

  • When the MyISAM storage engine detects corruption of a MyISAM table, a message describing the problem now is written to the error log.

  • InnoDB: A commit is now performed after every 10,000 copied rows when executing ALTER TABLE, CREATE INDEX, DROP INDEX or OPTIMIZE TABLE. This makes recovery from an aborted operations of these types much faster than previous to this change.

  • InnoDB: Introduced a compact record format that does not store the number of columns or the lengths of fixed-size columns. The old format can be requested by specifying ROW_FORMAT=REDUNDANT. The new format (ROW_FORMAT=COMPACT) is the default. The new format typically saves 20% of disk space and memory.

    The presence of the new compact row format decreases row storage space by about 20% at the cost of increasing CPU use for some operations. If your workload is a typical one that is limited by cache hit rates and disk speed it is likely to be faster. If it is a rare case that is limited by CPU speed, it might be slower.

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

  • my.cnf in the compile-time datadir (usually /usr/local/mysql/data/ in the binary tarball distributions) is not being read anymore. The value of the environment variable MYSQL_HOME is used instead of the hard-coded path.

  • FLUSH TABLES WITH READ LOCK is now killable while it is waiting for running COMMIT statements to finish.

  • API change: the reconnect flag in the MYSQL structure is now set to 0 by mysql_real_connect(). Only those client programs which didn't explicitly set this flag to 0 or 1 after mysql_real_connect() experience a change. Having automatic reconnection enabled by default was considered too dangerous (after reconnection, table locks, temporary tables, user and session variables are lost).

  • Added the engine_condition_pushdown system variable. For NDB, setting this variable to 1 permits processing of some WHERE clause conditions to be processed in NDB nodes before rows are sent to the MySQL server, rather than having rows sent to the server for evaluation.

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

  • Added the --large-pages option for mysqld. Large page support can be used on Linux systems. See Enabling Large Page Support.

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

  • Added cp932 (SJIS for Windows Japanese) and eucjpms (UJIS for Windows Japanese) character sets.

  • A VARCHAR column can now contain up to 65535 bytes. In addition, VARCHAR columns now remember trailing spaces. For more details, see The CHAR and VARCHAR Types.


    If the table handler does not support the new VARCHAR type, then it is converted to a CHAR column. Currently this happens for NDB tables.

  • Added support for AVG(DISTINCT).

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

  • SHOW DATABASES, SHOW TABLES, SHOW COLUMNS, and so forth, display information about the INFORMATION_SCHEMA database. Also, several SHOW statements now accept a WHERE clause specifying which output rows to display. See INFORMATION_SCHEMA Tables.

  • 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 permitted into gaps.

  • InnoDB: Upgrading from 4.1: The sorting order for end-space in TEXT columns for InnoDB tables has changed. Starting from 5.0.3, InnoDB compares TEXT columns as space-padded at the end. If you have a nonunique index on a TEXT column, you should run CHECK TABLE on it, and run OPTIMIZE TABLE if the check reports errors. If you have a UNIQUE INDEX on a TEXT column, you should rebuild the table with OPTIMIZE TABLE.

  • Support for the ISAM storage engine has been removed. If you have ISAM tables, you should convert them before upgrading. See Changes Affecting Upgrades to 5.0.

  • Added the multi_range_count system variable.

  • 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 to the I/O thread. It no longer grows indefinitely if the master is idle.

  • From the Windows distribution, predefined accounts without passwords for remote users ('root'@'%', ''@'%') were removed (other distributions never had them).

  • Added an error member to the MYSQL_BIND data structure that is used in the C API for prepared statements. This member is used for reporting data truncation errors. Truncation reporting is enabled using the new MYSQL_REPORT_DATA_TRUNCATION option for the mysql_options() C API function.

  • Support for RAID options in MyISAM tables has been removed. If you have tables that use these options, you should convert them before upgrading. See Changes Affecting Upgrades to 5.0.

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

  • Added several InnoDB status variables. See Server Status Variables.

  • BIT in column definitions now is a distinct data type; it no longer is treated as a synonym for TINYINT(1).

  • The MySQL server now aborts when started with the option --log-bin-index and without --log-bin, and when started with --log-slave-updates and without --log-bin.

  • User variable coercibility has been changed from coercible to implicit. That is, user variables have the same coercibility as column values.

  • MEMORY (HEAP) can have VARCHAR fields.

  • Added account-specific MAX_USER_CONNECTIONS limit, which enables you to specify the maximum number of concurrent connections for the account. Also, all limited resources now are counted per account (instead of being counted per user + host pair as it was before). Use the --old-style-user-limits option to get the old behavior.

  • 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 UDF Calling Sequences for Simple Functions, UDF Calling Sequences for Aggregate Functions, and UDF Security Precautions. Thanks to Stefano Di Paola for finding and informing us about this issue. (CVE-2005-0709, CVE-2005-0710)

  • Added --innodb-checksums and --innodb-doublewrite options for mysqld.

  • Added the CREATE ROUTINE and ALTER ROUTINE privileges, and made the EXECUTE privilege operational.

  • mysqlbinlog now prints a ROLLBACK statement at the end of its output, in case the server crashed while it was in the process of writing the final entry into the last binary log named on the command line. This causes any half-written transaction to be rolled back when the output is executed. The ROLLBACK is harmless if the binary log file was written and closed normally.

  • The binary log file and binary log index file now are handled the same way as MyISAM tables when there is a disk full or quota exceeded error. See How MySQL Handles a Full Disk.

  • InnoDB now supports a fast TRUNCATE TABLE. One visible change from this is that auto-increment values for this table are reset on TRUNCATE TABLE.

  • A new CREATE USER privilege was added.

  • Boolean full-text phrase searching now requires only that matches contain exactly the same words as the phrase and in the same order. Nonword characters no longer need match exactly.

  • Implemented support for XA transactions. See XA Transactions. The implementation makes the --innodb-safe-binlog option obsolete, so it has been removed.

  • Added the FEDERATED storage engine. See The FEDERATED Storage Engine.

  • Bit-field values can be written using b'value' notation. value is a binary value written using 0s and 1s.

  • Additional control over transaction completion was implemented. The COMMIT and ROLLBACK statements support AND [NO] CHAIN and RELEASE clauses. There is a new RELEASE SAVEPOINT statement. The completion_type system variable was added for setting the global and session default completion type.

  • SHOW COLUMNS now displays NO rather than blank in the Null output column if the corresponding table column cannot be NULL.

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: Multiple-table updates did not replicate properly to slave servers where --replicate-*-table options had been specified. (Bug #7011)

  • Replication: A replication slave could crash after replicating many ANALYZE TABLE, OPTIMIZE TABLE, or REPAIR TABLE statements from the master. (Bug #6461, Bug #7658)

  • Replication: Changed semantics of CREATE/ALTER/DROP DATABASE statements so that replication of CREATE DATABASE is possible when using --binlog-do-db and --binlog-ignore-db. (Bug #6391)

  • Replication: DDL statements for views were not being written to the binary log (and thus not subject to replication). (Bug #4838)

  • mysqldump misinterpreted _ and % characters in the names of tables to be dumped as wildcard characters. (Bug #9123)

  • In strict or traditional SQL mode, too-long string values assigned to string columns (CHAR, VARCHAR, BINARY, VARBINARY, TEXT, or BLOB) were correctly truncated, but the server returned an SQLSTATE value of 01000 (should be 22001). (Bug #9029, Bug #6999)

  • The definition of the enumeration-valued sql_mode column of the mysql.proc table was missing some of the current permissible SQL modes, so stored routines would not necessarily execute with the SQL mode in effect at the time of routine definition. (Bug #8902)

  • TRUNCATE TABLE did not work within stored procedures. Now, within stored procedures, TRUNCATE TABLE is executed in the same way as DELETE. This change was necessary because TRUNCATE TABLE implicitly locks tables. (Bug #8850)

  • A rare race condition could cause FLUSH TABLES WITH READ LOCK to hang. (Bug #8682)

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

  • If SELECT DISTINCT named an index column multiple times in the select list, the server tried to access different key fields for each instance of the column, which could result in a crash. (Bug #8532)

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

  • REPAIR TABLE did not invalidate query results in the query cache that were generated from the table. (Bug #8480)

  • LOAD INDEX statement now loads the index into memory. (Bug #8452)

  • For a stored function that refers to a given table, invoking the function while selecting from the same table resulted in a server crash. (Bug #8405)

  • Comparison of a DECIMAL column containing NULL to a subquery that produced DECIMAL values resulted in a server crash. (Bug #8397)

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

  • Stored functions that used cursors could return incorrect results. (Bug #8386)

  • The Cyrillic letters I (И) and SHORT I (Й) were treated as being the same character by the utf8_general_ci collation. (Bug #8385)

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

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

  • Selecting from an INFORMATION_SCHEMA table combined with a subquery on an INFORMATION_SCHEMA table caused an error with the message Table tbl_name is corrupted. (Bug #8164)

  • Matching of table names by mysqlhotcopy now accommodates DBD::mysql versions 2.9003 and up, which implement identifier quoting. (Bug #8136)

  • Re-execution of prepared statements containing subqueries caused the server to crash. (Bug #8125)

  • A problem with equality propagation optimization for prepared statements and stored procedures caused a server crash upon re-execution of the prepared statement or stored procedure. (Bug #8115, Bug #8849)

    References: See also Bug #51650.

  • Selecting from a view defined as a join caused a server crash if the query cache was enabled. (Bug #8054)

  • Results in the query cache generated from a view were not properly invalidated after ALTER VIEW or DROP VIEW on that view. (Bug #8050)

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

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

  • Comparing a nested row expression (such as ROW(1,(2,3))) with a subquery caused the server to crash. (Bug #8022)

  • The number of columns in a row comparison against a subquery was calculated incorrectly. (Bug #8020)

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

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

  • A slave running MySQL 3.23.51 or newer hung while trying to connect to a master running MySQL 3.23.50 or older. (This occurred due to 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)

  • mysqld_safe now understands the --help option. Previously, it ignored the option and attempted to start the server anyway. (Bug #7931)

  • Creating a user with grants failed when specifying a password but worked without one. (Bug #7905)

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

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

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

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

  • The CONVERT_TZ() function, when its second or third argument was from a const table, caused the server to crash. (See EXPLAIN Syntax.) (Bug #7705)

  • The output of the STATUS (\s) command in mysql had the values for the server and client character sets reversed. (Bug #7571)

  • A LEFT OUTER JOIN between an empty base table and a view on an empty base table caused a server crash. (Bug #7433)

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

  • The server crashed when an error occurred during the filling of a temporary table created for handling a view or derived table. (Bug #7413)

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

  • Handling of trailing spaces was incorrect for the ucs2 character set. (Bug #7350)

  • --expire-logs-days was not honored if using only transactions. (Bug #7236)

  • Some INFORMATION_SCHEMA columns that contained timestamp values were of type VARBINARY. These were changed to TIMESTAMP. (Bug #7217)

  • Some INFORMATION_SCHEMA columns that contained catalog identifiers were of type LONGTEXT. These were changed to VARCHAR(N, where N is the appropriate maximum identifier length. (Bug #7215)

  • Use of GROUP_CONCAT() in the select list when selecting from a view caused a server crash. (Bug #7116)

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

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

  • When setting integer system variables to a negative value with SET VARIABLES, the value was treated as a positive value modulo 232. (Bug #6958)

  • Use of a view in a correlated subquery that contains HAVING but no GROUP BY caused a server crash. (Bug #6894)

  • Praparing a query using the CONVERT_TZ() function with constant arguments caused the server to crash. (Bug #6849)

  • Handling by mysql_list_fields() of references to stored functions within views was incorrect and could result in a server crash. (Bug #6814)

  • A sequence of BEGIN (or SET autocommit = 0), FLUSH TABLES WITH READ LOCK, transactional update, COMMIT, FLUSH TABLES WITH READ LOCK could hang the connection forever and possibly the MySQL server itself. This happened for example when running the innobackup script several times. (Bug #6732)

  • Prevent adding CREATE TABLE .. SELECT query to the binary log when the insertion of new records partially failed. (Bug #6682)

  • mysqlbinlog did not print SET PSEUDO_THREAD_ID statements in front of LOAD DATA INFILE statements inserting into temporary tables, thus causing potential problems when rolling forward these statements after restoring a backup. (Bug #6671)

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

  • SHOW CREATE TABLE now reports ENGINE=MEMORY rather than ENGINE=HEAP for a MEMORY table (unless the MYSQL323 SQL mode is enabled). (Bug #6659)

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

  • CREATE TABLE ... LIKE failed on Windows when the source or destination table was located in a symlinked database directory. (Bug #6607)

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

  • Selecting from a view that had an EXISTS or NOT EXISTS subquery did not always work properly, and selecting columns by name could cause a server crash. With SELECT *, crashes did not occur, but columns in the outer query were not resolved properly. (Bug #6394)

  • Fixed a problem in NO_BACKSLASH_ESCAPES SQL mode for strings that contained both the string quoting character and backslash. (Bug #6368)

  • The CHAR() function was not ignoring NULL arguments, contrary to the documentation. (Bug #6317)

  • Starting and stopping the slave thread (only) could in some circumstance cause the server to crash. (Bug #6148)

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

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

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

  • When using the RPAD() function (or any function adding spaces to the right) in a query that had to be resolved by using a temporary table, all resulting strings had rightmost spaces removed (that is, RPAD() did not work) (Bug #4048)

  • Host name matching didn't work if a netmask was specified for table-specific privileges. (Bug #3309)

  • A symlink vulnerability in the mysqlaccess script was reported by Javier Fernandez-Sanguino Pena and Debian Security Audit Team. (CVE-2005-0004)

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

  • Prepared statements using SUM(DISTINCT...) did not perform correctly.

  • Prepared statements did not work correctly with OUTER JOIN.

  • mysql_fix_privilege_tables now makes it possible for mysql privilege tables created in MySQL 5.0 to be used with MySQL 4.1. This makes it possible to downgrade from 5.0 to 4.1, or to run MySQL 4.1 and 5.0 using the same privilege table files for testing purposes.

  • Prepared statements now gives warnings on prepare.

  • A number of portability issues relating to overflow in floating point values were corrected.

  • Giving mysqld a SIGHUP caused it to crash.

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