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 http://www.mysql.com/about/legal/lifecycle/#calendar. 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:
Security Fix: A UDF library-loading vulnerability could result in a buffer overflow and code execution. (CVE-2005-2558)
Incompatible Change: 
        Previously, conversion of
        DATETIME values to numeric form
        by adding zero produced a result in
        YYYYMMDDHHMMSS format. The result of
        DATETIME+0 is now in
        YYYYMMDDHHMMSS.000000 format.
       (Bug#12268)
Replication: 
        Some data definition statements (CREATE
        TABLE where the table was not a temporary table,
        TRUNCATE TABLE,
        DROP DATABASE, and
        CREATE DATABASE) were not being
        written to the binary log after a
        ROLLBACK. This
        also caused problems with replication.
      
As a result of this fix, the folowing statements now cause an implicit commit:
(Bug#6883)
        System variables are now treated as having
        SYSVAR (system constant) coercibility. For
        example, @@version is now treated like
        VERSION() and
        @@character_set_client is now treated like
        CHARSET( USER() ). See
        Section 9.1.7.5, “Special Cases Where Collation Determination Is Tricky”.
       (Bug#10904)
        MEMORY tables now support indexes of up to
        500 bytes. See Section 13.4, “The MEMORY (HEAP) Storage Engine”.
       (Bug#10566)
        The table, type, and
        rows columns of
        EXPLAIN output can now be
        NULL. This is required for using
        EXPLAIN on
        SELECT queries that use no
        tables, such as EXPLAIN SELECT 1).
       (Bug#9899)
        You can again refer to other tables in the ON DUPLICATE
        KEY UPDATE part of an
        INSERT ...
        SELECT statement as long as there is no GROUP
        BY in the SELECT part.
        One side effect of this is that you may have to qualify
        nonunique column names in the values part of ON
        DUPLICATE KEY UPDATE.
       (Bug#9728, Bug#8147)
        Added the
        --log-slow-admin-statements
        server option to request logging of slow administrative
        statements such as OPTIMIZE
        TABLE, ANALYZE TABLE,
        and ALTER TABLE to the slow query
        log. These statements were logged in MySQL 4.0, but not in 4.1.
       (Bug#9141)
Expanded on information provided in general log and slow query log for prepared statements. (Bug#8367, Bug#9334)
        Added mysql_set_character_set()
        C API function for setting the default character set of the
        current connection. This allows clients to affect the character
        set used by
        mysql_real_escape_string().
       (Bug#8317)
        Added the --add-drop-database
        option to mysqldump.
       (Bug#3716)
        SHOW BINARY LOGS now displays a
        File_size column that indicates the size of
        each file.
      
        InnoDB: When creating or extending an
        InnoDB data file, allocate at most one
        megabyte at a time for initializing the file. Previously,
        InnoDB used to allocate and initialize 1 or 8
        megabytes of memory, even if a few 16-kilobyte pages were to be
        written. This fix improves the performance of
        CREATE TABLE in
        innodb_file_per_table mode.
      
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
         and
        blob_colCOUNT(DISTINCT) were used.
       (Bug#11088)
        A CREATE TABLE
         statement would crash the server when no
        database was selected.
       (Bug#11028)db_name.tbl_name
        LIKE ...
        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 to 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
         and tableALTER
        TABLE  on the same
        table caused the server to crash.
       (Bug#10224)table
        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  , where
        col_name =
        const_exprconst_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
         returned multiple
        rows (it should return a single row).
       (Bug#8614)constant
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.
      
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
         without a
        preceding tbl_name READ
        index_name NEXTHANDLER  for an
        tbl_name
        READ index_name =
        (value_list)InnoDB table resulted in a server crash
        rather than an error.
       (Bug#5373)


User Comments
Add your own comment.