出售域名!  关于Linux

Go to the first, previous, next, last section, table of contents.


D MySQL change history

Note that we tend to update the manual at the same time we implement new things to MySQL. If you find a version listed below that you can't find on the MySQL download page, this means that the version has not yet been released!

D.1 Changes in release 3.23.x (Released as alpha)

The major difference between release 3.23 and releases 3.22 and 3.21 is that 3.23 contains a new ISAM library (MyISAM), which is more tuned for SQL than the old ISAM was.

The 3.23 release is under development, and things will be added at a fast pace to it. For the moment we recommend this version only for users that desperately need a new feature that is found only in this release (like big file support and machine-independent tables). (Note that all new functionality in MySQL 3.23 is extensively tested, but as this release involves much new code, it's difficult to test everything). This version should start to stabilize as soon as we get subselects included in it.

D.1.1 Changes in release 3.23.7

  • Fixed workaround under Linux to avoid problems with pthread_mutex_timedwait, which is used with INSERT DELAYED. See section 4.11.5 Linux notes (all Linux versions)
  • Fixed tha one will get at 'disk full' error message if one gets disk full when doing sorting (instead of waiting until we got more disk space).
  • Fixed a bug in MyISAM with keys > 250 characters.
  • In MyISAM one can now do an INSERT at the same time as other threads are reading from the table.
  • Added variable max_write_lock_count to mysqld to force a READ lock after a certain number of WRITE locks.
  • Inverted flag delayed_key_write on show variables.
  • Renamed variable concurrency to thread_concurrency.
  • The following functions are now multi-byte-safe: LOCATE(substr,str), POSITION(substr IN str), LOCATE(substr,str,pos), INSTR(str,substr), LEFT(str,len), RIGHT(str,len), SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len), MID(str,pos,len), SUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING_INDEX(str,delim,count), RTRIM(str), TRIM([[BOTH | TRAILING] [remstr] FROM] str), REPLACE(str,from_str,to_str), REVERSE(str), INSERT(str,pos,len,newstr), LCASE(str), LOWER(str), UCASE(str) and UPPER(str); Patch by Wei He.
  • Fix core dump when releasing a lock from a non existing table
  • Remove locks on tables before starting to remove duplicates.
  • Added option FULL to SHOW PROCESSLIST.
  • Added option --verbose to mysqladmin.
  • Fixed problem when automaticly converting HEAP to MyISAM.
  • Fixed bug in HEAP tables when doing insert + delete + insert + scan the table.
  • Fixed bugs on Alpha with REPLACE() and LOAD DATA INFILE.
  • Added mysqld variable interactive_timeout.
  • Changed the argument to mysql_data_seek() from ulong to ulonglong.

