The 3.22 version has faster and safer connect code than version 3.21, as well as a lot of new nice enhancements. As there aren't really any major changes, upgrading from 3.21 to 3.22 should be very easy and painless. See the section called “Upgrading from Version 3.21 to 3.22”.
Fixed problem with STD().
Merged changes from the newest ISAM library from 3.23.
Fixed problem with INSERT DELAYED.
Fixed a bug core dump when using a LEFT JOIN/STRAIGHT_JOIN on a table with only one row.
Fixed problem with GROUP BY on TINYBLOB columns; this caused bugzilla to not show rows in some queries.
Had to do total recompile of the Windows binary version as VC++ didn't compile all relevant files for 3.22.33 :(
Fixed problems in Windows when locking tables with LOCK TABLE.
Quicker kill of SELECT DISTINCT queries.
Fixed problem when storing numbers in timestamps.
Fix problem with time zones that have half hour offsets.
Added mysqlhotcopy, a fast online hot-backup utility for local MySQL databases. By Tim Bunce.
New more secure mysqlaccess. Thanks to Steve Harvey for this.
Fixed security problem in the protocol regarding password checking.
Fixed problem that affected queries that did arithmetic on GROUP functions.
Fixed a bug in the ISAM code when deleting rows on tables with packed indexes.
Fixed optimizer problem on SELECT when using many overlapping indexes.
Disabled floating-point exceptions for FreeBSD to fix core dump when doing SELECT FLOOR(POW(2,63)).
Added print of default arguments options to all clients.
Fixed critical problem with the WITH GRANT OPTION option.
Fixed non-critical Y2K problem when writing short date to log files.
Upgraded the configure and include files to match the latest 3.23 version. This should increase portability and make it easier to build shared libraries.
Added latest patches to MIT-pthreads for NetBSD.
Fixed problem with time zones that are < GMT -11.
Fixed a bug when deleting packed keys in NISAM.
Fixed problem that could cause MySQL to touch freed memory when doing very complicated GROUP BY queries.
Fixed core dump if you got a crashed table where an ENUM field value was too big.
Added mysqlshutdown.exe and mysqlwatch.exe to the Windows distribution.
Fixed problem when doing ORDER BY on a reference key.
Fixed that INSERT DELAYED doesn't update timestamps that are given.
Fixed problem with LEFT JOIN and COUNT() on a column which was declared NULL + and it had a DEFAULT value.
Fixed core dump problem when using CONCAT() in a WHERE clause.
Fixed problem with AVG() and STD() with NULL values.
Fixed prototype in my_ctype.h when using other character sets.
Some configure issues to fix problems with big filesystem detection.
Fixed problem when sorting on big BLOB columns.
ROUND() will now work on Windows.
Fixed core dump with empty BLOB/TEXT column argument to REVERSE().
Extended /*! */ with version numbers.
Changed SUBSTRING(text FROM pos) to conform to standard SQL. (Before this construct returned the rightmost 'pos' characters.)
Fixed problem with LOCK TABLES combined with DELETE FROM table
Fixed problem that INSERT ... SELECT didn't use BIG_TABLES.
SET SQL_LOW_PRIORITY_UPDATES=# didn't work.
Password wasn't updated correctly if privileges didn't change on: GRANT ... IDENTIFIED BY
Fixed range optimizer bug in SELECT * FROM tbl_name WHERE key_part1 >= const AND (key_part2 = const OR key_part2 = const).
Fixed bug in compression key handling in ISAM.
DATA is no longer a reserved word.
Fixed optimizer bug with tables with only one row.
Fixed bug when using LOCK TABLES tbl_name READ; FLUSH TABLES;
Applied some patches for HP-UX.
isamchk should now work on Windows.
Changed configure to not use big file handling on Linux as this crashes some Red Hat 6.0 systems
Upgraded to use Autoconf 2.13, Automake 1.4 and libtool 1.3.2.
Better support for SCO in configure.
Added option --defaults-file=file_name to option file handling to force use of only one specific option file.
Extended CREATE syntax to ignore MySQL 3.23 keywords.
Fixed deadlock problem when using INSERT DELAYED on a table locked with LOCK TABLES.
Fixed deadlock problem when using DROP TABLE on a table that was locked by another thread.
Add logging of GRANT/REVOKE commands in the update log.
Fixed isamchk to detect a new error condition.
Fixed bug in NATURAL LEFT JOIN.
Fixed problem in the C API when you called mysql_close() directly after mysql_init().
Better client error message when you can't open socket.
Fixed delayed_insert_thread counting when you couldn't create a new delayed_insert thread.
Fixed bug in CONCAT() with many arguments.
Added patches for DEC 3.2 and SCO.
Fixed path-bug when installing MySQL as a service on NT.
MySQL on Windows is now compiled with VC++ 6.0 instead of with VC++ 5.0.
New installation setup for MySQL on Windows.
Fixed problem with DELETE FROM TABLE when table was locked by another thread.
Fixed bug in LEFT JOIN involving empty tables.
Changed the mysql.db column from CHAR(32) to CHAR(60).
MODIFY and DELAYED are no longer reserved words.
Fixed a bug when storing days in a TIME column.
Fixed a problem with Host '...' is not allowed to connect to this MySQL server after one had inserted a new MySQL user with a GRANT command.
Changed to use TCP_NODELAY also on Linux (should give faster TCP/IP connections).
Fixed STD() for big tables when result should be 0.
The update log didn't have newlines on some operating systems.
INSERT DELAYED had some garbage at end in the update log.
Fixed bug in mysql_install_db (from 3.22.17).
Changed default key cache size to 8MB.
Fixed problem with queries that needed temporary tables with BLOB columns.
Fixes a fatal problem in 3.22.17 on Linux; after shutdown not all threads died properly.
Added option -O flush_time=# to mysqld. This is mostly useful on Windows and tells how often MySQL should close all unused tables and flush all updated tables to disk.
Fixed problem that a VARCHAR column compared with CHAR column didn't use keys efficiently.
Fixed a core dump problem when using --log-update and connecting without a default database.
Fixed some configure and portability problems.
Using LEFT JOIN on tables that had circular dependencies caused mysqld to hang forever.
mysqladmin processlist could kill the server if a new user logged in.
DELETE FROM tbl_name WHERE key_column=col_name didn't find any matching rows. Fixed.
DATE_ADD(column, ...) didn't work.
INSERT DELAYED could deadlock with status upgrading lock.
Extended ENCRYPT() to take longer salt strings than 2 characters.
longlong2str is now much faster than before. For Intel x86 platforms, this function is written in optimized assembler.
Added the MODIFY keyword to ALTER TABLE.
GRANT used with IDENTIFIED BY didn't take effect until privileges were flushed.
Name change of some variables in SHOW STATUS.
Fixed problem with ORDER BY with 'only index' optimization when there were multiple key definitions for a used column.
DATE and DATETIME columns are now up to 5 times faster than before.
INSERT DELAYED can be used to let the client do other things while the server inserts rows into a table.
LEFT JOIN USING (col1,col2) didn't work if one used it with tables from 2 different databases.
LOAD DATA LOCAL INFILE didn't work in the Unix version because of a missing file.
Fixed problems with VARCHAR/BLOB on very short rows (< 4 bytes); error 127 could occur when deleting rows.
Updating BLOB/TEXT through formulas didn't work for short (< 256 char) strings.
When you did a GRANT on a new host, mysqld could die on the first connect from this host.
Fixed bug when one used ORDER BY on column name that was the same name as an alias.
Added BENCHMARK(loop_count,expression) function to time expressions.
Allow empty arguments to mysqld to make it easier to start from shell scripts.
Setting a TIMESTAMP column to NULL didn't record the timestamp value in the update log.
Fixed lock handler bug when one did INSERT INTO TABLE ... SELECT ... GROUP BY.
Added a patch for localtime_r() on Windows so that it will no lonher crash if your date is > 2039, but instead will return a time of all zero.
Names for user-defined functions are no longer case-sensitive.
Added escape of ^Z (ASCII 26) to \Z as ^Z doesn't work with pipes on Windows.
mysql_fix_privileges adds a new column to the mysql.func to support aggregate UDF functions in future MySQL releases.
Saving NOW(), CURDATE() or CURTIME() directly in a column didn't work.
SELECT COUNT(*) ... LEFT JOIN ... didn't work with no WHERE part.
Updated config.guess to allow MySQL to configure on UnixWare 7.1.x.
Changed the implementation of pthread_cond() on the Windows version. get_lock() now correctly times out on Windows!
Fixed problem when using DATE_ADD() and DATE_SUB() in a WHERE clause.
You can now set the password for a user with the GRANT ... TO user IDENTIFIED BY 'password' syntax.
Fixed bug in GRANT checking with SELECT on many tables.
Added missing file mysql_fix_privilege_tables to the RPM distribution. This is not run by default because it relies on the client package.
Added option SQL_SMALL_RESULT to SELECT to force use of fast temporary tables when you know that the result set will be small.
Allow use of negative real numbers without a decimal point.
Day number is now adjusted to maximum days in month if the resulting month after DATE_ADD/DATE_SUB() doesn't have enough days.
Fix that GRANT compares columns in case-insensitive fashion.
Fixed a bug in sql_list.h that made ALTER TABLE dump core in some contexts.
The hostname in user@hostname can now include ‘.’ and ‘-’ without quotes in the context of the GRANT, REVOKE and SET PASSWORD FOR ... statements.
Fix for isamchk for tables which need big temporary files.
Important: You must run the mysql_fix_privilege_tables script when you upgrade to this version! This is needed because of the new GRANT system. If you don't do this, you will get Access denied when you try to use ALTER TABLE, CREATE INDEX, or DROP INDEX.
GRANT to allow/deny users table and column access.
Changed USER() to return a value in user@host format. Formerly it returned only user.
Changed the syntax for how to set PASSWORD for another user.
New command FLUSH STATUS that resets most status variables to zero.
New status variables: aborted_threads, aborted_connects.
New option variable: connection_timeout.
Added support for Thai sorting (by Pruet Boonma mailto:pruet@@ds90.intanon.nectec.or.th).
Slovak and Japanese error messages.
Configuration and portability fixes.
Added option SET SQL_WARNINGS=1 to get a warning count also for simple (single-row) inserts.
MySQL now uses SIGTERM instead of SIGQUIT with shutdown to work better on FreeBSD.
Added option \G (print vertically) to mysql.
SELECT HIGH_PRIORITY ... killed mysqld.
IS NULL on a AUTO_INCREMENT column in a LEFT JOIN didn't work as expected.
New function MAKE_SET().
mysql_install_db no longer starts the MySQL server! You should start mysqld with safe_mysqld after installing it! The MySQL RPM will, however, start the server as before.
Added --bootstrap option to mysqld and recoded mysql_install_db to use it. This will make it easier to install MySQL with RPMs.
Changed +, - (sign and minus), *, /, %, ABS() and MOD() to be BIGINT aware (64-bit safe).
Fixed a bug in ALTER TABLE that caused mysqld to crash.
MySQL now always reports the conflicting key values when a duplicate key entry occurs. (Before this was only reported for INSERT.)
New syntax: INSERT INTO tbl_name SET col_name=value, col_name=value, ...
Most errors in the .err log are now prefixed with a time stamp.
Added option MYSQL_INIT_COMMAND to mysql_options() to make a query on connect or reconnect.
Added option MYSQL_READ_DEFAULT_FILE and MYSQL_READ_DEFAULT_GROUP to mysql_options() to read the following parameters from the MySQL option files: port, socket, compress, password, pipe, timeout, user, init-command, host and database.
Added maybe_null to the UDF structure.
Added option IGNORE to INSERT statements with many rows.
Fixed some problems with sorting of the koi8 character sets; users of koi8 must run isamchk -rq on each table that has an index on a CHAR or VARCHAR column.
New script mysql_setpermission, by Luuk de Boer. It allows easy creation of new users with permissions for specific databases.
Allow use of hexadecimal strings (0x...) when specifying a constant string (like in the column separators with LOAD DATA INFILE).
Ported to OS/2 (thanks to Antony T. Curtis mailto:antony.curtis@@olcs.net).
Added more variables to SHOW STATUS and changed format of output to be like SHOW VARIABLES.
Added extended-status command to mysqladmin which will show the new status variables.
SET SQL_LOG_UPDATE=0 caused a lockup of the server.
New SQL statement: FLUSH [ TABLES | HOSTS | LOGS | PRIVILEGES ] [, ...]
New SQL statement: KILL thread_id.
Added casts and changed include files to make MySQL easier to compile on AIX and DEC OSF/1 4.x
Fixed conversion problem when using ALTER TABLE from a INT to a short CHAR() column.
Added SELECT HIGH_PRIORITY; this will get a lock for the SELECT even if there is a thread waiting for another SELECT to get a WRITE LOCK.
Moved wild_compare() to string class to be able to use LIKE on BLOB/TEXT columns with \0.
Added ESCAPE option to LIKE.
Added a lot more output to mysqladmin debug.
You can now start mysqld on Windows with the --flush option. This will flush all tables to disk after each update. This makes things much safer on the Windows platforms but also much slower.
Czech character sets should now work much better.
DATE_ADD() and DATE_SUB() didn't work with group functions.
mysql will now also try to reconnect on USE database commands.
Fix problem with ORDER BY and LEFT JOIN and const tables.
Fixed problem with ORDER BY if the first ORDER BY column was a key and the rest of the ORDER BY columns wasn't part of the key.
Fixed a big problem with OPTIMIZE TABLE.
MySQL clients on NT will now by default first try to connect with named pipes and after this with TCP/IP.
Fixed a problem with DROP TABLE and mysqladmin shutdown on Windows (a fatal bug from 3.22.6).
Fixed problems with TIME columns and negative strings.
Added an extra thread signal loop on shutdown to avoid some error messages from the client.
MySQL now uses the next available number as extension for the update log file.
Added patches for UNIXWARE 7.
Added LIMIT clause for the DELETE statement.
You can now use the /*! ... */ syntax to hide MySQL-specific keywords when you write portable code. MySQL will parse the code inside the comments as if the surrounding /*! and */ comment characters didn't exist.
OPTIMIZE TABLE tbl_name can now be used to reclaim disk space after many deletes. Currently, this uses ALTER TABLE to regenerate the table, but in the future it will use an integrated isamchk for more speed.
Upgraded libtool to make the configuration process more portable.
Fixed slow UPDATE and DELETE operations when using DATETIME or DATE keys.
Changed optimizer to make it better at deciding when to do a full join and when using keys.
You can now use mysqladmin proc to display information about your own threads. Only users with the PROCESS privilege can get information about all threads. (In 4.0.2, you need the SUPER privilege for this.)
Added handling of formats YYMMDD, YYYYMMDD, YYMMDDHHMMSS for numbers when using DATETIME and TIMESTAMP types. (Formerly these formats only worked with strings.)
Added connect option CLIENT_IGNORE_SPACE to allow use of spaces after function names and before ‘(’ (Powerbuilder requires this). This will make all function names reserved words.
Added the --log-long-format option to mysqld to enable timestamps and INSERT_IDs in the update log.
Added --where option to mysqldump (patch by Jim Faucette).
The lexical analyzer now uses “perfect hashing” for faster parsing of SQL statements.
Faster mysqldump.
For the LOAD DATA INFILE statement, you can now use the new LOCAL keyword to read the file from the client. mysqlimport will automatically use LOCAL when importing with the TCP/IP protocol.
Fixed small optimize problem when updating keys.
Changed makefiles to support shared libraries.
MySQL-NT can now use named pipes, which means that you can now use MySQL-NT without having to install TCP/IP.
All table lock handing is changed to avoid some very subtle deadlocks when using DROP TABLE, ALTER TABLE, DELETE FROM TABLE and mysqladmin flush-tables under heavy usage. Changed locking code to get better handling of locks of different types.
Updated DBI to 1.00 and DBD to 1.2.0.
Added a check that the error message file contains error messages suitable for the current version of mysqld. (To avoid errors if you accidentally try to use an old error message file.)
All count structures in the client (affected_rows(), insert_id(), ...) are now of type BIGINT to allow 64-bit values to be used. This required a minor change in the MySQL protocol which should affect only old clients when using tables with AUTO_INCREMENT values > 16MB.
The return type of mysql_fetch_lengths() has changed from uint * to ulong *. This may give a warning for old clients but should work on most machines.
Change mysys and dbug libraries to allocate all thread variables in one struct. This makes it easier to make a threaded libmysql.dll library.
Use the result from gethostname() (instead of uname()) when constructing .pid filenames.
New better compressed client/server protocol.
COUNT(), STD() and AVG() are extended to handle more than 4GB rows.
You can now store values in the range -838:59:59 <= x <= 838:59:59 in a TIME column.
Warning: Incompatible change!! If you set a TIME column to too short a value, MySQL now assumes the value is given as: [[[D ]HH:]MM:]SS instead of HH[:MM[:SS]].
TIME_TO_SEC() and SEC_TO_TIME() can now handle negative times and hours up to 32767.
Added new option SET SQL_LOG_UPDATE={0|1} to allow users with the PROCESS privilege to bypass the update log. (Modified patch from Sergey A Mukhin mailto:violet@@rosnet.net.)
Fixed fatal bug in LPAD().
Initialize line buffer in mysql.cc to make BLOB reading from pipes safer.
Added -O max_connect_errors=# option to mysqld. Connect errors are now reset for each correct connection.
Increased the default value of max_allowed_packet to 1M in mysqld.
Added --low-priority-updates option to mysqld, to give table-modifying operations (INSERT, REPLACE, UPDATE, DELETE) lower priority than retrievals. You can now use {INSERT | REPLACE | UPDATE | DELETE} LOW_PRIORITY ... You can also use SET SQL_LOW_PRIORITY_UPDATES={0|1} to change the priority for one thread. One side effect is that LOW_PRIORITY is now a reserved word. :(
Add support for INSERT INTO table ... VALUES(...),(...),(...), to allow inserting multiple rows with a single statement.
INSERT INTO tbl_name is now also cached when used with LOCK TABLES. (Previously only INSERT ... SELECT and LOAD DATA INFILE were cached.)
Allow GROUP BY functions with HAVING:
mysql> SELECT col FROM table GROUP BY col HAVING COUNT(*)>0;
mysqld will now ignore trailing ‘;’ characters in queries. This is to make it easier to migrate from some other SQL servers that require the trailing ‘;’.
Fix for corrupted fixed-format output generated by SELECT INTO OUTFILE.
Warning: Incompatible change! Added Oracle GREATEST() and LEAST() functions. You must now use these instead of the MAX() and MIN() functions to get the largest/smallest value from a list of values. These can now handle REAL, BIGINT and string (CHAR or VARCHAR) values.
Warning: Incompatible change! DAYOFWEEK() had offset 0 for Sunday. Changed the offset to 1.
Give an error for queries that mix GROUP BY columns and fields when there is no GROUP BY specification.
Added --vertical option to mysql, for printing results in vertical mode.
Index-only optimization; some queries are now resolved using only indexes. Until MySQL 4.0, this works only for numeric columns. See MySQL indexes.
Lots of new benchmarks.
A new C API chapter and lots of other improvements in the manual.
Added --tmpdir option to mysqld, for specifying the location of the temporary file directory.
MySQL now automatically changes a query from an ODBC client:
SELECT ... FROM table WHERE auto_increment_column IS NULL
to:
SELECT ... FROM table WHERE auto_increment_column == LAST_INSERT_ID()
This allows some ODBC programs (Delphi, Access) to retrieve the newly inserted row to fetch the AUTO_INCREMENT value.
DROP TABLE now waits for all users to free a table before deleting it.
Fixed small memory leak in the new connect protocol.
New functions BIN(), OCT(), HEX() and CONV() for converting between different number bases.
Added function SUBSTRING() with two arguments.
If you created a table with a record length smaller than 5, you couldn't delete rows from the table.
Added optimization to remove const reference tables from ORDER BY and GROUP BY.
mysqld now automatically disables system locking on Linux and Windows, and for systems that use MIT-pthreads. You can force the use of locking with the --enable-external-locking option.
Added --console option to mysqld, to force a console window (for error messages) when using Windows.
Fixed table locks for Windows.
Allow ‘$’ in identifiers.
Changed name of user-specific configuration file from my.cnf to .my.cnf (Unix only).
Added DATE_ADD() and DATE_SUB() functions.
Fixed a lock problem (bug in MySQL 3.22.1) when closing temporary tables.
Added missing mysql_ping() to the client library.
Added --compress option to all MySQL clients.
Changed byte to char in mysql.h and mysql_com.h.
Searching on multiple constant keys that matched more than 30% of the rows didn't always use the best possible key.
New functions <<, >>, RPAD() and LPAD().
You can now save default options (like passwords) in a configuration file (my.cnf).
Lots of small changes to get ORDER BY to work when no records are found when using fields that are not in GROUP BY (MySQL extension).
Added --chroot option to mysqld, to start mysqld in a chroot environment (by Nikki Chumakov mailto:nikkic@@cityline.ru).
Trailing spaces are now ignored when comparing case-sensitive strings; this should fix some problems with ODBC and flag 512!
Fixed a core dump bug in the range optimizer.
Added --one-thread option to mysqld, for debugging with LinuxThreads (or glibc). (This replaces the -T32 flag)
Added DROP TABLE IF EXISTS to prevent an error from occurring if the table doesn't exist.
IF and EXISTS are now reserved words (they would have to be sooner or later).
Added lots of new options to mysqldump.
Server error messages are now in mysqld_error.h.
The client/server protocol now supports compression.
All bugfixes from MySQL 3.21.32.
Added new C API function mysql_ping().
Added new API functions mysql_init() and mysql_options(). You now MUST call mysql_init() before you call mysql_real_connect(). You don't have to call mysql_init() if you only use mysql_connect().
Added mysql_options(...,MYSQL_OPT_CONNECT_TIMEOUT,...) so you can set a timeout for connecting to a server.
Added --timeout option to mysqladmin, as a test of mysql_options().
Added AFTER column and FIRST options to ALTER TABLE ... ADD columns. This makes it possible to add a new column at some specific location within a row in an existing table.
WEEK() now takes an optional argument to allow handling of weeks when the week starts on Monday (some European countries). By default, WEEK() assumes the week starts on Sunday.
TIME columns weren't stored properly (bug in MySQL 3.22.0).
UPDATE now returns information about how many rows were matched and updated, and how many “warnings” occurred when doing the update.
Fixed incorrect result from FORMAT(-100,2).
ENUM and SET columns were compared in binary (case-sensitive) fashion; changed to be case-insensitive.
New (backward-compatible) connect protocol that allows you to specify the database to use when connecting, to get much faster connections to a specific database.
The mysql_real_connect() call is changed to:
mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, uint port, const char *unix_socket, uint client_flag)
Each connection is handled by its own thread, rather than by the master accept() thread. This fixes permanently the telnet bug that was a topic on the mail list some time ago.
All TCP/IP connections are now checked with backward-resolution of the hostname to get better security. mysqld now has a local hostname resolver cache so connections should actually be faster than before, even with this feature.
A site automatically will be blocked from future connections if someone repeatedly connects with an “improper header” (like when one uses telnet).
You can now refer to tables in different databases with references of the form tbl_name@db_name or db_name.tbl_name. This makes it possible to give a user read access to some tables and write access to others simply by keeping them in different databases!
Added --user option to mysqld, to allow it to run as another Unix user (if it is started as the Unix root user).
Added caching of users and access rights (for faster access rights checking)
Normal users (not anonymous ones) can change their password with mysqladmin password "newpwd". This uses encrypted passwords that are not logged in the normal MySQL log!
All important string functions are now coded in assembler for x86 Linux machines. This gives a speedup of 10% in many cases.
For tables that have many columns, the column names are now hashed for much faster column name lookup (this will speed up some benchmark tests a lot!)
Some benchmarks are changed to get better individual timing. (Some loops were so short that a specific test took < 2 seconds. The loops have been changed to take about 20 seconds to make it easier to compare different databases. A test that took 1-2 seconds before now takes 11-24 seconds, which is much better)
Re-arranged SELECT code to handle some very specific queries involving group functions (like COUNT(*)) without a GROUP BY but with HAVING. The following now works:
mysql> SELECT COUNT(*) as C FROM table HAVING C > 1;
Changed the protocol for field functions to be faster and avoid some calls to malloc().
Added -T32 option to mysqld, for running all queries under the main thread. This makes it possible to debug mysqld under Linux with gdb!
Added optimization of not_null_column IS NULL (needed for some Access queries).
Allow STRAIGHT_JOIN to be used between two tables to force the optimizer to join them in a specific order.
String functions now return VARCHAR rather than CHAR and the column type is now VARCHAR for fields saved as VARCHAR. This should make the MyODBC driver better, but may break some old MySQL clients that don't handle FIELD_TYPE_VARCHAR the same way as FIELD_TYPE_CHAR.
CREATE INDEX and DROP INDEX are now implemented through ALTER TABLE. CREATE TABLE is still the recommended (fast) way to create indexes.
Added --set-variable option wait_timeout to mysqld.
Added time column to mysqladmin processlist to show how long a query has taken or how long a thread has slept.
Added lots of new variables to show variables and some new to show status.
Added new type YEAR. YEAR is stored in 1 byte with allowable values of 0, and 1901 to 2155.
Added new DATE type that is stored in 3 bytes rather than 4 bytes. All new tables are created with the new date type if you don't use the --old-protocol option to mysqld.
Fixed bug in record caches; for some queries, you could get Error from table handler: # on some operating systems.
Added --enable-assembler option to configure, for x86 machines (tested on Linux + gcc). This will enable assembler functions for the most important string functions for more speed!