MySQL Lists are EOL. Please join:

List:Announcements« Previous MessageNext Message »
From:Lenz Grimmer Date:December 4 2003 3:23pm
Subject:MySQL 4.1.1 has been released
View as plain text  
Hash: SHA1


MySQL 4.1.1, a new version of the popular Open Source/Free Software
database management system, has been released. It is now available in
source and binary form for a number of platforms from our download pages
at and mirror sites.

Note that not all mirror sites may be up to date at this point in time -
if you can't find this version on some mirror, please try again later or
choose another download site.

This is the second Alpha development release of the 4.1 tree, adding many
new features (see below) and fixing recently discovered bugs. Please refer
to our bug database at for more details about the
individual bugs fixed in this version.

As this code is currently labeled "Alpha", we do not recommend that this
version be used in production environments yet!

However, we encourage you to test and evaluate it and, more importantly,
report any bugs or observations to our bug tracking database at

Please note, that for us to resolve a bug report, a reproducible test is
required. See "How to report a bug" at for more details before filing a
bug report. We appreciate your support!

For a more detailed list of features in MySQL 4.1, please see

News from the ChangeLog:

Functionality added or changed:

   * Added `IGNORE' option for `DELETE' statement.

   * The MySQL source distribution now also includes the MySQL Internals
     Manual `internals.texi'.

   * Added `mysql_set_server_option()' C API client function to allow
     multiple statement handling in the server to be enabled or

   * The `mysql_next_result()' C API function now returns `-1' if there
     are no more result sets.

   * Renamed `CLIENT_MULTI_QUERIES' connect option flag to
     `CLIENT_MULTI_STATEMENTS'. To allow for a transition period, the
     old option will continue to be recognized for a while.

   * Require `DEFAULT' before table and database default character set.
     This enables us to use `ALTER TABLE table_name ... CHARACTER
     SET=...' to change the character set for all `CHAR', `VARCHAR', and
     `TEXT' columns in a table.

   * Added `MATCH ... AGAINST( ... WITH QUERY EXPANSION)' and the
     `ft_query_expansion_limit' server variable.

   * Removed unused `ft_max_word_len_for_sort' server variable.

   * Full-text search now supports multi-byte character sets and the
     Unicode `utf8' character set. (The Unicode `ucs2' character set is
     not yet supported.)

   * Phrase search in `MATCH ... AGAINST ( ... IN BOOLEAN MODE)' no
     longer matches partial words.

   * Added aggregate function `BIT_XOR()' for bitwise XOR operations.

   * Replication over SSL now works.

   * The `START SLAVE' statement now supports an `UNTIL' clause for
     specifying that the slave SQL thread should be started but run
     only until it reaches a given position in the master's binary logs
     or in the slave's relay logs.

   * Produce warnings even for single-row `INSERT' statements, not just
     for multiple-row `INSERT' statements. Previously, it was necessary
     to set `SQL_WARNINGS=1' to generate warnings for single-row

   * Added `delimiter' (`\d') command to the `mysql' command-line
     client for changing the statement delimiter (terminator).  The
     default delimiter is semicolon.

   * `CHAR', `VARCHAR', and `TEXT' columns now have lengths measured in
     characters rather than in bytes.  The character size depends on
     the column's character set.  This means, for example, that a
     `CHAR(n)' column for a multi-byte character set will take more
     storage than before.  Similarly, index values on such columns are
     measured in characters, not bytes.

   * The `DATABASE()' function now returns `NULL' rather than the empty
     string if there is no database selected.

   * Added `--sql-mode=NO_AUTO_VALUE_ON_ZERO' option to suppress the
     usual behaviour of generating the next sequence number when zero
     is stored in an `AUTO_INCREMENT' column. With this mode enabled,
     zero is stored as zero; only storing `NULL' generates a sequence

   * *Warning: Incompatible change!* Client authentication now is based
     on 41-byte passwords in the `user' table, not 45-byte passwords as
     in 4.1.0.  Any 45-byte passwords created for 4.1.0 must be reset
     after running the `mysql_fix_privilege_tables' script.

   * *Warning: Incompatible change!* Renamed the C API
     `mysql_prepare_result()' function to `mysql_get_metadata()' as the
     old name was confusing.

   * Added `DROP USER 'username'@'hostname'' statement to drop an
     account that has no privileges.

   * The interface to aggregated UDF functions has changed a bit. You
     must now declare a `xxx_clear()' function for each aggregate
     function `XXX()'.

   * The `CONCAT_WS()' function no longer skips empty strings.

   * Added new `ADDTIME()', `DATE()', `DATEDIFF()', `LAST_DAY()',
     `TIME()', `TIMEDIFF()', `TIMESTAMP()', `UTC_DATE()', `UTC_TIME()',
     `UTC_TIMESTAMP()', and `WEEKOFYEAR()' functions.

   * Added new syntax for `ADDDATE()' and `SUBDATE()'.  The second
     argument now may be a number representing the number of days to be
     added to or subtracted from the first date argument.

   * Added new `type' values `DAY_MICROSECOND', `HOUR_MICROSECOND',
     `DATE_ADD()', `DATE_SUB()', and `EXTRACT()'.

   * Added new `%f' microseconds format specifier for `DATE_FORMAT()'
     and `TIME_FORMAT()'.

   * All queries in which at least one `SELECT' does not use indexes
     properly now are written to the slow query log when long log
     format is used.

   * It is now possible to create a `MERGE' table from `MyISAM' tables
     in different databases. Formerly, all the `MyISAM' tables had to
     be in the same database, and the `MERGE' table had to be created
     in that database as well.

   * Added new `COMPRESS()', `UNCOMPRESS()', and
     `UNCOMPRESSED_LENGTH()' functions.

   * When doing `SET sql_mode='mode'' for a complex mode (like `ANSI'),
     we now update the `sql_mode' variable to include all the
     individual options implied by the complex mode.

   * Added the OLAP (On-Line Analytical Processing) function `ROLLUP',
     which provides summary rows for each `GROUP BY' level.

   * Added `SQLSTATE' codes for all server errors.

   * Added `mysql_sqlstate()' and `mysql_stmt_sqlstate()' C API client
     functions that return the `SQLSTATE' error code for the last error.

   * `TIME' columns with hour values greater than 24 were returned
     incorrectly to the client.

   * `ANALYZE', `OPTIMIZE', `REPAIR', and `FLUSH' statements are now
     stored in the binary log and thus replicated to slaves.  This
     logging does not occur if the optional `NO_WRITE_TO_BINLOG' keyword
     (or its alias `LOCAL') is given.  Exceptions are that `FLUSH
     LOCK' are not logged in any case.  For a syntax example, see *Note
     `FLUSH': FLUSH.

   * New global variable `RELAY_LOG_PURGE' to enable or disable
     automatic relay log purging.

   * `LOAD DATA' now produces warnings that can be fetched with `SHOW

   * Added support for syntax `CREATE TABLE table2 (LIKE table1)' that
     creates an empty table `table2' with a definition that is exactly
     the same as `table1', including any indexes.

   * `CREATE TABLE table_name (...) TYPE=storage_engine' now generates a
     warning if the named storage engine is not available. The table is
     still created as a `MyISAM' table, as before.

   * Most subqueries are now much faster than before.

   * Added `PURGE BINARY LOGS' as an alias for `PURGE MASTER LOGS'.

   * Disabled the `PURGE LOGS' statement that was added in in version
     4.1.0.  The statement now should be issued as `PURGE MASTER LOGS'

   * Added `SHOW BDB LOGS' as an alias for `SHOW LOGS'.

   * Added `SHOW MASTER LOGS' (which had been deleted in version 4.1.0)
     as an alias for `SHOW BINARY LOGS'.

   * Added `Slave_IO_State' and `Seconds_Behind_Master' columns to the
     output of `SHOW SLAVE STATUS'.  `Slave_IO_State' indicates the
     state of the slave I/O thread, and `Seconds_Behind_Master'
     indicates the number of seconds by which the slave is late
     compared to the master.

   * `--lower-case-table-names=1' now also makes aliases case
     insensitive. (Bug #534)

Bugs fixed:

   * Fixed a bug in privilege handling that caused connections from
     certain IP addresses to be assigned incorrect database-level
     privileges.  A connection could be assigned the database
     privileges of the previous successful authentication from one of
     those IP addresses, even if the IP address username and database
     name were different. (Bug #1636)

   * Error-handling functions were not called properly when an error
     resulted from `[CREATE | REPLACE| INSERT] ... SELECT' statements.

   * `HASH', `BTREE', `RTREE', `ERRORS', and `WARNINGS' no longer are
     reserved words. (Bug #724)

   * Fix for bug in `ROLLUP' when all tables were `const' tables.  (Bug

   * Fixed a bug in `UNION' that prohibited `NULL' values from being
     inserted into result set columns where the first `SELECT' of the
     `UNION' retrieved `NOT NULL' columns.

   * Fixed name resolution of columns of reduced subqueries in unions.
     (Bug #745)

   * Fixed memory overrun in subqueries in select list with `WHERE'
     clause bigger than outer query `WHERE' clause. (Bug #726)

   * Fixed a bug that caused `MyISAM' tables with `FULLTEXT' indexes
     created in 4.0.x to be unreadable in 4.1.x.

   * Fixed a data loss bug in `REPAIR TABLE ... USE_FRM' when used with
     tables that contained `TIMESTAMP' columns and were created in

   * Fixed reduced subquery processing in `ORDER BY'/`GROUP BY'
     clauses. (Bug #442)

   * Fixed name resolution of outer columns of subquery in
     `INSERT'/`REPLACE' statements. (Bug #446)

   * Fixed bug in marking columns of reduced subqueries. (Bug #679)

   * Fixed a bug that made `CREATE FULLTEXT INDEX' syntax illegal.

   * Fixed a crash when a `SELECT' that required a temporary table
     (marked by `Using temporary' in `EXPLAIN' output) was used as a
     derived table in `EXPLAIN' command. (Bug #251)

   * Fixed a rare table corruption bug in `DELETE' from a big table with
     a *new* (created by MySQL-4.1) full-text index.

   * `LAST_INSERT_ID()' now returns 0 if the last `INSERT' statement
     didn't insert any rows.

   * Fixed missing last character in function output. (Bug #447)

   * Fixed a rare replication bug when a transaction spanned two or more
     relay logs, and the slave was stopped while executing the part of
     the transaction that was in the second or later relay log. Then
     replication would resume at the beginning of the second or later
     relay log, which was incorrect. (It should resume at `BEGIN', in
     the first relay log.) (Bug #53)

   * `CONNECTION_ID()' now is properly replicated. (Bug #177)

   * The new `PASSWORD()' function in 4.1 is now properly replicated.
     (Bug #344)

   * Fixed bug with doubly freed memory.

   * Fixed crashing bug in `UNION' operations that involved temporary

   * Fixed a crashing bug in `DERIVED TABLES' when `EXPLAIN' is used on
     a `DERIVED TABLES' with a join.

   * Fixed a crashing bug in `DELETE' with `ORDER BY' and `LIMIT'
     caused by an uninitialized array of reference pointers.

   * Fixed a bug in the `USER()' function caused by an error in the
     size of the allocated string.

   * Fixed a crashing bug when attempting to create a table containing
     a spatial (GIS) column with a storage engine that does not support
     spatial types.

   * Fixed a crashing bug in `UNION' caused by the empty select list and
     a non-existent column being used in some of the individual `SELECT'

   * Fixed a replication bug with a 3.23 master and a 4.0 slave: The
     slave lost the replicated temporary tables if `FLUSH LOGS' was
     issued on the master. (Bug #254)

   * Fixed a security bug: A server compiled without SSL support still
     allowed connections by users that had the `REQUIRE SSL' option
     specified for their accounts.

   * When an undefined user variable was used in a updating query on the
     master (such as `INSERT INTO t VALUES(@a)', where `@a' had never
     been set by this connection before), the slave could replicate the
     query incorrectly if a previous transaction on the master used a
     user variable of the same name. (Bug #1331)

   * Fixed bug with prepared statements: Using the `?' prepared
     statement parameter as the argument to certain functions or
     statement clauses caused a server crash when `mysql_prepare()' was
     invoked. (Bug #1500)

Additional notes:

   * Due to a bug in the getpeername() system call on 64bit HP-UX, we
     currently do not provide 64bit binaries for HP-UX (IA64 and PA-RISC).
     We are working closely with HP on investigating this issue.

- -- 
 Lenz Grimmer <lenz@stripped>
 Senior Production Engineer
 MySQL GmbH,
 Hamburg, Germany

 For technical support contracts, visit
Version: GnuPG v1.2.2 (GNU/Linux)
Comment: For info see

MySQL 4.1.1 has been releasedLenz Grimmer4 Dec