D.1.2 Changes in release 3.23.6

  • Added mysqld option -O lower_case_table_names={0|1} to allow users to force table names to lower case.
  • Added SELECT ... INTO DUMPFILE.
  • Added mysqld option --ansi to make some functions ANSI SQL compatible.
  • Temporary tables now starts with #sql.
  • Added quoting of identifiers with ` (" in --ansi mode).
  • Changed to use snprintf() when printing floats to avoid some buffer overflows on FREEBSD.
  • Made [floor() overflow safe on FREEBSD.
  • Added option --quote-names to mysqldump
  • Fixed bug that one could make a part of a PRIMARY KEY NOT NULL.
  • Fixed encrypt() to be thread safe and not reuse buffer.
  • Added mysql_odbc_escape_string() function to support big5 characters in MyOBC.
  • Rewrote the table handler to use classes. This introduces a lot of new code, but will make table handling faster and better...
  • Added patch by Sasha for user defined variables.
  • Changed that FLOAT and DOUBLE (without any length modifiers) are not anymore fixed decimal point numbers.
  • Changed the meaning of FLOAT(X): Now this is the same as FLOAT if X <= 24 and a DOUBLE if 24 < X <= 53.
  • DECIMAL(X) is now an alias for DECIMAL(X,0) and DECIMAL is now an alias for DECIMAL(10,0). The same goes for NUMERIC.
  • Added option ROW_FORMAT={default | dynamic | static | compressed} to CREATE_TABLE.
  • DELETE FROM table_name didn't work on temporary tables.
  • Changed function CHAR_LENGTH() to be multi-byte character safe.
  • Added function ORD(string).

D.1.3 Changes in release 3.23.5

  • Fixed some Y2K problems in the new date handling in 3.23.
  • Fixed problem with SELECT DISTINCT ... ORDER BY RAND().
  • Added patches by Sergei A. Golubchik for text searching on the MyISAM level.
  • Fixed cache overflow problem when using full joins without keys.
  • Fixed some configure issues.
  • Some small changes to make parsing faster.
  • ALTER TABLE + adding a column after the last field didn't work.
  • Fixed problem when using an auto_increment column in two keys
  • One can now with MyISAM have the auto_increment part as a sub part: CREATE TABLE foo (a int not null auto_increment, b char(5), primary key (b,a))
  • Fixed bug in MyISAM with packed char keys that could be NULL.
  • AS on fieldname with CREATE TABLE table_name SELECT ... didn't work.
  • Allow use of NATIONAL and NCHAR when defining character columns. This is the same as not using BINARY.
  • Don't allow NULL columns in a PRIMARY KEY (only in UNIQUE keys).
  • Clear LAST_INSERT_ID if in uses this in ODBC: WHERE auto_increment_column IS NULL. This seams to fix some problems with Access.
  • SET SQL_AUTO_IS_NULL=0|1 now turns off/on the handling of searching after the last inserted row with WHERE auto_increment_column IS NULL.
  • Added new mysqld variable concurrency for Solaris.
  • Added option --relative to mysqladmin to make extended-status more useful to monitor changes.
  • Fixed bug when using COUNT(DISTINCT..) on an empty table.
  • Added support for the Chinese character set GBK.
  • Fixed problem with LOAD DATA INFILE and BLOB columns.
  • Added bit operator ~ (negation).
  • Fixed problem with UDF functions.

D.1.4 Changes in release 3.23.4

  • Inserting a DATETIME into a TIME column will not anymore try to store 'days' in it.
  • Fixed problem with storage of float/double on low endian machines. (This affected SUM().)
  • Added connect timeout on TCP/IP connections.
  • Fixed problem with LIKE "%" on a index that may have NULL values.
  • REVOKE ALL PRIVILEGES didn't revoke all privileges.
  • Allow creation of temporary tables with same name as the original table.
  • When granting a user a grant option for a database, he couldn't grant privileges to other users.
  • New command: SHOW GRANTS FOR user (by Sinisa).
  • New date_add syntax: date/datetime + INTERVAL # interval_type. By Joshua Chamas.
  • Fixed privilege check for LOAD DATA REPLACE.
  • Automatic fixing of broken include files on Solaris 2.7
  • Some configure issues to fix problems with big file system detection.
  • REGEXP is now case insensitive if you use not binary strings.

D.1.5 Changes in release 3.23.3

    Added patches for MIT-pthreads on NetBSD.

  • Fixed range bug in MyISAM.
  • ASC is now the default again for ORDER BY.
  • Added LIMIT to UPDATE.
  • New client function: mysql_change_user().
  • Added character set to SHOW VARIABLES.
  • Added support of --[whitespace] comments.
  • Allow INSERT into tbl_name VALUES (), that is, you may now specify an empty value list to insert a row in which each column is set to its default value.
  • Changed SUBSTRING(text FROM pos) to conform to ANSI SQL. (Before this construct returned the rightmost 'pos' characters).
  • SUM(..) with GROUP BY returned 0 on some systems.
  • Changed output for SHOW TABLE STATUS.
  • Added DELAY_KEY_WRITE option to CREATE TABLE.
  • Allow AUTO_INCREMENT on any key part.
  • Fixed problem with YEAR(NOW()) and YEAR(CURDATE()).
  • Added CASE construct.
  • New function COALESCE().

D.1.6 Changes in release 3.23.2

  • Fixed range optimizer bug: SELECT * FROM table_name WHERE key_part1 >= const AND (key_part2 = const OR key_part2 = const). The bug was that some rows could be duplicated in the result.
  • Running myisamchk without -a updated the index distribution wrong.
  • SET SQL_LOW_PRIORITY_UPDATES=1 gave parse error before.
  • You can now update indexes columns that are used in the WHERE clause. UPDATE tbl_name SET KEY=KEY+1 WHERE KEY > 100
  • Date handling should now be a bit faster.
  • Added handling of fuzzy dates (dates where day or month is 0): (Like: 1999-01-00)
  • Fixed optimization of SELECT ... WHERE key_part1=const1 AND key_part_2=const2 AND key_part1=const4 AND key_part2=const4 ; Indextype should be range instead of ref.
  • Fixed egcs 1.1.2 optimizer bug (when using BLOBs) on Linux Alpha.
  • Fixed problem with LOCK TABLES combined with DELETE FROM table.
  • MyISAM tables now allow keys on NULL and BLOB/TEXT columns.
  • The following join is now much faster: SELECT ... FROM t1 LEFT JOIN t2 ON ... WHERE t2.not_null_column IS NULL.
  • ORDER BY and GROUP BY can be done on functions.
  • Changed handling of 'const_item' to allow handling of ORDER BY RAND().
  • Indexes are now used for WHERE key_column = function.
  • Indexes are now used for WHERE key_column = column_name even if the columns are not identically packed.
  • Indexes are now used for WHERE column_name IS NULL.
  • Changed heap tables to be stored in low_byte_first order (to make it easy to convert to MyISAM tables)
  • Automatic change of HEAP temporary tables to MyISAM tables in case of 'table is full' errors.
  • Added option --init-file=file_name to mysqld.
  • COUNT(DISTINCT value,[value,...])
  • CREATE TEMPORARY TABLE now creates a temporary table, in its own namespace, that is automatically deleted if connection is dropped.
  • New keywords (required for CASE): CASE, THEN, WHEN, ELSE and END.
  • New functions EXPORT_SET() and MD5().
  • Support for the GB2312 Chinese character set.

D.1.7 Changes in release 3.23.1

  • Fixed some compilation problems.

D.1.8 Changes in release 3.23.0

    A new table handler library (MyISAM) with a lot of new features. See section 9.4 MySQL table types.

  • You can create in-memory HEAP tables which are extremely fast for lookups.
  • Support for big files (63 bit) on OSes that support big files.
  • New function LOAD_FILE(filename) to get the contents of a file as a string value.
  • New operator <=> which will act as = but will return TRUE if both arguments are NULL. This is useful for comparing changes between tables.
  • Added the ODBC 3.0 EXTRACT(interval FROM datetime) function.
  • Columns defined as FLOAT(X) is not rounded on storage and may be in scientific notation (1.0 E+10) when retrieved.
  • REPLACE is now faster than before.
  • Changed LIKE character comparison to behave as =; This means that 'e' LIKE ''e' is now true.
  • SHOW TABLE STATUS returns a lot of information about the tables.
  • Added LIKE to the SHOW STATUS command.
  • Added privilege column to SHOW COLUMNS.
  • Added columns packed and comment to SHOW INDEX.
  • Added comments to tables (with CREATE TABLE ... COMMENT "xxx").
  • Added UNIQUE, as in CREATE TABLE table_name (col int not null UNIQUE)
  • New create syntax: CREATE TABLE table_name SELECT ....
  • New create syntax: CREATE TABLE IF NOT EXISTS ...
  • Allow creation of CHAR(0) columns.
  • DATE_FORMAT() now requires `%' before any format character.
  • DELAYED is now a reserved word (sorry about that :( ).
  • An example procedure is added: analyse, file: `sql_analyse.c'. This will describe the data in your query. Try the following:
    SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max elements,[max memory]])
    
    
    

    This procedure is extremely useful when you want to check the data in your table!

  • BINARY cast to force a string to be compared case sensitively.
  • Added option --skip-show-database to mysqld.
  • Check if a row has changed in an UPDATE now also works with BLOB/TEXT columns.
  • Added the INNER join syntax. NOTE: This made INNER an reserved word!
  • Added support for netmasks to the hostname in the MySQL tables. You can specify a netmask using the IP/NETMASK syntax.
  • If you compare a NOT NULL DATE/DATETIME column with IS NULL, this is changed to a compare against 0 to satisfy some ODBC applications. (By shreeve@uci.edu).
  • NULL IN (...) now returns NULL instead of 0. This will ensure that null_column NOT IN (...) doesn't match NULL values.
  • Fix storage of floating point values in TIME columns.
  • Changed parsing of TIME strings to be more strict. Now the fractional second part is detected (and currently skipped). The following formats are supported:
    [[DAYS] [H]H:]MM:]SS[.fraction]
     
    [[[[[H]H]H]H]MM]SS[.fraction]
     
  • Detect (and ignore) second fraction part from DATETIME.
  • Added the LOW_PRIORITY attribute to LOAD DATA INFILE.
  • The default index name now uses the same case as the used column name.
  • Changed default number of connections to 100.
  • Use bigger buffers when using LOAD DATA INFILE.
  • DECIMAL(x,y) now works according to ANSI SQL.
  • Added aggregate UDF functions. Thanks to Andreas F. Bobak
  • LAST_INSERT_ID() is now updated for INSERT INTO ... SELECT.
  • Some small changes to the join table optimizer to make some joins faster.
  • SELECT DISTINCT is much faster; It uses the new UNIQUE functionality in MyISAM. One difference compared to MySQL 3.22 is that the output of DISTINCT is not sorted anymore.
  • All C client API macros are now functions to make shared libraries more reliable. Because of this, you can no longer call mysql_num_fields() on a MYSQL object, you must use mysql_field_count() instead.
  • Added use of LIBEWRAP; Patch by Henning P . Schmiedehausen.
  • Don't allow AUTO_INCREMENT for other than numerical columns.
  • Using AUTO_INCREMENT will now automatically make the column NOT NULL.
  • Show NULL as the default value for AUTO_INCREMENT columns.
  • Added SQL_BIG_RESULT; SQL_SMALL_RESULT is now default.
  • Added a shared library RPM. This enchancement was contributed by David Fox (dsfox@cogsci.ucsd.edu).
  • Added a --enable-large-files/--disable-large-files switch to configure. See `configure.in' for some systems where this is automatically turned off because of broken implementations.
  • Upgraded readline to 4.0.
  • New CREATE TABLE options: PACK_KEYS and CHECKSUM.
  • Added mysqld option --default-table-type.

D.2 Changes in release 3.22.x

The 3.22 version has faster and safer connect code and a lot of new nice enhancements. The reason for not including these changes in the 3.21 version is mainly that we are trying to avoid big changes to 3.21 to keep it as stable as possible. As there aren't really any MAJOR changes, upgrading to 3.22 should be very easy and painless. See section 4.16.2 Upgrading from a 3.21 version to 3.22.

3.22 should also be used with the new DBD-mysql (1.20xx) driver that can use the new connect protocol!

D.2.1 Changes in release 3.22.28

  • 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.

D.2.2 Changes in release 3.22.27

  • Fixed prototype in `my_ctype.h' when using other character sets.
  • Some configure issues to fix problems with big file system detection.
  • Fixed problem when sorting on big blob columns.
  • ROUND() will now work on Win32.

D.2.3 Changes in release 3.22.26

  • Fixed core dump with empty BLOB/TEXT column to REVERSE().
  • Extended /*! */ with version numbers.
  • Changed SUBSTRING(text FROM pos) to conform to ANSI 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 SQL_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 table_name WHERE key_part1 >= const AND (key_part2 = const OR key_part2 = const)
  • Fixed bug in compression key handling in ISAM.

D.2.4 Changes in release 3.22.25

  • Fixed some small problems with the installation.

D.2.5 Changes in release 3.22.24

  • DATA is not a reserved word anymore.
  • Fixed optimizer bug with tables with only one row.
  • Fixed bug when using LOCK TABLES table_name READ; FLUSH TABLES;
  • Applied some patches for HP-UX.
  • isamchk should now work on Win32.
  • Changed `configure' to not use big file handling on Linux as this crashes some RedHat 6.0 systems

D.2.6 Changes in release 3.22.23

  • Upgraded to use Autoconf 2.13, Automake 1.4 and libtool 1.3.2.
  • Better support for SCO in configure.
  • Added option --defaults-file=### 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.

D.2.7 Changes in release 3.22.22

  • 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.
  • The MySQL-Win32 version is now compiled with VC++ 6.0 instead of with VC++ 5.0.
  • New installation setup for MySQL-Win32.

D.2.8 Changes in release 3.22.21

  • 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 not reserved words anymore.
  • 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).

