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 > 16M.
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 file names.
New better compressed server/client protocol.
COUNT(), STD() and AVG() are extended to handle more than 4G 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 <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.