Functionality added or changed:
New CHARSET() and COLLATION() functions to return the character set and collation of a string.
Allow index type to be specified explicitly for some storage engines via USING type_name syntax in index definition.
New function IS_USED_LOCK() for determining the connection identifier of the client that holds a given advisory lock.
New more secure client authentication based on 45-byte passwords in the user table.
New CRC32() function to compute cyclic redundancy check value.
On Windows, we are now using shared memory to communicate between server and client when they are running on the same machine and you are connecting to localhost.
REPAIR of MyISAM tables now uses less temporary disk space when sorting char columns.
DATE/DATETIME checking is now a bit stricter to support the ability to automatically distinguish between date, datetime, and time with microseconds. For example, dates of type YYYYMMDD HHMMDD are no longer supported; you must either have separators between each DATE/TIME part or not at all.
Server side help for all MySQL functions. One can now type help week in the mysql client and get help for the week() function.
Added new mysql_get_server_version() C API client function.
Fixed bug in libmysqlclient that fetched column defaults.
Fixed bug in mysql.cc client when skipping comments
Added record_in_range() method to MERGE tables to be able to choose the right index when there are many to choose from.
Replication now works with RAND() and user variables @var.
Allow one to change mode for ANSI_QUOTES on the fly.
EXPLAIN SELECT now can be killed. See KILL.
REPAIR TABLE now can be killed. See KILL.
Allow empty index lists to be specified for USE INDEX, IGNORE INDEX, and FORCE INDEX.
DROP TEMPORARY TABLE now drops only temporary tables and doesn't end transactions.
Added support for UNION in derived tables.
Warning: Incompatible change! TIMESTAMP is now returned as a string of type 'YYYY-MM-DD HH:MM:SS' and different timestamp lengths are not supported.
This change was necessary for SQL standards compliance. In a future version, a further change will be made (backward compatible with this change), allowing the timestamp length to indicate the desired number of digits of fractions of a second.
New faster client/server protocol that supports prepared statements, bound parameters, and bound result columns, binary transfer of data, warnings.
Added database and real table name (in case of alias) to the MYSQL_FIELD structure.
Multi-line queries: You can now issue several queries at once and then read the results in one go.
In CREATE TABLE foo (a INT not null primary key) the PRIMARY word is now optional.
In CREATE TABLE the attribute SERIAL is now an alias for BIGINT NOT NULL AUTO_INCREMENT UNIQUE.
SELECT ... FROM DUAL is an alias for SELECT .... (To be compatible with some other databases).
If one creates a too long CHAR/VARCHAR it's now automatically changed to TEXT or BLOB; One will get a warning in this case.
One can specify the different BLOB/TEXT types with the syntax BLOB(length) and TEXT(length). MySQL will automatically change it to one of the internal BLOB/TEXT types.
CHAR BYTE is an alias for CHAR BINARY.
VARCHARACTER is an alias for VARCHAR.
New operators integer MOD integer and integer DIV integer.
SERIAL DEFAULT VALUE added as an alias for AUTO_INCREMENT.
TRUE and FALSE added as alias for 1 and 0, respectively.
Aliases are now forced in derived tables, as per SQL-99.
Fixed SELECT .. LIMIT 0 to return proper row count for SQL_CALC_FOUND_ROWS.
One can specify many temporary directories to be used in a round-robin fashion with: --tmpdir=dirname1:dirname2:dirname3.
Subqueries: SELECT * from t1 where t1.a=(SELECT t2.b FROM t2).
Derived tables:
SELECT a.col1, b.col2 FROM (SELECT MAX(col1) AS col1 FROM root_table) a, other_table b WHERE a.col1=b.col1;
Character sets to be defined per column, table and database.
Unicode (UTF8) support.
New CONVERT(... USING ...) syntax for converting string values between character sets.
BTREE index on HEAP tables.
Faster embedded server (new internal communication protocol).
One can add a comment per column in CREATE TABLE.
SHOW FULL COLUMNS FROM table_name shows column comments.
ALTER DATABASE.
Support for GIS (Geometrical data). See Spatial extensions in MySQL.
SHOW [COUNT(*)] WARNINGS shows warnings from the last command.
One can specify a column type for a colum in CREATE TABLE ... SELECT by defining the column in the CREATE part.
CREATE TABLE foo (a tinyint not null) SELECT b+1 AS 'a' FROM bar;
expr SOUNDS LIKE expr same as SOUNDEX(expr)=SOUNDEX(expr).
Added new VARIANCE(expr) function returns the variance of expr
One can create a table from the existing table using CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table (LIKE table). The table can be either normal or temporary.
New options --reconnect and --disable-reconnect for the mysql client, to reconnect automatically or not if the connection is lost.
START SLAVE (STOP SLAVE) no longer returns an error if the slave is already started (stopped); it returns a warning instead.
SLAVE START and SLAVE STOP are no longer accepted by the query parser; use START SLAVE and STOP SLAVE instead.