This appendix lists the changes from version to version in the MySQL
source code.
Note that we tend to update the manual at the same time we make changes 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!
News-4.0.x: Changes in release 4.0.x (Development; Alpha)
The 3.23 release has several major features that are not
present in previous versions. We have added three new
table types:
MyISAM
A new ISAM library which is tuned for SQL and supports large files.
BerkeleyDB or BDB
Uses the Berkeley DB library from Sleepycat Software to implement
transaction-safe tables.
InnoDB
A transaction-safe table handler that supports row level locking, and many
Oracle-like features.
Note that only MyISAM is available in the standard binary distribution.
The 3.23 release also includes support for database replication between
a master and many slaves, full-text indexing, and much more.
All new features are being developed in the 4.0 version. Only
bug fixes and minor enhancements to existing features will be
added to 3.23.
The replication code and BerkeleyDB code is still not as tested and as
the rest of the code, so we will probably need to do a couple of future
releases of 3.23 with small fixes for this part of the code. As long as
you don't use these features, you should be quite safe with
MySQL 3.23!
Note that the above doesn't mean that replication or Berkeley DB don't
work; We have done a lot of testing of all code, including replication
and BDB without finding any problems. It only means that not as many
users use this code as the rest of the code and because of this we are
not yet 100% confident in this code.
Fixed that @@unknown_variable doesn't hang server.
Added @@VERSION as a synonym for VERSION().
SHOW VARIABLES LIKE 'xxx' is now case insensitive.
Fixed timeout for GET_LOCK() on HPUX with DCE threads.
Fixed memory allocation bug in the glibc library used to build Linux
binaries, which caused mysqld to die in 'free()'.
Fixed SIGINT and SIGQUIT problems in mysql.
Fixed bug in character table converts when used with big ( > 64K) strings.
InnoDB now retains foreign key constraints through ALTER TABLE
and CREATE/DROP INDEX.
InnoDB now allows foreign key constraints to be added through the
ALTER TABLE syntax.
InnoDB tables can now be set to automatically grow in size (autoextend).
Fixed some buffer overflow problems when reading startup parameters.
Because of problems on shutdown we have now disabled named pipes on
windows by default. One can enable named pipes by starting mysqld with
--enable-named-pipe.
Fixed bug when using WHERE key_column = 'J' or key_column='j'.
Fixed core-dump bug when using --log-bin with LOAD DATA
INFILE without an active database.
Fixed bug in RENAME TABLE when used with
lower_case_table_names=1 (default on Windows).
Fixed unlikely core-dump bug when using DROP TABLE on a table
that was in use by a thread that also used queries on only temporary tables.
Fixed problem with SHOW CREATE TABLE and PRIMARY KEY when using
32 indexes.
Fixed that one can use SET PASSWORD for the anonymous user.
Fixed core-dump bug when reading client groups from option files using
mysql_options().
Memory leak (16 bytes per every corrupted table) closed.
Fixed binary builds to use --enable-local-infile.
Update source to work with new bison version.
Updated shell scripts to new agree with new POSIX standard.
Fixed bug where DATE_FORMAT() returned empty string when used
with GROUP BY.
Don't give warning for statement that is only a comment; This is needed for
mysqldump --disable-keys to work.
Fixed unlikely caching bug when doing a join without keys. In this case
the last used column for a table always returned NULL.
Added options to make LOAD DATA LOCAL INFILE more secure.
MySQL binary release 3.23.48 for Linux contained a new glibc library, which
has serious problems under high load and RedHat 7.2. The 3.23.49 binary
release doesn't have this problem.
Some InnoDB variables was always shown in SHOW VARIABLES as
OFF on high-byte-first systems (like sparc).
Fixed problem with one thread using an InnoDB table and another
thread doing an ALTER TABLE on the same table. Before that,
mysqld could crash with an assertion failure in row0row.c, line 474.
Tuned the InnoDB SQL optimizer to favor more often index searches
over table scans.
Fixed a performance problem with InnoDB tables when several large SELECT
queries are run concurrently on a multiprocessor Linux computer. Large
CPU-bound SELECT queries will now also generally run faster on all
platforms.
If MySQL binlogging is used, InnoDB now prints after crash recovery the
latest MySQL binlog name and the offset InnoDB was able to recover
to. This is useful, for example, when resynchronizing a master and a
slave database in replication.
Added better error messages to help in installation problems of InnoDB tables.
One can now recover also MySQL temporary tables which have become
orphaned inside the InnoDB tablespace.
InnoDB now prevents a FOREIGN KEY declaration where the signedness
is not the same in the referencing and referenced integer columns.
Calling SHOW CREATE TABLE or SHOW TABLE STATUS could cause
memory corruption and make mysqld to crash. Especially at risk was
mysqldump, because it calls frequently SHOW CREATE TABLE.
If inserts to several tables containing an auto-inc column were wrapped
inside one LOCK TABLES, InnoDB asserted in lock0lock.c.
In 3.23.47 we allowed several NULLS in a UNIQUE secondary
index for an InnoDB table. But CHECK TABLE was not relaxed: it
reports the table as corrupt. CHECK TABLE no longer complains in
this situation.
SHOW GRANTS now shows REFERENCES instead of REFERENCE.
Fixed problem with aliased temporary tables replication
InnoDB and BDB tables will now use index when doing an ORDER BY
on the whole table.
Fixed bug where one got an empty set instead of a DEADLOCK error when using
BDB tables.
One can now kill ANALYZE,REPAIR and OPTIMIZE TABLE when
the thread is waiting to get a lock on the table.
Fixed race condition in ANALYZE TABLE.
Fixed bug when joining with caching (unlikely to happen).
Fixed race condition when using the binary log and INSERT DELAYED
which could cause the binary log to have rows that was not yet written
to MyISAM tables.
Changed caching of binary log to make replication slightly faster.
Fixed bug when using a reference to a AVG() column in HAVING.
Fixed that date functions that require correct dates, like
DAYOFYEAR(column) will return NULL for 0000-00-00 dates.
Fixed bug in const-propagation when comparing columns of different
types. (SELECT * FROM date_col="2001-01-01" and date_col=time_col)
Fixed bug that caused error message Can't write, because of unique
constraint with some GROUP BY queries.
Fixed problem with sjis character strings used within quoted table names.
Fixed coredump when using CREATE ... FULLTEXT keys with other table
handlers than MyISAM.
Don't use signal() on windows because this appears to not be
100 % reliable.
Fixed bug when doing WHERE column_name=NULL on an indexed column
that had NULL values.
Fixed bug when doing LEFT JOIN ... ON (column_name = constant) WHERE column_name = constant.
When using replications, aborted queries that contained % could cause
a core dump.
TCP_NODELAY was not used on some systems. (Speed problem).
Applied portability fixes for OS/2 (Patch by Yuri Dario).
The following changes are for InnoDB tables:
Add missing InnoDB variables to SHOW VARIABLES.
Foreign keys checking is now done for InnoDB tables.
DROP DATABASE now works also for InnoDB tables.
InnoDB now supports data files and raw disk partitions bigger
than 4 GB on those operating systems which have big files.
InnoDB calculates better table cardinality estimates for the
MySQL optimizer.
Accent characters in the default character set latin1 are ordered
according to the MySQL ordering.
NOTE: if you are using latin1 and have inserted characters whose code is >
127 to an indexed CHAR column, you should run CHECK TABLE on your table when
you upgrade to 3.23.44, and drop and reimport the table if CHECK TABLE
reports an error!
A new `my.cnf' parameter innodb_thread_concurrency helps in
performance tuning in heavily concurrent environments.
A new my.cnf parameter innodb_fast_shutdown speeds up
server shutdown.
A new my.cnf parameter innodb_force_recovery helps to save
your data in case the disk image of the database becomes corrupt.
innodb_monitor has been improved and a new
innodb_table_monitor added.
Increased maximum key length from 500 to 7000 bytes.
Fixed a bug in replication of auto-inc columns with multiline inserts.
Fixed a bug when the case of letters changes in an update of an indexed
secondary column.
Fixed a hang when there are > 24 data files.
Fixed a crash when MAX(col) is selected from an empty table, and
col is a not the first column in a multi-column index.
Fixed problem when using LOCK TABLES and BDB tables.
Fixed problem with REPAIR TABLE on MyISAM tables with row lengths
between 65517 - 65520 bytes
Fixed rare hang when doing mysqladmin shutdown when there was
a lot of activity in other threads.
Fixed problem with INSERT DELAYED where delay thread could be
hanging on upgrading locks without any apparent reasons.
Fixed problem with myisampack and BLOB.
Fixes problem when one edited .MRG tables by hand.
(Patch from Benjamin Pflugmann).
Enforce that all tables in a MERGE table come from the same
database.
Fixed bug with LOAD DATA INFILE and transactional tables.
Fix bug when using INSERT DELAYED with wrong column definition.
Fixed coredump during REPAIR of some particularly broken tables.
Fixed bug in InnoDB and AUTO_INCREMENT columns.
Fixed bug in InnoDB and RENAME TABLE columns.
Fixed critical bug in InnoDB and BLOB columns. If one has
used BLOB columns larger than 8000 bytes in an InnoDB
table, one must dump the table with mysqldump, drop it and
restore it from the dump.
Applied large patch for OS/2 from Yuri Dario.
Fixed problem with InnoDB when one could get the error Can't
execute the given command... even when one didn't have an active
transaction.
Applied some minor fixes that concern Gemini.
Use real arithmetic operations even in integer context if not
all arguments are integers. (Fixes uncommon bug in some integer
contexts).
Don't force everything to lower cases on Windows. (To fix problem
with Windows and ALTER TABLE). Now --lower_case_names
also works on Unix.
Fixed that automatic rollback that is done when thread end doesn't lock
other threads.
Fixed possible problem with shutdown on Solaris where the
`.pid' file wasn't deleted.
InnoDB now supports < 4 GB rows. The former limit was 8000 bytes.
The doublewrite file flush method is used in InnoDB.
It reduces the need for Unix fsync calls to a fraction and
improves performance on most Unix flavors.
You can now use the InnoDB Monitor to print a lot of InnoDB state
information, including locks, to the standard output; useful in
performance tuning.
Several bugs which could cause hangs in InnoDB have been fixed.
Split record_buffer to record_buffer and
record_rnd_buffer. To make things compatible to previous MySQL
versions, if record_rnd_buffer is not set, then it takes the
value of record_buffer.
Fixed optimizing bug in ORDER BY where some ORDER BY parts
where wrongly removed.
Fixed overflow bug with ALTER TABLE and MERGE tables.
Added prototypes for my_thread_init() and my_thread_end() to
`mysql_com.h'
Added option --safe-user-create to mysqld.
Fixed bug in SELECT DISTINCT ... HAVING that casued error message
Can't find record in '#...
Fixed problem with --low-priority-updates and INSERT's.
Fixed bug in slave thread when under some rare circumstances it could
get 22 bytes ahead on the offset in the master.
Added slave_wait_timeout for replication.
Fixed problem with UPDATE and BDB tables.
Fixed hard bug in BDB tables when using key parts.
Fixed problem when using the GRANT FILE ON database.* ...; Previously
we added the DROP privilege for the database.
Fixed DELETE FROM table_name ... LIMIT 0 and
UPDATE FROM table_name ... LIMIT 0 acted as though the LIMIT
clause was not present (they deleted or updated all selected rows).
CHECK TABLE now checks if an AUTO_INCREMENT column contains
the value 0.
Sending a SIGHUP to mysqld will now only flush the logs,
not reset the replication.
Fixed parser to allow floats of type 1.0e1 (no sign after e).
Option --force to myisamchk now also updates states.
Added option --warnings to mysqld. Now mysqld
only prints the error Aborted connection if this option is used.
Fixed problem with SHOW CREATE TABLE when you didn't have a
PRIMARY KEY.
Properly fixed the rename of innodb_unix_file_flush_method to
innodb_flush_method.
Fixed bug when converting UNSIGNED BIGINT to DOUBLE. This caused
a problem when doing comparisons with BIGINT values outside of the
signed range.
Fixed bug in BDB tables when querying empty tables.
Fixed a bug when using COUNT(DISTINCT) with LEFT JOIN and
there wasn't any matching rows.
Removed all documentation referring to the GEMINI table
type. GEMINI is not released under an Open Source license.
Fixed a bug when SELECT from MERGE table
sometimes results in incorrectly ordered rows.
Fixed a bug in REPLACE() when using the ujis character set.
Applied Sleepycat BDB patches 3.2.9.1 and 3.2.9.2.
Added option --skip-stack-trace to mysqld.
CREATE TEMPORARY now works with InnoDB tables.
InnoDB now promotes sub keys to whole keys.
Added option CONCURRENT to LOAD DATA.
Better error message when slave max_allowed_packet is too low to
read a very long log event from the master.
Fixed bug when too many rows where removed when using
SELECT DISTINCT ... HAVING.
SHOW CREATE TABLE now returns TEMPORARY for temporary tables.
Added Rows_examined to slow query log.
Fixed problems with function returning empty string when using
together with a group functions and a WHERE that didn't match any rows.
New program mysqlcheck.
Added database name to output for administrative commands like CHECK,
REPAIR, OPTIMIZE.
Lots of portability fixes for InnoDB.
Changed optimizer so that queries like
SELECT * FROM table_name,table_name2 ... ORDER BY key_part1 LIMIT #
will use index on key_part1 instead of filesort.
Fixed bug when doing
LOCK TABLE to_table WRITE,...; INSERT INTO to_table... SELECT ...
when to_table was empty.
Changed INNOBASE to InnoDB (because the INNOBASE
name was already used). All configure options and mysqld
start options are now using innodb instead of innobase. This
means that you have to change any configuration files where you have used
innobase options before upgrading to this version!
Fixed bug when using indexes on CHAR(255) NULL columns.
Slave thread will now be started even if master-host is not set, as
long as server-id is set and valid master.info is present
Partial updates (terminated with kill) are now logged with a special error
code to the binary log. Slave will refuse to execute them if the error code
indicates the update was terminated abnormally, and will have to be recovered
with SET SQL_SLAVE_SKIP_COUNTER=1; SLAVE START after a manual sanity
check/correction of data integrity.
Fixed bug that erroneously logged a drop of internal temporary table
on thread termination to the binary log - bug affected replication.
Fixed a bug in REGEXP() on 64-bit machines.
UPDATE and DELETE with WHERE unique_key_part IS NULL
didn't update/delete all rows.
Disabled INSERT DELAYED for tables that support transactions.
Fixed bug when using date functions on TEXT/BLOB column
with wrong date format.
UDFs now also work on Windows. (Patch by Ralph Mason)
Fixed bug in ALTER TABLE and LOAD DATA INFILE that disabled
key-sorting. These commands should now be faster in most cases.
Fixed performance bug where reopened tables (tables that had been
waiting for FLUSH or REPAIR) would not use indexes for the
next query.
Fixed problem with ALTER TABLE to Innobase tables on FreeBSD.
Added mysqld variables myisam_max_sort_file_size and
myisam_max_extra_sort_file_size.
Initialize signals early to avoid problem with signals in Innobase.
Applied patch for the tis620 character set to make comparisons
case-independent and to fix a bug in LIKE for this character set.
NOTE: All tables that uses the tis620 character set must be
fixed with myisamchk -r or REPAIR TABLE !
Fixed a bug that allowed you to use database names containing a `.'
character. This fixes a serious security issue when mysqld is run
as root.
Fixed bug when thread creation failed (could happen when doing a LOT
of connections in a short time).
Fixed some problems with FLUSH TABLES and TEMPORARY tables.
(Problem with freeing the key cache and error Can't reopen table...).
Fixed a problem in Innobase with other character sets than latin1
and another problem when using many columns.
Fixed bug that caused a core dump when using a very complex query involving
DISTINCT and summary functions.
Added SET TRANSACTION ISOLATION LEVEL ...
Added SELECT ... FOR UPDATE.
Fixed bug where the number of affected rows was not returned when MySQL
was compiled without transaction support.
Fixed a bug in UPDATE where keys weren't always used to find the
rows to be updated.
Fixed a bug in CONCAT_WS() where it returned wrong results.
Changed CREATE ... INSERT and INSERT ... SELECT to not
allow concurrent inserts as this could make the binary log hard to repeat.
(Concurrent inserts are enabled if you are not using the binary or update log).
Changed some macros to be able to use fast mutex with glibc 2.2.
Added the INNOBASE table handler and the BDB table handler
to the MySQL source distribution.
Updated the documentation about GEMINI tables.
Fixed a bug in INSERT DELAYED that caused threads to hang when
inserting NULL into an AUTO_INCREMENT column.
Fixed a bug in CHECK TABLE / REPAIR TABLE that could cause
a thread to hang.
REPLACE will not replace a row that conflicts with an
auto_increment generated key.
mysqld now only sets CLIENT_TRANSACTIONS in
mysql->server_capabilities if the server supports a
transaction-safe handler.
Fixed LOAD DATA INFILE to allow numeric values to be read into
ENUM and SET columns.
Improved error diagnostic for slave thread exit.
Fixed bug in ALTER TABLE ... ORDER BY.
Added option max_user_connections to mysqld.
Limit query length for replication by max_allowed_packet, not the
arbitrary limit of 4 MB.
Allow space around = in argument to --set-variable.
Fixed problem in automatic repair that could leave some threads in state
Waiting for table.
SHOW CREATE TABLE now dumps the UNION() for MERGE tables.
ALTER TABLE now remembers the old UNION() definition.
Fixed bug when replicating timestamps.
Fixed bug in bidirectional replication.
Fixed bug in the BDB table handler that occurred when using an index
on multi-part key where a key part may be NULL.
Fixed MAX() optimization on sub-key for BDB tables.
Fixed problem where garbage results were returned when using BDB
tables and BLOB or TEXT fields when joining many tables.
Fixed a problem with BDB tables and TEXT columns.
Fixed bug when using a BLOB key where a const row wasn't found.
Fixed that mysqlbinlog writes the timestamp value for each query.
This ensures that one gets same values for date functions like NOW()
when using mysqlbinlog to pipe the queries to another server.
Allow one to use --skip-gemini, --skip-bdb and
--skip-innobase to mysqld even if these databases are not
compiled in mysqld.
One can now do GROUP BY ... DESC.
Fixed a deadlock in the SET code, when one ran SET @foo=bar,
where bar is a column reference, an error was not properly generated.
Fixed that DNS lookups are not using the same mutex as the hostname
cache. This will enable known hosts to be quickly resolved even if a
DNS lookup takes a long time.
Added --character-sets-dir to myisampack.
Removed warnings when running REPAIR TABLE ... EXTENDED.
Fixed a bug that caused a core dump when using GROUP BY on an alias,
where the alias was the same as an existing column name.
Added SEQUENCE() as an example UDF function.
Changed mysql_install_db to use BINARY for CHAR
columns in the privilege tables.
Changed TRUNCATE table_name to TRUNCATE TABLE table_name
to use the same syntax as Oracle. Until 4.0 we will also allow
TRUNCATE table_name to not crash old code.
Fixed 'no found rows' bug in MyISAM tables when a BLOB was
first part of a multi-part key.
Fixed bug where CASE didn't work with GROUP BY.
Added option --sort-recover to myisamchk.
myisamchk -S and OPTIMIZE TABLE now work on Windows.
Fixed bug when using DISTINCT on results from functions that referred
to a group function, like:
SELECT a, DISTINCT SEC_TO_TIME(sum(a)) from table_name GROUP BY a, b;
Fixed buffer overrun in libmysqlclient library.
Fixed bug in handling STOP event after ROTATE event in
replication.
Fixed another buffer overrun in DROP DATABASE.
Added Table_locks_immediate and Table_locks_waited status
variables.
Fixed bug in replication that broke slave server start with existing
master.info. This fixes a bug introduced in 3.23.32.
Added SET SQL_SLAVE_SKIP_COUNTER=n command to recover from
replication glitches without a full database copy.
Added max_binlog_size variable; the binary log will be rotated
automatically when the size crosses the limit.
Added Last_error, Last_errno, and Slave_skip_counter to
SHOW SLAVE STATUS.
Fixed bug in MASTER_POS_WAIT() function.
Execute coredump handler on SIGILL, and SIGBUS in addition to
SIGSEGV.
On x86 Linux, print the current query and thread (connection) id, if
available, in the coredump handler.
Fixed several timing bugs in the test suite.
Extended mysqltest to take care of the timing issues in the test
suite.
ALTER TABLE can now be used to change the definition for a
MERGE table.
Fixed creation of MERGE tables on Windows.
Portability fixes for OpenBSD and OS2.
Added --temp-pool option to mysqld. Using this option
will cause most temporary files created to use a small set of names,
rather than a unique name for each new file. This is to work around a
problem in the Linux kernel dealing with creating a bunch of new files
with different names. With the old behavior, Linux seems to "leak"
memory, as it's being allocated to the directory entry cache instead of
the disk cache.
Configure updates for Tru64, large file support, and better TCP wrapper
support. By Albert Chin-A-Young.
Fixed bug in <=> operator.
Fixed bug in REPLACE with BDB tables.
LPAD() and RPAD() will shorten the result string if it's longer
than the length argument.
Added SHOW LOGS command.
Remove not used BDB logs on shutdown.
When creating a table, put PRIMARY keys first, followed by
UNIQUE keys.
Fixed a bug in UPDATE involving multi-part keys where one
specified all key parts both in the update and the WHERE part. In
this case MySQL could try to update a record that didn't match
the whole WHERE part.
Changed drop table to first drop the tables and then the `.frm' file.
Fixed a bug in the hostname cache which caused mysqld to report the
hostname as '' in some error messages.
Fixed a bug with HEAP type tables; the variable
max_heap_table_size wasn't used. Now either MAX_ROWS or
max_heap_table_size can be used to limit the size of a HEAP
type table.
Changed the default server-id to 1 for masters and 2 for slaves
to make it easier to use the binary log.
Renamed variable bdb_lock_max to bdb_max_lock.
Added support for auto_increment on sub-fields for BDB tables.
Added ANALYZE of BDB tables.
In BDB tables, we now store the number of rows; This helps to optimize queries
when we need an approximation of the number of rows.
If we get an error in a multi-row statement, we now only rollback the
last statement, not the entire transaction.
If you do a ROLLBACK when you have updated a non-transactional table
you will get an error as a warning.
Added option --bdb-shared-data to mysqld.
Added status variable Slave_open_temp_tables.
Added variables binlog_cache_size and max_binlog_cache_size to
mysqld.
DROP TABLE, RENAME TABLE, CREATE INDEX and
DROP INDEX are now transaction endpoints.
If you do a DROP DATABASE on a symbolic linked database, both
the link and the original database is deleted.
Fixed that DROP DATABASE works on OS/2.
Fixed bug when doing a SELECT DISTINCT ... table1 LEFT JOIN
table2 ... when table2 was empty.
Added --abort-slave-event-count and
--disconnect-slave-event-count options to mysqld for
debugging and testing of replication.
Fixed replication of temporary tables. Handles everything except
slave server restart.
SHOW KEYS now shows whether or not key is FULLTEXT.
Added new script, `mysql-multi.server.sh'. Thanks to
Tim Bunce Tim.Bunce@ig.co.uk for modifying `mysql.server' to
easily handle hosts running many mysqld processes.
`safe_mysqld', `mysql.server', and `mysql_install_db' have
been modified to use mysql_print_defaults instead of various hacks
to read the `my.cnf' files. In addition, the handling of various
paths has been made more consistent with how mysqld handles them
by default.
Automatically remove Berkeley DB transaction logs that no longer are in
use.
Fixed bug with several FULLTEXT indexes in one table.
Added a warning if number of rows changes on REPAIR/OPTIMIZE.
Applied patches for OS/2 by Yuri Dario.
FLUSH TABLES table_name didn't always flush the index tree
to disk properly.
--bootstrap is now run in a separate thread. This fixes a problem
that caused mysql_install_db to core dump on some Linux machines.
Changed mi_create() to use less stack space.
Fixed bug with optimizer trying to over-optimize MATCH when used
with UNIQUE key.
Changed crash-me and the MySQL benchmarks to also work
with FrontBase.
Allow RESTRICT and CASCADE after DROP TABLE to make
porting easier.
Reset status variable which could cause problem if one used --slow-log.
Added variable connect_timeout to mysql and mysqladmin.
Added connect_timeout as an alias for timeout for option files
read by mysql_options().
Added new options --pager[=...], --no-pager,
--tee=... and --no-tee to the mysql client. The
new corresponding interactive commands are pager, nopager,
tee and notee. See section 4.8.2 The Command-line Tool, mysql --help
and the interactive help for more information.
Fixed crash when automatic repair of MyISAM table failed.
Fixed a major performance bug in the table locking code when one
constantly had a LOT of SELECT, UPDATE and INSERT
statements running. The symptom was that the UPDATE and
INSERT queries were locked for a long time while new SELECT
statements were executed before the updates.
When reading options_files with mysql_options() the
return-found-rows option was ignored.
One can now specify interactive-timeout in the option file that
is read by mysql_options(). This makes it possible to force
programs that run for a long time (like mysqlhotcopy) to use
interactive_timeout instead of wait_timeout.
Added to the slow query log the time and the user name for each logged
query. If you are using --log-long-format then also queries that
do not use an index are logged, even if the query takes less than
long_query_time seconds.
Fixed a problem in LEFT JOIN which caused all columns in a reference
table to be NULL.
Fixed a problem when using NATURAL JOIN without keys.
Fixed a bug when using a multi-part keys where the first part was of type
TEXT or BLOB.
DROP of temporary tables wasn't stored in the update/binary log.
Fixed a bug where SELECT DISTINCT * ... LIMIT # only returned one row.
Fixed a bug in the assembler code in strstr() for sparc and cleaned up
the `global.h' header file to avoid a problem with bad aliasing with
the compiler submitted with RedHat 7.0. (Reported by Trond Eivind Glomsrød)
The option --skip-networking now works properly on NT.
Fixed a long outstanding bug in the ISAM tables when a row with a length
of more than 65K was shortened by a single byte.
Fixed a bug in MyISAM when running multiple updating processes on
the same table.
Fixed a problem with SUBSTRING_INDEX() and REPLACE().
(Patch by Alexander Igonitchev)
Fix CREATE TEMPORARY TABLE IF NOT EXISTS not to give an error
if the table exists.
If you don't create a PRIMARY KEY in a BDB table, a hidden
PRIMARY KEY will be created.
Added read-only-key optimization to BDB tables.
LEFT JOIN in some cases preferred a full table scan when there was
no WHERE clause.
When using --log-slow-queries, don't count the time waiting for a lock.
Fixed bug in lock code on Windows which could cause the key cache
to report that the key file was crashed even if it was okay.
Automatic repair of MyISAM tables if you start mysqld with
--myisam-recover.
Removed the TYPE= keyword from CHECK and
REPAIR. Allow CHECK options to be combined. (You can still
use TYPE= but this usage is deprecated.)
Fixed mutex bug in the binary replication log - long update queries could
be read only in part by the slave if it did it at the wrong time, which
was not fatal, but resulted in a performance-degrading reconnect and
a scary message in the error log.
Changed the format of the binary log - added magic number, server
version, binlog version. Added server id and query error code for each
query event.
Replication thread from the slave now will kill all the stale threads
from the same server.
Long replication user names were not being handled properly.
Added --replicate-rewrite-db option to mysqld.
Added --skip-slave-start option to mysqld.
Updates that generated an error code (such as INSERT INTO foo(some_key)
values (1),(1)) erroneously terminated the slave thread.
Added optimization of queries where DISTINCT is only used on columns
from some of the tables.
Allow floating-point numbers where there is no sign after the exponent
(like 1e1).
SHOW GRANTS didn't always show all column grants.
Added --default-extra-file=# to all MySQL clients.
Columns referenced in INSERT statements now are initialized properly.
UPDATE didn't always work when used with a range on a timestamp that
was part of the key that was used to find rows.
Fixed a bug in FULLTEXT index when inserting a NULL column.
Changed to use mkstemp() instead of tempnam(). Based
on a patch from John Jones.
To make it possible to reliably dump and restore tables with
TIMESTAMP(X) columns, MySQL now reports columns with X
other than 14 or 8 to be strings.
Changed sort order for latin1 as it was before MySQL Version 3.23.23.
Any table with CHAR columns that may have characters with ASCII
values greater than 128 that was created or modified with 3.23.22 must
be repaired!
Fixed small memory leak introduced from 3.23.22 when creating a
temporary table.
Fixed problem with BDB tables and reading on a unique (not primary) key.
Restored the win1251 character set (it's now only marked deprecated).
Changed sort order for 'German'; All tables created with 'German' sortorder
must be repaired with REPAIR TABLE or myisamchk before use!
Added option --core-file to mysqld to get a core file on
Linux if mysqld dies on the SIGSEGV signal.
MySQL client mysql now starts with option
--no-named-commands (-g) by default. This option can be
disabled with --enable-named-commands (-G). This may cause
incompatibility problems in some cases, for example, in SQL scripts that
use named commands without a semicolon, etc. ! Long format commands
still work from the first line.
Fixed a problem when using many pending DROP TABLE statements at
the same time.
Optimizer didn't use keys properly when using LEFT JOIN on an
empty table.
Added shorter help text when invoking mysqld with incorrect options.
Fixed non-fatal free() bug in mysqlimport.
Fixed bug in MyISAM index handling of
DECIMAL/NUMERIC keys.
Fixed a bug in concurrent insert in MyISAM tables; In some contexts,
usage of MIN(key_part) or MAX(key_part) returned an empty set.
Updated mysqlhotcopy to use the new FLUSH TABLES table_list
syntax. Only tables which are being backed up are flushed now.
Changed behavior of --enable-thread-safe-client so
that both non-threaded (-lmysqlclient) and threaded
(-lmysqlclient_r) libraries are built. Users who linked
against a threaded -lmysqlclient will need to link against
libmysqlclient_r now.
Added atomic RENAME command.
Don't count entries with NULL in COUNT(DISTINCT ...).
Changed ALTER TABLE, LOAD DATA INFILE on empty tables and
INSERT ... SELECT ... on empty tables to create non-unique indexes
in a separate batch with sorting. This will make the above calls much
faster when you have many indexes.
ALTER TABLE now logs the first used insert_id correctly.
Fixed crash when adding a default value to a BLOB column.
Fixed a bug with DATE_ADD/DATE_SUB where it returned a datetime instead
of a date.
Fixed a problem with the thread cache which made some threads show up as
***DEAD*** in SHOW PROCESSLIST.
Fixed a lock in our thr_rwlock code, which could make selects that run
at the same time as concurrent inserts crash. This only affects systems
that don't have the pthread_rwlock_rdlock code.
When deleting rows with a non-unique key in a HEAP table, all rows weren't
always deleted.
Fixed bug in range optimizer for HEAP tables for searches on a part index.
Fixed that SELECT on part keys works with BDB tables.
Fixed INSERT INTO bdb_table ... SELECT to work with BDB tables.
CHECK TABLE now updates key statistics for the table.
ANALYZE TABLE will now only update tables that have been changed
since thee last ANALYZE. Note that this is a new feature and tables
will not be marked to be analyzed until they are updated in any way with
3.23.23 or newer. For older tables, you have to do CHECK TABLE
to update the key distribution.
Fixed some minor privilege problems with CHECK, ANALYZE,
REPAIR and SHOW CREATE commands.
Added CHANGE MASTER TO command.
Added FAST, QUICKEXTENDED check types to
CHECK TABLES.
Changed myisamchk so that --fast and
--check-changed-tables are also honored with --sort-index and
--analyze.
Fixed fatal bug in LOAD TABLE FROM MASTER that did not lock the
table during index re-build.
LOAD DATA INFILE broke replication if the database was excluded
from replication.
More variables in SHOW SLAVE STATUS and SHOW MASTER STATUS.
SLAVE STOP now will not return until the slave thread actually exits.
Full text search via the MATCH function and FULLTEXT index type.
(For MyISAM files). This makes FULLTEXT a reserved word.
Changed copyright for all files to GPL for the server code and utilities and
LGPL for the client libraries.
Fixed bug where all rows matching weren't updated on a MyISAM table
when doing update based on key on a table with many keys and some key changed
values.
The Linux MySQL RPM's and binaries are now statically linked with
a linuxthread version that has faster mutex handling when used with
MySQL.
ORDER BY can now uses REF keys to find subset the rows
that needs to be sorted.
Changed name of print_defaults to my_print_defaults to avoid
name confusion.
Fixed NULLIF() to work according to ANSI SQL99.
Added net_read_timeout and net_write_timeout as startup
parameters to mysqld.
Fixed bug that destroyed index when doing myisamchk --sort-records
on a table with prefix compressed index.
Added pack_isam and myisampack to the standard MySQL distribution.
Added the syntax BEGIN WORK (the same as BEGIN).
Fixed core dump bug when using ORDER BY on a CONV() expression.
Added LOAD TABLE FROM MASTER
Added FLUSH MASTER and FLUSH SLAVE
Fixed big/little endian problem in the replication
Fixed a bug in find_in_set() when the first argument was NULL.
Added table locks to Berkeley DB.
Fixed a bug with LEFT JOIN and ORDER BY where the first
table had only one matching row.
Added 4 sample my.cnf example files in the `support-files'
directory.
Fixed duplicated key problem when doing big GROUP BY's.
(This bug was probably introduced in 3.23.15).
Changed syntax for INNER JOIN to match ANSI SQL.
Added NATURAL JOIN syntax.
A lot of fixes in the BDB interface.
Added handling of --no-defaults and --defaults-file to
safe_mysqld.sh and mysql_install_db.sh.
Fixed bug in reading compressed tables with many threads.
Fixed that USE INDEX works with PRIMARY keys.
Added BEGIN statement to start a transaction in AUTOCOMMIT mode.
Added symbolic links support for Windows.
Changed protocol to let client know if the server is in AUTOCOMMIT mode
and if there is a pending transaction. If there is a pending transaction
the client library will give an error before reconnecting to the server to
let the client know that the server did a rollback.
The protocol is still backward compatible with old clients
KILL now works on a thread that is locked on a 'write' to a dead client.
Fixed memory leak in the replication slave thread.
Added new option log-slave-updates to allow daisy-chaining the slaves.
Fixed compile error on FreeBSD and other systems where pthread_t
is not the same as int.
Fixed master shutdown aborting the slave thread.
Fixed a race condition in INSERT DELAYED code when doing
ALTER TABLE.
Added deadlock detection sanity checks to INSERT DELAYED
Fixed bug in REPAIR TABLE when the table was in use by other threads.
Added a thread cache to make it possible to debug MySQL with
gdb when one does a lot of reconnects. This will also improve
systems where you can't use persistent connections.
Lots of fixes in the Berkeley DB interface.
UPDATE IGNORE will not abort if an update results in a
DUPLICATE_KEY error.
Put CREATE TEMPORARY TABLE commands in the update log.
Fixed bug in handling of masked IP numbers in the privilege tables.
Fixed bug with delayed_key_writes tables and CHECK TABLE.
Added replicate-do-db and replicate-ignore-db options to
restrict which databases get replicated
To start mysqld as root, you must now use the --user=root option.
Added interface to Berkeley DB. (This is not yet functional; Play with it at
your own risk!)
Replication between master and slaves.
Fixed bug that other threads could steal a lock when a thread had
a lock on a table and did a FLUSH TABLES command.
Added the slow_launch_time variable and the Slow_launch_threads
status variable to mysqld. These can be examined with
mysqladmin variables and mysqladmin extended-status.
Added functions INET_NTOA() and INET_ATON().
The default type of IF() now depends on the second and
third arguments and not only on the second argument.
Fixed case when myisamchk could go into a loop when trying to
repair a crashed table.
Don't write INSERT DELAYED to update log if SQL_LOG_UPDATE=0.
Fixed problem with REPLACE on HEAP tables.
Added possible character sets and time zone to SHOW VARIABLES.
Fixed bug in locking code that could result it locking problems with
concurrent inserts under high load.
Fixed a problem with DELETE of many rows on a table with
compressed keys where MySQL scanned the index to find the rows.
Fixed problem with CHECK on table with deleted keyblocks.
Fixed a bug in reconnect (at the client side) where it didn't free memory
properly in some contexts.
Fixed problems in update log when using LAST_INSERT_ID() to update
a table with an auto_increment key.
Added function NULLIF().
Fixed bug when using LOAD DATA INFILE on a table with
BLOB/TEXT columns.
Optimised MyISAM to be faster when inserting keys in sorted order.
EXPLAIN SELECT ... now also prints out whether MySQL needs to
create a temporary table or use file sorting when resolving the SELECT.
Added optimization to skip ORDER BY parts where the part is a
constant expression in the WHERE part. Indexes can now be used
even if the ORDER BY doesn't match the index exactly, as long as
all the not used index parts and all the extra ORDER BY
columns are constants in the WHERE clause. See section 5.4.3 How MySQL Uses Indexes.
UPDATE and DELETE on a whole unique key in the WHERE part,
is now faster than before.
Changed RAID_CHUNKSIZE to be in 1024 byte increments.
Fixed a bug in CONCAT() where one of the arguments was a function
that returned a modified argument.
Fixed a critical bug in myisamchk, where it updated the header in
the index file when one only checked the table. This confused the
mysqld daemon if it updated the same table at the same time. Now
the status in the index file is only updated if one uses
--update-state. With older myisamchk versions you should
use --read-only when only checking tables, if there is the
slightest chance that the mysqld server is working on the table at the
same time!
Fixed that DROP TABLE is logged in the update log.
Fixed problem when searching on DECIMAL() key field
where the column data contained leading zeros.
Fix bug in myisamchk when the auto_increment isn't the first key.
Allow DATETIME in ISO8601 format: 2000-03-12T12:00:00
Dynamic character sets. A mysqld binary can now handle many different
character sets (you can choose which when starting mysqld).
Added command REPAIR TABLE.
Added C API function mysql_thread_safe().
Added the UMASK_DIR environment variable.
Added function CONNECTION_ID().
When using = on BLOB or VARCHAR BINARY keys, where
only a part of the column was indexed, the whole column of the result
row wasn't compared.
Fix for sjis character set and ORDER BY.
When running in ANSI mode, don't allow columns to be used that aren't in
the GROUP BY part.
Fixed problem when doing locks on the same table more than 2 times in
the same LOCK TABLE command; This fixed the problem one got when running
the test-ATIS test with --fast or --check-only-changed.
Added option SQL_BUFFER_RESULT to SELECT.
Removed end space from double/float numbers in results from temporary
tables.
Added CHECK TABLE command.
Added changes for MyISAM in 3.23.12 that didn't get into the source
distribution because of CVS problems.
Fixed bug so that mysqladmin shutdown will wait for the local server
to close down.
Fixed a possible endless loop when calculating timestamp.
Added print_defaults to the `.rpm' files. Removed mysqlbug
from the client `.rpm' file.
Fixed bug in MyISAM involving REPLACE ... SELECT ... which could
give a corrupted table.
Fixed bug in myisamchk where it wrongly reset the auto_increment value.
LOTS of patches for Linux Alpha. MySQL now appears to be relatively
stable on Alpha.
Changed DISTINCT on HEAP temporary tables to use hashed
keys to quickly find duplicated rows. This mostly concerns queries of
type SELECT DISTINCT ... GROUP BY .... This fixes a problem where
not all duplicates were removed in queries of the above type. In
addition, the new code is MUCH faster.
Added patches to make MySQL compile on Mac OS X.
Added option IF NOT EXISTS to CREATE DATABASE.
Added options --all-databases and --databases to mysqldump
to allow dumping of many databases at the same time.
Fixed bug in compressed DECIMAL() index in MyISAM tables.
Fixed bug when storing 0 into a timestamp.
When doing mysqladmin shutdown on a local connection, mysqladmin now
waits until the pidfile is gone before terminating.
Fixed core dump with some COUNT(DISTINCT ...) queries.
Fixed that myisamchk works properly with RAID:ed tables.
Fixed problem with LEFT JOIN and key_field IS NULL.
Fixed bug in net_clear() which could give the error Aborted
connection in the MySQL clients.
Added options USE INDEX (key_list) and IGNORE INDEX (key_list) as
join parameters in SELECT.
Fixed problem that affected queries that did arithmetic on group functions.
Fixed problem with timestamps and INSERT DELAYED.
Fixed that date_column BETWEEN const_date AND const_date works.
Fixed problem when only changing a 0 to NULL in a table with
BLOB/TEXT columns.
Fixed bug in range optimizer when using many key parts and or on the middle
key parts: WHERE K1=1 and K3=2 and (K2=2 and K4=4 or K2=3 and K4=5)
Added command source to mysql to allow reading of batch files
inside the mysql client. Original patch by Matthew Vanecek.
Fixed critical problem with the WITH GRANT OPTION option.
Don't give an unnecessary GRANT error when using tables from many
databases in the same query.
Added VIO wrapper (needed for SSL support ; By Andrei Errapart and
Tõnu Samuel).
Fixed optimizer problem on SELECT when using many overlapping indexes.
MySQL should now be able to choose keys even better when there
is many keys to choose from.
Changed optimizer to prefer a range key instead of a ref key when the
range key can uses more columns than the ref key (which only can use
columns with =). For example, the following type of queries should now
be faster: SELECT * from key_part_1=const and key_part_2 > const2
Fixed bug that a change of all VARCHAR columns to CHAR columns
didn't change row type from dynamic to fixed.
Disabled floating-point exceptions for FreeBSD to fix core dump when
doing SELECT floor(pow(2,63)).
Changed mysqld startup option --delay-key-write to
--delay-key-write-for-all-tables
Added read-next-on-key to HEAP tables. This should fix all
problems with HEAP tables when using not UNIQUE keys.
Added print of default arguments options to all clients.
Added --log-slow-queries to mysqld to log all queries that take a
long time to a separate log file with a time of how long the query took.
Fixed core dump when doing WHERE key_column=RAND(...)
Fixed optimization bug in SELECT ... LEFT JOIN ... key_column IS NULL,
when key_column could contain NULL values.
Fixed problem with 8-bit characters as separators in LOAD DATA INFILE.
Fixed workaround under Linux to avoid problems with pthread_mutex_timedwait,
which is used with INSERT DELAYED. See section 2.6.1 Linux Notes (All Linux Versions).
Fixed that one will get a '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-existent table.
Remove locks on tables before starting to remove duplicates.
Added option FULL to SHOW PROCESSLIST.
Added option --verbose to mysqladmin.
Fixed problem when automatically 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.
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()).
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 reserved words (required for CASE): CASE, THEN, WHEN, ELSE and END.
A new table handler library (MyISAM) with a lot of new features.
See section 7.1 MyISAM Tables.
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' (if the line doesn't display
correctly, the latter 'e' means a French 'e' with a dot above) 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
a 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
bobak@relog.ch for this!
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 Version 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 enhancement 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.
The 3.22 version has faster and safer connect code than version 3.21, as well
as a lot of new nice enhancements. The reason for not including these changes
As there aren't really any MAJOR changes, upgrading from 3.21 to 3.22 should
be very easy and painless. See section 2.5.2 Upgrading from Version 3.21 to Version 3.22.
Upgraded the configure and include files to match the latest 3.23 version.
This should increase portability and make it easier to build shared libraries.
Added latest patches to mit-pthreads for NetBSD.
Fixed problem with timezones that are < GMT -11.
Fixed a bug when deleting packed keys in NISAM.
Fixed problem that could cause MySQL to touch freed memory when
doing very complicated GROUP BY queries.
Fixed core dump if you got a crashed table where an ENUM field value
was too big.
Added mysqlshutdown.exe and mysqlwatch.exe to the Windows
distribution.
Fixed problem when doing ORDER BY on a reference key.
Fixed that INSERT DELAYED doesn't update timestamps that are given.
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 Windows and tells how often MySQL should close all
unused tables and flush all updated tables to disk.
Fixed problem that a VARCHAR column compared with CHAR column
didn't use keys efficiently.
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.
mysql_install_db no longer starts the MySQL server! You
should start mysqld with safe_mysqld after installing it! The
MySQL RPM will, however, start the server as before.
Added --bootstrap option to mysqld and recoded
mysql_install_db to use it. This will make it easier to install
MySQL with RPMs.
Changed +, - (sign and minus), *, /, %,
ABS() and MOD() to be BIGINT aware (64-bit safe).
Fixed a bug in ALTER TABLE that caused mysqld to crash.
MySQL now always reports the conflicting key values when a
duplicate key entry occurs. (Before this was only reported for INSERT).
New syntax: INSERT INTO tbl_name SET col_name=value, col_name=value, ...
Most errors in the `.err' log are now prefixed with a time stamp.
Added option MYSQL_INIT_COMMAND to mysql_options() to make
a query on connect or reconnect.
Added option MYSQL_READ_DEFAULT_FILE and
MYSQL_READ_DEFAULT_GROUP to mysql_options() to read the
following parameters from the MySQL option files: port,
socket, compress, password, pipe, timeout,
user, init-command, host and database.
Added maybe_null to the UDF structure.
Added option IGNORE to INSERT statements with many rows.
Fixed some problems with sorting of the koi8 character sets; Users of koi8
MUST run isamchk -rq on each table that has an index on
a CHAR or VARCHAR column.
New script mysql_setpermission, by Luuk de Boer, 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).
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 Windows 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.
Czech character sets should now work much better. You must also install
http://www.mysql.com/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 Windows
(a fatal bug from 3.22.6).
Fixed problems with TIME columns and negative strings.
Added an extra thread signal loop on shutdown to avoid some error messages
from the client.
MySQL now uses the next available number as extension for the update
log file.
You can now use the /*! ... */ syntax to hide MySQL-specific
keywords when you write portable code. MySQL will parse the code
inside the comments as if the surrounding /*! and */ comment
characters didn't exist.
OPTIMIZE TABLE tbl_name can now be used to reclaim disk space
after many deletes. Currently, this uses ALTER TABLE to
regenerate the table, but in the future it will use an integrated
isamchk for more speed.
Upgraded libtool to 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.
For the LOAD DATA INFILE statement, you can now use the new LOCAL
keyword to read the file from the client. mysqlimport will
automatically use LOCAL when importing with the TCP/IP protocol.
Fixed small optimize problem when updating keys.
Changed makefiles to support shared libraries.
MySQL-NT can now use named pipes, which means that you can now use
MySQL-NT without having to install TCP/IP.
All table lock handing is changed to avoid some very subtle
deadlocks when using DROP TABLE, ALTER TABLE, DELETE FROM
TABLE and mysqladmin flush-tables under heavy usage.
Changed locking code to get better handling of locks of different types.
Updated DBI to 1.00 and DBD to 1.2.0.
Added a check that the error message file contains error messages suitable for
the current version of mysqld. (To avoid errors if you accidentally
try to use an old error message file.)
All count structures in the client (affected_rows(),
insert_id(), ...) are now of type BIGINT to allow 64-bit values
to be used.
This required a minor change in the MySQL protocol which should affect
only old clients when using tables with AUTO_INCREMENT values > 16M.
The return type of mysql_fetch_lengths() has changed from uint *
to ulong *. This may give a warning for old clients but should work
on most machines.
Change mysys and dbug libraries to allocate all thread variables
in one struct. This makes it easier to make a threaded `libmysql.dll'
library.
Use the result from gethostname() (instead of uname()) when
constructing `.pid' file names.
New better compressed server/client protocol.
COUNT(), STD() and AVG() are extended to handle more than
4G rows.
You can now store values in the range -838:59:59 <= x <=
838:59:59 in a TIME column.
WARNING: INCOMPATIBLE CHANGE!!
If you set a TIME column to too short a value, MySQL now
assumes the value is given as: [[[D ]HH:]MM:]SS instead of
HH[:MM[:SS]].
TIME_TO_SEC() and SEC_TO_TIME() can now handle negative times
and hours up to 32767.
Added new option
SET 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 5.4.3 How MySQL Uses Indexes.
Lots of new benchmarks.
A new C API chapter and lots of other improvements in the manual.
Added --tmpdir option to mysqld, for specifying the location
of the temporary file directory.
MySQL now automatically changes a query from an ODBC client:
SELECT ... FROM table WHERE auto_increment_column IS NULL
to:
SELECT ... FROM table WHERE auto_increment_column == LAST_INSERT_ID()
This allows some ODBC programs (Delphi, Access) to retrieve the newly
inserted row to fetch the AUTO_INCREMENT 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 Windows,
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 Windows.
Fixed table locks for Windows.
Allow `$' in identifiers.
Changed name of user-specific configuration file from `my.cnf' to
`.my.cnf' (Unix only).
Added 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 Version 3.22.0).
UPDATE now returns information about how many rows were
matched and updated, and how many ``warnings'' occurred when doing the update.
Fixed incorrect result from FORMAT(-100,2).
ENUM and SET columns were compared in binary (case-sensitive)
fashion; changed to be case insensitive.
New (backward compatible) connect protocol that allows you to
specify the database to use when connecting, to get much faster
connections to a specific database.
The mysql_real_connect() call is changed to:
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!
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.
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.)
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 Version 3.21.20.
Changed ALTER TABLE to work with Windows (Windows can't rename
open files). Also fixed a couple of small bugs in the Windows version.
All standard MySQL clients are now ported to MySQL-Windows.
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.
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.
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 TO 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.
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 Version 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.
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.
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 Version 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.
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.
CREATE now supports all ODBC types and the mSQLTEXT 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.
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.
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.
New reserved words 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;
Version 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.
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.
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).
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.
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.
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 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().
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.
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 bug fixes done.
New `INSTALL' files (not final version) and some information regarding porting.
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.