D.2.9 Changes in release 3.22.20

  • 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.

D.2.10 Changes in release 3.22.19

  • Fixed bug in mysql_install_db (from 3.22.17).
  • Changed default key cache size to 8M.
  • Fixed problem with queries that needed temporary tables with BLOB columns.

D.2.11 Changes in release 3.22.18

  • Fixes a fatal problem in 3.22.17 on Linux; After shutdown all threads didn't die properly.
  • Added option -O flush-time=# to mysqld. This is mostly useful on Win32 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.

D.2.12 Changes in release 3.22.17

  • 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.

D.2.13 Changes in release 3.22.16

  • 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.

D.2.14 Changes in release 3.22.15

  • 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' optimzation 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.

D.2.15 Changes in release 3.22.14

  • 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 Win32 so that it will not crash anymore 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 Win32.
  • mysql_fix_privileges adds a new column to the mysql.func to support aggregate UDF functions in future MySQL releases.

D.2.16 Changes in release 3.22.13

  • 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.0.x.
  • Changed the implementation of pthread_cond() on the Win32 version. get_lock() now correctly times out on Win32!

D.2.17 Changes in release 3.22.12

  • 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 since 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.

D.2.18 Changes in release 3.22.11

  • 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 user@host
  • Changed the syntax for how to set PASSWORD for another user.
  • New command FLUSH STATUS that sets 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
  • Slovak and japanese error messages.
  • Configuration and portability fixes.
  • Added option SET SQL_WARNINGS=1 to get a warning count also for simple 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().

D.2.19 Changes in release 3.22.10

  • 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 statemants 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, allows one to easily create 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 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.

D.2.20 Changes in release 3.22.9

  • SET SQL_LOG_UPDATE=0 caused a lockup of the server.
  • New SQL command: FLUSH [ TABLES | HOSTS | LOGS | PRIVILEGES ] [, ...]
  • New SQL command: KILL thread_id.
  • Added casts and changed include files to make MySQL easier to compile on AIX and DEC OSF1 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 Win32 with the --flush option. This will flush all tables to disk after each update. This makes things much safer on NT/Win98 but also MUCH slower.

