Newsletters older than 6 months may have links that are out of date. Please use the Search to check for updated links.
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 http://www.mysql.com/downloads/ (http://www.mysql.com/downloads/) 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 http://bugs.mysql.com/ 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 http://bugs.mysql.com/.
Please note, that for us to resolve a bug report, a reproducible test is required. See "How to report a bug" at http://bugs.mysql.com/how-to-report.php 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 http://www.mysql.com/doc/en/MySQL_4.1_Nutshell.html (http://www.mysql.com/doc/en/MySQL_4.1_Nutshell.html)
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 disabled.
* 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 statements.
* 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 number.
* *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()', `MAKEDATE()', `MAKETIME()', `MICROSECOND()', `SUBTIME()', `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', `MINUTE_MICROSECOND', `SECOND_MICROSECOND', and `MICROSECOND' for `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 LOGS', `FLUSH MASTER', `FLUSH SLAVE', and `FLUSH TABLES WITH READ 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 WARNINGS'.
* 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' or `PURGE BINARY 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)
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.