Changes in release 3.20.x

MySQL 3.20 is quite old now, and should be avoided if possible. This information is kept here for historical purposes only.

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

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.

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

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 64KB for the server and 512KB 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 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).

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.

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.

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 SELECT statements with GROUP BY and ORDER BY.

  • Added new DATETIME type (by Giovanni Maruzzelli mailto:maruzz@@matrice.it).

  • Fixed that defining 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 mailto:georgeh@@pinacl.co.uk.)

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

Changes in release 3.20.13

  • Added standard SQL 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 mailto: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 standard SQL 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 mailto: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 mailto:bonis@@kiss.de).

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 for standard SQL compliance.

  • Some minor compatibility 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.)

Changes in release 3.20.10

  • New insert type: INSERT INTO ... SELECT ...

  • MEDIUMBLOB fixed.

  • Fixed bug in ALTER TABLE and BLOB values.

  • 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 C++ link test.

  • Added --without-perl option to configure.

  • Lots of small portability changes.

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.

Changes in release 3.20.8

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

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 status command 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.

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 allowable 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 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().

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 -lmystrings 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 whether 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 to 127) or unsigned (0 to 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.

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 re-creating 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 bugfixes done.

  • New INSTALL files (not final version) and some information regarding porting.