D.2.21 Changes in release 3.22.8

  • Czech character sets should now work much better. You must also install ftp://www.mysql.com/pub/mysql/Downloads/Patches/czech-3.22.8-patch. This patch should also be installed if you are using a character set with uses my_strcoll()! The patch should always be safe to install (for any system), but as this patch changes ISAM internals it's not yet in the default distribution.
  • 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 Win32 (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.

D.2.22 Changes in release 3.22.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 re-generate the table, but in the future it will use an integrated isamchk for more speed.
  • Upgraded libtool to get the configure 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_priv privilege can get information about all threads.
  • 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_ID's 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.

D.2.23 Changes in release 3.22.6

  • 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.

D.2.24 Changes in release 3.22.5

  • 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 > 24M.
  • 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 OPTION 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 OPTION 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 section 10.4 MySQL index use.
  • Lots of new benchmarks.
  • A new C API chapter and lots of other improvements in the manual.

D.2.25 Changes in release 3.22.4

  • 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 id.

  • 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 2 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 Win32, and for systems that use MIT-pthreads. You can force the use of locking with the --enable-locking option.
  • Added --console option to mysqld, to force a console window (for error messages) when using Win32.
  • Fixed table locks for Win32.
  • 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.

D.2.26 Changes in release 3.22.3

  • 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'.

D.2.27 Changes in release 3.22.2

  • 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 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 server/client protocol now supports compression.
  • All bug fixes from MySQL 3.21.32.

D.2.28 Changes in release 3.22.1

  • 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.

D.2.29 Changes in release 3.22.0

  • 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 'new_password'. 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!

D.3 Changes in release 3.21.x

D.3.1 Changes in release 3.21.33

  • Fixed problem when sending SIGHUP to mysqld; mysqld core dumped when starting from boot on some systems.
  • Fixed problem with losing a little memory for some connections.
  • DELETE FROM tbl_name without a WHERE condition is now done the long way when you use LOCK TABLES or if the table is in use, to avoid race conditions.
  • INSERT INTO TABLE (timestamp_column) VALUES (NULL); didn't set timestamp.

D.3.2 Changes in release 3.21.32

  • Fixed some possible race conditions when doing many reopen/close on the same tables under heavy load! This can happen if you execute mysqladmin refresh often. This could in some very rare cases corrupt the header of the index file and cause error 126 or 138.
  • Fixed fatal bug in refresh() when running with the --skip-locking option. There was a ``very small'' time gap after a mysqladmin refresh when a table could be corrupted if one thread updated a table while another thread did mysqladmin refresh and another thread started a new update ont the same table before the first thread had finished. A refresh (or --flush-tables) will now not return until all used tables are closed!
  • SELECT DISTINCT with a WHERE clause that didn't match any rows returned a row in some contexts (bug only in 3.21.31).
  • GROUP BY + ORDER BY returned one empty row when no rows where found.
  • Fixed a bug in the range optimizer that wrote Use_count: Wrong count for ... in the error log file.

D.3.3 Changes in release 3.21.31

  • Fixed a sign extension problem for the TINYINT type on Irix.
  • Fixed problem with LEFT("constant_string",function).
  • Fixed problem with FIND_IN_SET().
  • LEFT JOIN core dumped if the second table is used with a constant WHERE/ON expression that uniquely identifies one record.
  • Fixed problems with DATE_FORMAT() and incorrect dates. DATE_FORMAT() now ignores '%' to make it possible to extend it more easily in the future.

D.3.4 Changes in release 3.21.30

  • mysql now returns an exit code > 0 if the query returned an error.
  • Saving of command line history to file in mysql client. By Tommy Larsen tommy@mix.hive.no.
  • Fixed problem with empty lines that were ignored in `mysql.cc'.
  • Save the pid of the signal handler thread in the pid file instead of the pid of the main thread.
  • Added patch by tommy@valley.ne.jp to support Japanese characters SJIS and UJIS.
  • Changed safe_mysqld to redirect startup messages to 'hostname'.err instead of 'hostname'.log to reclaim file space on mysqladmin refresh.
  • ENUM always had the first entry as default value.
  • ALTER TABLE wrote two entries to the update log.
  • sql_acc() now closes the mysql grant tables after a reload to save table space and memory.
  • Changed LOAD DATA to use less memory with tables and BLOB columns.
  • Sorting on a function which made a division / 0 produced a wrong set in some cases.
  • Fixed SELECT problem with LEFT() when using the czech character set.
  • Fixed problem in isamchk; it couldn't repair a packed table in a very unusual case.
  • SELECT statements with & or | (bit functions) failed on columns with NULL values.
  • When comparing a field = field, where one of the fields was a part key, only the length of the part key was compared.

D.3.5 Changes in release 3.21.29

  • LOCK TABLES + DELETE from tbl_name never removed locks properly.
  • Fixed problem when grouping on an OR function.
  • Fixed permission problem with umask() and creating new databases.
  • Fixed permission problem on result file with SELECT ... INTO OUTFILE ...
  • Fixed problem in range optimizer (core dump) for a very complex query.
  • Fixed problem when using MIN(integer) or MAX(integer) in GROUP BY.
  • Fixed bug on Alpha when using integer keys. (Other keys worked on Alpha).
  • Fixed bug in WEEK("XXXX-xx-01").

D.3.6 Changes in release 3.21.28

  • Fixed socket permission (clients couldn't connect to Unix socket on Linux).
  • Fixed bug in record caches; for some queries, you could get Error from table handler: # on some operating systems.

D.3.7 Changes in release 3.21.27

  • Added user level lock functions GET_LOCK(string,timeout), RELEASE_LOCK(string).
  • Added opened_tables to show status.
  • Changed connect timeout to 3 seconds to make it somewhat harder for crackers to kill mysqld through telnet + TCP/IP.
  • Fixed bug in range optimizer when using WHERE key_part_1 >= something AND key_part_2 <= something_else.
  • Changed configure for detection of FreeBSD 3.0 9803xx and above
  • WHERE with string_column_key = constant_string didn't always find all rows if the column had many values differing only with characters of the same sort value (like e and 'e).
  • Strings keys looked up with 'ref' were not compared in case-sensitive fashion.
  • Added umask() to make log files non-readable for normal users.
  • Ignore users with old (8-byte) password on startup if not using --old-protocol option to mysqld.
  • SELECT which matched all key fields returned the values in the case of the matched values, not of the found values. (Minor problem.)

D.3.8 Changes in release 3.21.26

  • FROM_DAYS(0) now returns "0000-00-00".
  • In DATE_FORMAT(), PM and AM were swapped for hours 00 and 12.
  • Extended the default maximum key size to 256.
  • Fixed bug when using BLOB/TEXT in GROUP BY with many tables.
  • An ENUM field that is not declared NOT NULL has NULL as the default value. (Previously, the default value was the first enumeration value.)
  • Fixed bug in the join optimizer code when using many part keys on the same key: INDEX (Organization,Surname(35),Initials(35)).
  • Added some tests to the table order optimizer to get some cases with SELECT ... FROM many_tables much faster.
  • Added a retry loop around accept() to possibly fix some problems on some Linux machines.

D.3.9 Changes in release 3.21.25

  • Changed typedef 'string' to typedef 'my_string' for better portability.
  • You can now kill threads that are waiting on a disk full condition.
  • Fixed some problems with UDF functions.
  • Added long options to isamchk. Try isamchk --help.
  • Fixed a bug when using 8 bytes long (alpha); filesort() didn't work. Affects DISTINCT, ORDER BY and GROUP BY on 64-bit processors.

D.3.10 Changes in release 3.21.24

  • Dynamic loadable functions. Based on source from Alexis Mikhailov.
  • You couldn't delete from a table if no one had done a SELECT on the table.
  • Fixed problem with range optimizer with many OR operators on key parts inside each other.
  • Recoded MIN() and MAX() to work properly with strings and HAVING.
  • Changed default umask value for new files from 0664 to 0660.
  • Fixed problem with LEFT JOIN and constant expressions in the ON part.
  • Added Italian error messages from brenno@dewinter.com.
  • configure now works better on OSF1 (tested on 4.0D).
  • Added hooks to allow LIKE optimization with international character support.
  • Upgraded DBI to 0.93.

D.3.11 Changes in release 3.21.23

  • The following symbols are now reserved words: TIME, DATE, TIMESTAMP, TEXT, BIT, ENUM, NO, ACTION, CHECK, YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, STATUS, VARIABLES.
  • Setting a TIMESTAMP to NULL in LOAD DATA INFILE ... didn't set the current time for the TIMESTAMP.
  • Fix BETWEEN to recognize binary strings. Now BETWEEN is case sensitive.
  • Added --skip-thread-priority option to mysqld, for systems where mysqld's thread scheduling doesn't work properly (BSDI 3.1).
  • Added ODBC functions DAYNAME() and MONTHNAME().
  • Added function TIME_FORMAT(). This works like DATE_FORMAT(), but takes a time string ('HH:MM:DD') as argument.
  • Fixed unlikely(?) key optimizer bug when using ORs of key parts inside ANDs.
  • Added command variables to mysqladmin.
  • A lot of small changes to the binary releases.
  • Fixed a bug in the new protocol from MySQL 3.21.20.
  • Changed ALTER TABLE to work with Win32 (Win32 can't rename open files). Also fixed a couple of small bugs in the Win32 version.
  • All standard MySQL clients are now ported to MySQL-Win32.
  • MySQL can now be started as a service on NT.

D.3.12 Changes in release 3.21.22

  • Starting with this version, all MySQL distributions will be configured, compiled and tested with crash-me and the benchmarks on the following platforms: SunOS 5.6 sun4u, SunOS 5.5.1 sun4u, SunOS 4.14 sun4c, SunOS 5.6 i86pc, Irix 6.3 mips5k, HP-UX 10.20 hppa, AIX 4.2.1 ppc, OSF1 V4.0 alpha, FreeBSD 2.2.2 i86pc and BSDI 3.1 i386.
  • Fix COUNT(*) problems when the WHERE clause didn't match any records. (Bug from 3.21.17.)
  • Removed that NULL = NULL is true. Now you must use IS NULL or IS NOT NULL to test whether or not a value is NULL. (This is according to ANSI SQL but may break old applications that are ported from mSQL.) You can get the old behavior by compiling with -DmSQL_COMPLIANT.
  • Fixed bug that core dumped when using many LEFT OUTER JOIN clauses.
  • Fixed bug in ORDER BY on string formula with possible NULL values.
  • Fixed problem in range optimizer when using <= on sub index.
  • Added functions DAYOFYEAR(), DAYOFMONTH(), MONTH(), YEAR(), WEEK(), QUARTER(), HOUR(), MINUTE(), SECOND() and FIND_IN_SET().
  • Added command SHOW VARIABLES.
  • Added support of ``long constant strings'' from ANSI SQL:
    mysql> SELECT 'first ' 'second';       -> 'first second'
    
    
    
  • Upgraded mSQL-Mysql-modules to 1.1825.
  • Upgraded mysqlaccess to 2.02.
  • Fixed problem with Russian character set and LIKE.
  • Ported to OpenBSD 2.1.
  • New Dutch error messages.

D.3.13 Changes in release 3.21.21a

  • Configure changes for some operating systems.

D.3.14 Changes in release 3.21.21

  • Fixed optimizer bug when using WHERE data_field = date_field2 AND date_field2 = constant.
  • Added command SHOW STATUS.
  • Removed `manual.ps' from the source distribution to make it smaller.

D.3.15 Changes in release 3.21.20

  • Changed the maximum table name and column name lengths from 32 to 64.
  • Aliases can now be of ``any'' length.
  • Fixed mysqladmin stat to return the right number of queries.
  • Changed protocol (downward compatible) to mark if a column has the AUTO_INCREMENT attribute or is a TIMESTAMP. This is needed for the new Java driver.
  • Added Hebrew sorting order by Zeev Suraski.
  • Solaris 2.6: Fixed configure bugs and increased maximum table size from 2G to 4G.

D.3.16 Changes in release 3.21.19

  • Upgraded DBD to 1823. This version implements mysql_use_result in DBD-Mysql.
  • Benchmarks updated for empress (by Luuk).
  • Fixed a case of slow range searching.
  • Configure fixes (`Docs' directory).
  • Added function REVERSE() (by Zeev Suraski).

D.3.17 Changes in release 3.21.18

  • Issue error message if client C functions are called in wrong order.
  • Added automatic reconnect to the `libmysql.c' library. If a write command fails, an automatic reconnect is done.
  • Small sort sets no longer use temporary files.
  • Upgraded DBI to 0.91.
  • Fixed a couple of problems with LEFT OUTER JOIN.
  • Added CROSS JOIN syntax. CROSS is now a reserved word.
  • Recoded yacc/bison stack allocation to be even safer and to allow MySQL to handle even bigger expressions.
  • Fixed a couple of problems with the update log.
  • ORDER BY was slow when used with key ranges.

D.3.18 Changes in release 3.21.17

  • Changed documentation string of --with-unix-socket-path to avoid confusion.
  • Added ODBC and ANSI SQL style LEFT OUTER JOIN.
  • The following are new reserved words: LEFT, NATURAL, USING.
  • The client library now uses the value of the environment variable MYSQL_HOST as the default host if it's defined.
  • SELECT col_name, SUM(expr) now returns NULL for col_name when there are matching rows.
  • Fixed problem with comparing binary strings and BLOBs with ASCII characters over 127.
  • Fixed lock problem: when freeing a read lock on a table with multiple read locks, a thread waiting for a write lock would have been given the lock. This shouldn't affect data integrity, but could possibly make mysqld restart if one thread was reading data that another thread modified.
  • LIMIT offset,count didn't work in INSERT ... SELECT.
  • Optimized key block caching. This will be quicker than the old algorithm when using bigger key caches.

D.3.19 Changes in release 3.21.16

  • Added ODBC 2.0 & 3.0 functions POWER(), SPACE(), COT(), DEGREES(), RADIANS(), ROUND(2 arg) and TRUNCATE().
  • WARNING: INCOMPATIBLE CHANGE!! LOCATE() parameters were swapped according to ODBC standard. Fixed.
  • Added function TIME_TO_SEC().
  • In some cases, default values were not used for NOT NULL fields.
  • Timestamp wasn't always updated properly in UPDATE SET ... statements.
  • Allow empty strings as default values for BLOB and TEXT, to be compatible with mysqldump.

D.3.20 Changes in release 3.21.15

  • WARNING: INCOMPATIBLE CHANGE!! mysqlperl is now from Msql-Mysql-modules. This means that connect() now takes host, database, user, password arguments! The old version took host, database, password, user.
  • Allow DATE '1997-01-01', TIME '12:10:10' and TIMESTAMP '1997-01-01 12:10:10' formats required by ANSI SQL. WARNING: INCOMPATIBLE CHANGE!! This has the unfortunate side-effect that you no longer can have columns named DATE, TIME or TIMESTAMP. :( Old columns can still be accessed through tablename.columnname!)
  • Changed Makefiles to hopefully work better with BSD systems. Also, `manual.dvi' is now included in the distribution to avoid having stupid make programs trying to rebuild it.
  • readline library upgraded to version 2.1.
  • A new sortorder german-1. That is a normal ISO-Latin1 with a german sort order.
  • Perl DBI/DBD is now included in the distribution. DBI is now the recommended way to connect to MySQL from Perl.
  • New portable benchmark suite with DBD, with test results from mSQL 2.0.3, MySQL, PostgreSQL 6.2.1 and Solid server 2.2.
  • crash-me is now included with the benchmarks; This is a Perl program designed to find as many limits as possible in a SQL server. Tested with mSQL, PostgreSQL, Solid and MySQL.
  • Fixed bug in range-optimizer that crashed MySQL on some queries.
  • Table and column name completion for mysql command line tool, by Zeev Suraski and Andi Gutmans.
  • Added new command REPLACE that works like INSERT but replaces conflicting records with the new record. REPLACE INTO TABLE ... SELECT ... works also.
  • Added new commands CREATE DATABASE db_name and DROP DATABASE db_name.
  • Added RENAME option to ALTER TABLE: ALTER TABLE name RENAME AS new_name.
  • make_binary_distribution now includes `libgcc.a' in `libmysqlclient.a'. This should make linking work for people who don't have gcc.
  • Changed net_write() to my_net_write() because of a name conflict with Sybase.
  • New function DAYOFWEEK() compatible with ODBC.
  • Stack checking and bison memory overrun checking to make MySQL safer with weird queries.

D.3.21 Changes in release 3.21.14b

  • Fixed a couple of small configure problems on some platforms.

D.3.22 Changes in release 3.21.14a

  • Ported to SCO Openserver 5.0.4 with FSU Pthreads.
  • HP-UX 10.20 should work.
  • Added new function DATE_FORMAT().
  • Added NOT IN.
  • Added automatic removal of 'ODBC function conversions': {fn now() }
  • Handle ODBC 2.50.3 option flags.
  • Fixed comparison of DATE and TIME values with NULL.
  • Changed language name from germany to german to be consistent with the other language names.
  • Fixed sorting problem on functions returning a FLOAT. Previously, the values were converted to INTs before sorting.
  • Fixed slow sorting when sorting on key field when using key_column=constant.
  • Sorting on calculated DOUBLE values sorted on integer results instead.
  • mysql no longer needs a database argument.
  • Changed the place where HAVING should be. According to ANSI, it should be after GROUP BY but before ORDER BY. MySQL 3.20 incorrectly had it last.
  • Added Sybase command USE DATABASE to start using another database.
  • Added automatic adjusting of number of connections and table cache size if the maximum number of files that can be opened is less than needed. This should fix that mysqld doesn't crash even if you haven't done a ulimit -n 256 before starting mysqld.
  • Added lots of limit checks to make it safer when running with too little memory or when doing weird queries.

D.3.23 Changes in release 3.21.13

  • Added retry of interrupted reads and clearing of errno. This makes Linux systems much safer!
  • Fixed locking bug when using many aliases on the same table in the same SELECT.
  • Fixed bug with LIKE on number key.
  • New error message so you can check whether the connection was lost while the command was running or whether the connection was down from the start.
  • Added --table option to mysql to print in table format. Moved time and row information after query result. Added automatic reconnect of lost connections.
  • Added != as a synonym for <>.
  • Added function VERSION() to make easier logs.
  • New multi-user test `tests/fork_test.pl' to put some strain on the thread library.

D.3.24 Changes in release 3.21.12

  • Fixed ftruncate() call in MIT-pthreads. This made isamchk destroy the `.ISM' files on (Free)BSD 2.x systems.
  • Fixed broken __P_ patch in MIT-pthreads.
  • Many memory overrun checks. All string functions now return NULL if the returned string should be longer than max_allowed_packet bytes.
  • Changed the name of the INTERVAL type to ENUM, because INTERVAL is used in ANSI SQL.
  • In some cases, doing a JOIN + GROUP + INTO OUTFILE, the result wasn't grouped.
  • LIKE with '_' as last character didn't work. Fixed.
  • Added extended ANSI SQL TRIM() function.
  • Added CURTIME().
  • Added ENCRYPT() function by Zeev Suraski.
  • Fixed better FOREIGN KEY syntax skipping. New reserved words: MATCH, FULL, PARTIAL.
  • mysqld now allows IP number and hostname to the --bind-address option.
  • Added SET OPTION CHARACTER SET cp1251_koi8 to enable conversions of data to/from cp1251_koi8.
  • Lots of changes for Win95 port. In theory, this version should now be easily portable to Win95.
  • Changed the CREATE COLUMN syntax of NOT NULL columns to be after the DEFAULT value, as specified in the ANSI SQL standard. This will make mysqldump with NOT NULL and default values incompatible with MySQL 3.20.
  • Added many function name aliases so the functions can be used with ODBC or ANSI SQL92 syntax.
  • Fixed syntax of ALTER TABLE tbl_name ALTER COLUMN col_name SET DEFAULT NULL.
  • Added CHAR and BIT as synonyms for CHAR(1).
  • Fixed core dump when updating as a user who has only select privilege.
  • INSERT ... SELECT ... GROUP BY didn't work in some cases. An Invalid use of group function error occurred.
  • When using LIMIT, SELECT now always uses keys instead of record scan. This will give better performance on SELECT and a WHERE that matches many rows.
  • Added Russian error messages.

D.3.25 Changes in release 3.21.11

  • Configure changes.
  • MySQL now works with the new thread library on BSD/OS 3.0.
  • Added new group functions BIT_OR() and BIT_AND().
  • Added compatibility functions CHECK and REFERENCES. CHECK is now a reserved word.
  • Added ALL option to GRANT for better compatibility. (GRANT is still a dummy function.)
  • Added partly-translated dutch messages.
  • Fixed bug in ORDER BY and GROUP BY with NULL columns.
  • Added function last_insert_id() to retrieve last AUTO_INCREMENT value. This is intended for clients to ODBC that can't use the mysql_insert_id() API function, but can be used by any client.
  • Added --flush-logs option to mysqladmin.
  • Added command STATUS to mysql.
  • Fixed problem with ORDER BY/GROUP BY because of bug in gcc.
  • Fixed problem with INSERT ... SELECT ... GROUP BY.

D.3.26 Changes in release 3.21.10

  • New mysqlaccess.
  • CREATE now supports all ODBC types and the mSQL TEXT type. All ODBC 2.5 functions are also supported (added REPEAT). This provides better portability.
  • Added text types TINYTEXT, TEXT, MEDIUMTEXT and LONGTEXT. These are actually BLOBtypes, but all searching is done in case-insensitive fashion.
  • All old BLOB fields are now TEXT fields. This only changes that all searching on strings is done in case-sensitive fashion. You must do an ALTER TABLE and change the field type to BLOB if you want to have tests done in case-sensitive fashion.
  • Fixed some configure issues.
  • Made the locking code a bit safer. Fixed very unlikely deadlock situation.
  • Fixed a couple of bugs in the range optimizer. Now the new range benchmark test-select works.

D.3.27 Changes in release 3.21.9

  • Added --enable-unix-socket=pathname option to configure.
  • Fixed a couple of portability problems with include files.
  • Fixed bug in range calculation that could return empty set when searching on multiple key with only one entry (very rare).
  • Most things ported to FSU Pthreads, which should allow MySQL to run on SCO. See section 4.11.13 SCO notes.

D.3.28 Changes in release 3.21.8

  • Works now in Solaris 2.6.
  • Added handling of calculation of SUM() functions. For example, you can now use SUM(column)/COUNT(column).
  • Added handling of trigometric functions: PI(), ACOS(), ASIN(), ATAN(), COS(), SIN() and TAN().
  • New languages: norwegian, norwegian-ny and portuguese.
  • Fixed parameter bug in net_print() in `procedure.cc'.
  • Fixed a couple of memory leaks.
  • Now allow also the old SELECT ... INTO OUTFILE syntax.
  • Fixed bug with GROUP BY and SELECT on key with many values.
  • mysql_fetch_lengths() sometimes returned incorrect lengths when you used mysql_use_result(). This affected at least some cases of mysqldump --quick.
  • Fixed bug in optimization of WHERE const op field.
  • Fixed problem when sorting on NULL fields.
  • Fixed a couple of 64-bit (Alpha) problems.
  • Added --pid-file=# option to mysqld.
  • Added date formatting to FROM_UNIXTIME(), originally by Zeev Suraski.
  • Fixed bug in BETWEEN in range optimizer (Did only test = of the first argument).
  • Added machine-dependent files for MIT-pthreads i386-SCO. There is probably more to do to get this to work on SCO 3.5.

D.3.29 Changes in release 3.21.7

  • Changed `Makefile.am' to take advantage of Automake 1.2.
  • Added the beginnings of a benchmark suite.
  • Added more secure password handling.
  • Added new client function mysql_errno(), to get the error number of the error message. This makes error checking in the client much easier. This makes the new server incompatible with the 3.20.x server when running without --old-protocol. The client code is backward compatible. More information can be found in the `README' file!
  • Fixed some problems when using very long, illegal names.

D.3.30 Changes in release 3.21.6

  • Fixed more portability issues (incorrect sigwait and sigset defines).
  • configure should now be able to detect the last argument to accept().

D.3.31 Changes in release 3.21.5

  • Should now work with FreeBSD 3.0 if used with `FreeBSD-3.0-libc_r-1.0.diff', which can be found at http://www.mysql.com/Download/Patches.
  • Added new option -O tmp_table_size=# to mysqld.
  • New function FROM_UNIXTIME(timestamp) which returns a date string in 'YYYY-MM-DD HH:MM:DD' format.
  • New function SEC_TO_TIME(seconds) which returns a string in 'HH:MM:SS' format.
  • New function SUBSTRING_INDEX(), originally by Zeev Suraski.

D.3.32 Changes in release 3.21.4

  • Should now configure and compile on OSF1 4.0 with the DEC compiler.
  • Configuration and compilation on BSD/OS 3.0 works, but due to some bugs in BSD/OS 3.0, mysqld doesn't work on it yet.
  • Configuration and compilation on FreeBSD 3.0 works, but I couldn't get pthread_create to work.

D.3.33 Changes in release 3.21.3

  • Added reverse check lookup of hostnames to get better security.
  • Fixed some possible buffer overflows if filenames that are too long are used.
  • mysqld doesn't accept hostnames that start with digits followed by a '.', because the hostname may look like an IP number.
  • Added --skip-networking option to mysqld, to only allow socket connections. (This will not work with MIT-pthreads!)
  • Added check of too long table names for alias.
  • Added check if database name is okay.
  • Added check if too long table names.
  • Removed incorrect free() that killed the server on CREATE DATABASE or DROP DATABASE.
  • Changed some mysqld -O options to better names.
  • Added -O join_cache_size=# option to mysqld.
  • Added -O max_join_size=# option to mysqld, to be able to set a limit how big queries (in this case big = slow) one should be able to handle without specifying SET OPTION SQL_BIG_SELECTS=1. A # = is about 10 examined records. The default is ``unlimited''.
  • When comparing a TIME, DATE, DATETIME or TIMESTAMP column to a constant, the constant is converted to a time value before performing the comparison. This will make it easier to get ODBC (particularly Access97) to work with the above types. It should also make dates easier to use and the comparisons should be quicker than before.
  • Applied patch from Jochen Wiedmann that allows query() in mysqlperl to take a query with \0 in it.
  • Storing a timestamp with a 2-digit year (YYMMDD) didn't work.
  • Fix that timestamp wasn't automatically updated if set in an UPDATE clause.
  • Now the automatic timestamp field is the FIRST timestamp field.
  • SELECT * INTO OUTFILE, which didn't correctly if the outfile already existed.
  • mysql now shows the thread ID when starting or doing a reconnect.
  • Changed the default sort buffer size from 2M to 1M.

D.3.34 Changes in release 3.21.2

  • The range optimizer is coded, but only 85% tested. It can be enabled with --new, but it crashes core a lot yet...
  • More portable. Should compile on AIX and alpha-digital. At least the isam library should be relatively 64-bit clean.
  • New isamchk which can detect and fix more problems.
  • New options for isamlog.
  • Using new version of Automake.
  • Many small portability changes (from the AIX and alpha-digital port) Better checking of pthread(s) library.
  • czech error messages by snajdr@pvt.net.
  • Decreased size of some buffers to get fewer problems on systems with little memory. Also added more checks to handle ``out of memory'' problems.
  • mysqladmin: you can now do mysqladmin kill 5,6,7,8 to kill multiple threads.
  • When the maximum connection limit is reached, one extra connection by a user with the PROCESS_ACL privilege is granted.
  • Added -O backlog=# option to mysqld.
  • Increased maximum packet size from 512K to 1024K for client.
  • Almost all of the function code is now tested in the internal test suite.
  • ALTER TABLE now returns warnings from field conversions.
  • Port changed to 3306 (got it reserved from ISI).
  • Added a fix for Visual FoxBase so that any schema name from a table specification is automatically removed.
  • New function ASCII().
  • Removed function BETWEEN(a,b,c). Use the standard ANSI synax instead: expr BETWEEN expr AND expr.
  • MySQL no longer has to use an extra temporary table when sorting on functions or SUM() functions.
  • Fixed bug that you couldn't use tbl_name.field_name in UPDATE.
  • Fixed SELECT DISTINCT when using 'hidden group'. For example:
    mysql> SELECT DISTINCT MOD(some_field,10) FROM test
    
    
               GROUP BY some_field;
    
    
    

    Note: some_field is normally in the SELECT part. ANSI SQL should require it.

D.3.35 Changes in release 3.21.0

  • New keywords used: INTERVAL, EXPLAIN, READ, WRITE, BINARY.
  • Added ODBC function CHAR(num,...).
  • New operator IN. This uses a binary search to find a match.
  • New command LOCK TABLES tbl_name [AS alias] {READ|WRITE} ...
  • Added --log-update option to mysqld, to get a log suitable for incremental updates.
  • New command EXPLAIN SELECT ... to get information about how the optimizer will do the join.
  • For easier client code, the client should no longer use FIELD_TYPE_TINY_BLOB, FIELD_TYPE_MEDIUM_BLOB, FIELD_TYPE_LONG_BLOB or FIELD_TYPE_VAR_STRING (as previously returned by mysql_list_fields). You should instead only use FIELD_TYPE_BLOB or FIELD_TYPE_STRING. If you want exact types, you should use the command SHOW FIELDS.
  • Added varbinary syntax: 0x###### which can be used as a string (default) or a number.
  • FIELD_TYPE_CHAR is renamed to FIELD_TYPE_TINY.
  • Changed all fields to C++ classes.
  • Removed FORM struct.
  • Fields with DEFAULT values no longer need to be NOT NULL.
  • New field types:
    ENUM
    A string which can take only a couple of defined values. The value is stored as a 1-3 byte number that is mapped automatically to a string. This is sorted according to string positions!
    SET
    A string which may have one or many string values separated with ','. The string is stored as a 1-, 2-, 3-, 4- or 8-byte number where each bit stands for a specific set member. This is sorted according to the unsigned value of the stored packed number.
  • Now all function calculation is done with double or long long. This will provide the full 64-bit range with bit functions and fix some conversions that previously could result in precision losses. One should avoid using unsigned long long columns with full 64-bit range (numbers bigger than 9223372036854775807) because calculations are done with signed long long.
  • ORDER BY will now put NULL field values first. GROUP BY will also work with NULL values.
  • Full WHERE with expressions.
  • New range optimizer that can resolve ranges when some keypart prefix is constant. Example:
    mysql> SELECT * FROM tbl_name
    
    
               WHERE key_part_1="customer"
    
    
               AND key_part_2>=10 AND key_part_2<=10;
    
    
    

21.3 Changes in release 3.20.x

Changes from 3.20.18 to 3.20.32b are not documented here since the 3.21 release branched here. And the relevant changes are also documented as changes to the 3.21 version.

D.3.36 Changes in release 3.20.18

  • Added -p# (remove # directories from path) to isamlog. All files are written with a relative path from the database directory Now mysqld shouldn't crash on shutdown when using the --log-isam option.
  • New mysqlperl version. It is now compatible with msqlperl-0.63.
  • New DBD module available at http://www.mysql.com/Contrib site.
  • Added group function STD() (standard deviation).
  • The mysqld server is now compiled by default without debugging information. This will make the daemon smaller and faster.
  • Now one usually only has to specify the --basedir option to mysqld. All other paths are relative in a normal installation.
  • BLOB columns sometimes contained garbage when used with a SELECT on more than one table and ORDER BY.
  • Fixed that calculations that are not in GROUP BY work as expected (ANSI SQL extension). Example:
    mysql> SELECT id,id+1 FROM table GROUP BY id;
    
    
    
  • The test of using MYSQL_PWD was reversed. Now MYSQL_PWD is enabled as default in the default release.
  • Fixed conversion bug which caused mysqld to core dump with Arithmetic error on Sparc-386.
  • Added --unbuffered option to mysql, for new mysqlaccess.
  • When using overlapping (unnecessary) keys and join over many tables, the optimizer could get confused and return 0 records.

D.3.37 Changes in release 3.20.17

  • You can now use BLOB columns and the functions IS NULL and IS NOT NULL in the WHERE clause.
  • All communication packets and row buffers are now allocated dynamically on demand. The default value of max_allowed_packet is now 64K for the server and 512K for the client. This is mainly used to catch incorrect packets that could trash all memory. The server limit may be changed when it is started.
  • Changed stack usage to use less memory.
  • Changed safe_mysqld to check for running daemon.
  • The ELT() function is renamed to FIELD(). The new ELT() function returns a value based on an index: FIELD() is the inverse of ELT() Example: ELT(2,"A","B","C") returns "B". FIELD("B","A","B","C") returns 2.
  • COUNT(field), where field could have a NULL value, now works.
  • A couple of bugs fixed in SELECT ... GROUP BY.
  • Fixed memory overrun bug in WHERE with many unoptimizable brace levels.
  • Fixed some small bugs in the grant code.
  • If hostname isn't found by get_hostname, only the IP is checked. Previously, you got Access denied.
  • Inserts of timestamps with values didn't always work.
  • INSERT INTO ... SELECT ... WHERE could give the error Duplicated field.
  • Added some tests to safe_mysqld to make it ``safer''.
  • LIKE was case sensitive in some places and case insensitive in others. Now LIKE is always case insensitive.
  • `mysql.cc': Allow '#' anywhere on the line.
  • New command SET OPTION SQL_SELECT_LIMIT=#. See the FAQ for more details.
  • New version of the mysqlaccess script.
  • Change FROM_DAYS() and WEEKDAY() to also take a full TIMESTAMP or DATETIME as argument. Before they only took a number of type YYYYMMDD or YYMMDD.
  • Added new function UNIX_TIMESTAMP(timestamp_column).

D.3.38 Changes in release 3.20.16

  • More changes in MIT-pthreads to get them safer. Fixed also some link bugs at least in SunOS.
  • Changed mysqld to work around a bug in MIT-pthreads. This makes multiple small SELECT operations 20 times faster. Now lock_test.pl should work.
  • Added mysql_FetchHash(handle) to mysqlperl.
  • The mysqlbug script is now distributed built to allow for reporting bugs that appear during the build with it.
  • Changed `libmysql.c' to prefer getpwuid() instead of cuserid().
  • Fixed bug in SELECT optimizer when using many tables with the same column used as key to different tables.
  • Added new latin2 and Russian KOI8 character tables.
  • Added support for a dummy GRANT command to satisfy Powerbuilder.

D.3.39 Changes in release 3.20.15

  • Fixed fatal bug packets out of order when using MIT-pthreads.
  • Removed possible loop when a thread waits for command from client and fcntl() fails. Thanks to Mike Bretz for finding this bug.
  • Changed alarm loop in `mysqld.cc' because shutdown didn't always succeed in Linux.
  • Removed use of termbits from `mysql.cc'. This conflicted with glibc 2.0.
  • Fixed some syntax errors for at least BSD and Linux.
  • Fixed bug when doing a SELECT as superuser without a database.
  • Fixed bug when doing SELECT with group calculation to outfile.

D.3.40 Changes in release 3.20.14

  • If one gives -p or --password option to mysql without an argument, the user is solicited for the password from the tty.
  • Added default password from MYSQL_PWD (by Elmar Haneke).
  • Added command kill to mysqladmin to kill a specific MySQL thread.
  • Sometimes when doing a reconnect on a down connection this succeeded first on second try.
  • Fixed adding an AUTO_INCREMENT key with ALTER_TABLE.
  • AVG() gave too small value on some SELECTs with GROUP BY and ORDER BY.
  • Added new DATETIME type (by Giovanni Maruzzelli
  • Fixed that define DONT_USE_DEFAULT_FIELDS works.
  • Changed to use a thread to handle alarms instead of signals on Solaris to avoid race conditions.
  • Fixed default length of signed numbers. (George Harvey
  • Allow anything for CREATE INDEX.
  • Add prezeros when packing numbers to DATE, TIME and TIMESTAMP.
  • Fixed a bug in OR of multiple tables (gave empty set).
  • Added many patches to MIT-pthreads. This fixes at least one lookup bug.

D.3.41 Changes in release 3.20.13

  • Added ANSI SQL94 DATE and TIME types.
  • Fixed bug in SELECT with AND-OR levels.
  • Added support for Slovenian characters. The `Contrib' directory contains source and instructions for adding other character sets.
  • Fixed bug with LIMIT and ORDER BY.
  • Allow ORDER BY and GROUP BY on items that aren't in the SELECT list. (Thanks to Wim Bonis bonis@kiss.de, for pointing this out.)
  • Allow setting of timestamp values in INSERT.
  • Fixed bug with SELECT ... WHERE ... = NULL.
  • Added changes for glibc 2.0. To get glibc to work, you should add the `gibc-2.0-sigwait-patch' before compiling glibc.
  • Fixed bug in ALTER TABLE when changing a NOT NULL field to allow NULL values.
  • Added some ANSI92 synonyms as field types to CREATE TABLE. CREATE TABLE now allows FLOAT(4) and FLOAT(8) to mean FLOAT and DOUBLE.
  • New utility program mysqlaccess by Yves.Carlier@rug.ac.be. This program shows the access rights for a specific user and the grant rows that determine this grant.
  • Added WHERE const op field (by bonis@kiss.de).

D.3.42 Changes in release 3.20.11

  • When using SELECT ... INTO OUTFILE, all temporary tables are ISAM instead of HEAP to allow big dumps.
  • Changed date functions to be string functions. This fixed some ``funny'' side effects when sorting on dates.
  • Extended ALTER TABLE according to SQL92.
  • Some minor compability changes.
  • Added --port and --socket options to all utility programs and mysqld.
  • Fixed MIT-pthreads readdir_r(). Now mysqladmin create database and mysqladmin drop database should work.
  • Changed MIT-pthreads to use our tempnam(). This should fix the ``sort aborted'' bug.
  • Added sync of records count in sql_update. This fixed slow updates on first connection. (Thanks to Vaclav Bittner for the test.)

D.3.43 Changes in release 3.20.10

  • New insert type: INSERT INTO ... SELECT ...
  • MEDIUMBLOB fixed.
  • Fixed bug in ALTER TABLE and BLOBs.
  • SELECT ... INTO OUTFILE now creates the file in the current database directory.
  • DROP TABLE now can take a list of tables.
  • Oracle synonym DESCRIBE (DESC).
  • Changes to make_binary_distribution.
  • Added some comments to installation instructions about configure's C++ link test.
  • Added --without-perl option to configure.
  • Lots of small portability changes.

D.3.44 Changes in release 3.20.9

  • ALTER TABLE didn't copy null bit. As a result, fields that were allowed to have NULL values were always NULL.
  • CREATE didn't take numbers as DEFAULT.
  • Some compatibility changes for SunOS.
  • Removed `config.cache' from old distribution.

D.3.45 Changes in release 3.20.8

  • Fixed bug with ALTER TABLE and multi-part keys.

D.3.46 Changes in release 3.20.7

  • New commands: ALTER TABLE, SELECT ... INTO OUTFILE and LOAD DATA INFILE.
  • New function: NOW().
  • Added new field file_priv to mysql/user table.
  • New script add_file_priv which adds the new field file_priv to the user table. This script must be executed if you want to use the new SELECT ... INTO and LOAD DATA INFILE ... commands with a version of MySQL earlier than 3.20.7.
  • Fixed bug in locking code, which made lock_test.pl test fail.
  • New files `NEW' and `BUGS'.
  • Changed `select_test.c' and `insert_test.c' to include `config.h'.
  • Added command status to mysqladmin for short logging.
  • Increased maximum number of keys to 16 and maximum number of key parts to 15.
  • Use of sub keys. A key may now be a prefix of a string field.
  • Added -k option to mysqlshow, to get key information for a table.
  • Added long options to mysqldump.

D.3.47 Changes in release 3.20.6

  • Portable to more systems because of MIT-pthreads, which will be used automatically if configure cannot find a -lpthreads library.
  • Added GNU-style long options to almost all programs. Test with program --help.
  • Some shared library support for Linux.
  • The FAQ is now in `.texi' format and is available in `.html', `.txt' and `.ps' formats.
  • Added new SQL function RAND([init]).
  • Changed sql_lex to handle \0 unquoted, but the client can't send the query through the C API, because it takes a str pointer. You must use mysql_real_query() to send the query.
  • Added API function mysql_get_client_info().
  • mysqld now uses the N_MAX_KEY_LENGTH from `nisam.h' as the maximum allowed key length.
  • The following now works:
    mysql> SELECT filter_nr,filter_nr FROM filter ORDER BY filter_nr;
    
    
    

    Previously, this resulted in the error: Column: 'filter_nr' in order clause is ambiguous.

  • mysql now outputs '\0', '\t', '\n' and '\\' when encountering ASCII 0, tab, newline or '\' while writing tab-separated output. This is to allow printing of binary data in a portable format. To get the old behavior, use -r (or --raw).
  • Added german error messages (60 of 80 error messages translated).
  • Added new API function mysql_fetch_lengths(MYSQL_RES *), which returns an array of of column lengths (of type uint).
  • Fixed bug with IS NULL in WHERE clause.
  • Changed the optimizer a little to get better results when searching on a key part.
  • Added SELECT option STRAIGHT_JOIN to tell the optimizer that it should join tables in the given order.
  • Added support for comments starting with '--' in `mysql.cc' (Postgres syntax).
  • You can have SELECT expressions and table columns in a SELECT which are not used in the group part. This makes it efficient to implement lookups. The column that is used should be a constant for each group because the value is calculated only once for the first row that is found for a group.
    mysql> SELECT id,lookup.text,sum(*) FROM test,lookup
    
    
             WHERE test.id=lookup.id GROUP BY id;
    
    
    
  • Fixed bug in SUM(function) (could cause a core dump).
  • Changed AUTO_INCREMENT placement in the SQL query:
    INSERT into table (auto_field) values (0);
    
    
    

    inserted 0, but it should insert an AUTO_INCREMENT value.

  • `mysqlshow.c': Added number of records in table. Had to change the client code a little to fix this.
  • mysql now allows doubled '' or "" within strings for embedded ' or ".
  • New math functions: EXP(), LOG(), SQRT(), ROUND(), CEILING().

D.3.48 Changes in release 3.20.3

  • The configure source now compiles a thread-free client library -lmysqlclient. This is the only library that needs to be linked with client applications. When using the binary releases, you must link with -lmysql -lmysys -ldbug -lstrings as before.
  • New readline library from bash-2.0.
  • LOTS of small changes to configure and makefiles (and related source).
  • It should now be possible to compile in another directory using VPATH. Tested with GNU Make 3.75.
  • safe_mysqld and mysql.server changed to be more compatible between the source and the binary releases.
  • LIMIT now takes one or two numeric arguments. If one argument is given, it indicates the maximum number of rows in a result. If two arguments are given, the first argument indicates the offset of the first row to return, the second is the maximum number of rows. With this it's easy to do a poor man's next page/previous page WWW application.
  • Changed name of SQL function FIELDS() to ELT(). Changed SQL function INTERVALL() to INTERVAL().
  • Made SHOW COLUMNS a synonym for SHOW FIELDS. Added compatibility syntax FRIEND KEY to CREATE TABLE. In MySQL, this creates a non-unique key on the given columns.
  • Added CREATE INDEX and DROP INDEX as compatibility functions. In MySQL, CREATE INDEX only checks if the index exists and issues an error if it doesn't exist. DROP INDEX always succeeds.
  • `mysqladmin.c': added client version to version information.
  • Fixed core dump bug in sql_acl (core on new connection).
  • Removed host, user and db tables from database test in the distribution.
  • FIELD_TYPE_CHAR can now be signed (-128 - 127) or unsigned (0 - 255) Previously, it was always unsigned.
  • Bug fixes in CONCAT() and WEEKDAY().
  • Changed a lot of source to get mysqld to be compiled with SunPro compiler.
  • SQL functions must now have a '(' immediately after the function name (no intervening space). For example, 'user(' is regarded as beginning a function call, and 'user (' is regarded as an identifier user followed by a '(', not as a function call.

D.3.49 Changes in release 3.20.0

  • The source distribution is done with configure and Automake. It will make porting much easier. The readline library is included in the distribution.
  • Separate client compilation: the client code should be very easy to compile on systems which don't have threads.
  • The old Perl interface code is automatically compiled and installed. Automatic compiling of DBD will follow when the new DBD code is ported.
  • Dynamic language support: mysqld can now be started with Swedish or English (default) error messages.
  • New functions: INSERT(), RTRIM(), LTRIM() and FORMAT().
  • mysqldump now works correctly for all field types (even AUTO_INCREMENT). The format for SHOW FIELDS FROM tbl_name is changed so the Type column contains information suitable for CREATE TABLE. In previous releases, some CREATE TABLE information had to be patched when recreating tables.
  • Some parser bugs from 3.19.5 (BLOB and TIMESTAMP) are corrected. TIMESTAMP now returns different date information depending on its create length.
  • Changed parser to allow a database, table or field name to start with a number or '_'.
  • All old C code from Unireg changed to C++ and cleaned up. This makes the daemon a little smaller and easier to understand.
  • A lot of small bug fixes done.
  • New `INSTALL' files (not final version) and some info regarding porting.

D.4 Changes in release 3.19.x

D.4.1 Changes in release 3.19.5

  • Some new functions, some more optimization on joins.
  • Should now compile clean on Linux (2.0.x).
  • Added functions DATABASE(), USER(), POW(), LOG10() (needed for ODBC).
  • In a WHERE with an ORDER BY on fields from only one table, the table is now preferred as first table in a multi-join.
  • HAVING and IS NULL or IS NOT NULL now works.
  • A group on one column and a sort on a group function (SUM(), AVG()...) didn't work together. Fixed.
  • mysqldump: Didn't send password to server.

D.4.2 Changes in release 3.19.4

  • Fixed horrible locking bug when inserting in one thread and reading in another thread.
  • Fixed one-off decimal bug. 1.00 was output as 1.0.
  • Added attribute 'Locked' to process list as info if a query is locked by another query.
  • Fixed full magic timestamp. Timestamp length may now be 14, 12, 10, 8, 6, 4 or 2 bytes.
  • Sort on some numeric functions could sort incorrectly on last number.
  • IF(arg,syntax_error,syntax_error) crashed.
  • Added functions CEILING(), ROUND(), EXP(), LOG() and SQRT().
  • Enhanced BETWEEN to handle strings.

D.4.3 Changes in release 3.19.3

  • Fixed SELECT with grouping on BLOB columns not to return incorrect BLOB info. Grouping, sorting and distinct on BLOB columns will not yet work as expected (probably it will group/sort by the first 7 characters in the BLOB). Grouping on formulas with a fixed string size (use MID() on a BLOB) should work.
  • When doing a full join (no direct keys) on multiple tables with BLOB fields, the BLOB was garbage on output.
  • Fixed DISTINCT with calculated columns.

Go to the first, previous, next, last section, table of contents.

出售域名!  关于Linux