|
Go to the first, previous,
next, last
section, table of contents.
Note that we tend to update the manual at the same time we implement
new things to MySQL. If you find a version listed
below that you can't find on the MySQL download page,
this means that the version has not yet been released!
The major difference between release 3.23 and releases 3.22 and
3.21 is that 3.23 contains a new ISAM library (MyISAM), which is
more tuned for SQL than the old ISAM was.
The 3.23 release is under development, and things will be added
at a fast pace to it. For the moment we recommend this version only
for users that desperately need a new feature that is found only
in this release (like big file support and machine-independent tables).
(Note that all new functionality in MySQL 3.23 is extensively tested,
but as this release involves much new code, it's difficult to test
everything). This version should start to stabilize as soon as we
get subselects included in it.
- Fixed workaround under Linux to avoid problems with pthread_mutex_timedwait,
which is used with
INSERT DELAYED . See section 4.11.5
Linux notes (all Linux versions)
- Fixed tha one will get at 'disk full' error message if one gets
disk full when doing sorting (instead of waiting until we got
more disk space).
- Fixed a bug in
MyISAM with keys > 250 characters.
- In
MyISAM one can now do an INSERT
at the same time as other threads are reading from the table.
- Added variable
max_write_lock_count to mysqld
to force a READ lock after a certain number of WRITE
locks.
- Inverted flag
delayed_key_write on show variables .
- Renamed variable
concurrency to thread_concurrency .
- The following functions are now multi-byte-safe:
LOCATE(substr,str) ,
POSITION(substr IN str) , LOCATE(substr,str,pos) ,
INSTR(str,substr) , LEFT(str,len) , RIGHT(str,len) ,
SUBSTRING(str,pos,len) , SUBSTRING(str FROM
pos FOR len) , MID(str,pos,len) , SUBSTRING(str,pos) ,
SUBSTRING(str FROM pos) , SUBSTRING_INDEX(str,delim,count) ,
RTRIM(str) , TRIM([[BOTH | TRAILING] [remstr]
FROM] str) , REPLACE(str,from_str,to_str) ,
REVERSE(str) , INSERT(str,pos,len,newstr) ,
LCASE(str) , LOWER(str) , UCASE(str)
and UPPER(str) ; Patch by Wei He.
- Fix core dump when releasing a lock from a non existing table
- Remove locks on tables before starting to remove duplicates.
- Added option
FULL to SHOW PROCESSLIST .
- Added option
--verbose to mysqladmin .
- Fixed problem when automaticly converting HEAP to MyISAM.
- Fixed bug in HEAP tables when doing insert + delete + insert
+ scan the table.
- Fixed bugs on Alpha with
REPLACE() and LOAD
DATA INFILE .
- Added
mysqld variable interactive_timeout .
- Changed the argument to
mysql_data_seek() from
ulong to ulonglong .
- Added
mysqld option -O lower_case_table_names={0|1}
to allow users to force table names to lower case.
- Added
SELECT ... INTO DUMPFILE .
- Added mysqld option
--ansi to make some functions
ANSI SQL compatible.
- Temporary tables now starts with
#sql .
- Added quoting of identifiers with
` ("
in --ansi mode).
- Changed to use snprintf() when printing floats to avoid some
buffer overflows on FREEBSD.
- Made
[floor() overflow safe on FREEBSD.
- Added option
--quote-names to mysqldump
- Fixed bug that one could make a part of a
PRIMARY KEY
NOT NULL .
- Fixed
encrypt() to be thread safe and not reuse
buffer.
- Added
mysql_odbc_escape_string() function to support
big5 characters in MyOBC.
- Rewrote the table handler to use classes. This introduces a
lot of new code, but will make table handling faster and better...
- Added patch by Sasha for user defined variables.
- Changed that
FLOAT and DOUBLE (without
any length modifiers) are not anymore fixed decimal point numbers.
- Changed the meaning of
FLOAT(X) : Now this is the
same as FLOAT if X <= 24 and a DOUBLE
if 24 < X <= 53.
DECIMAL(X) is now an alias for DECIMAL(X,0 )
and DECIMAL is now an alias for DECIMAL(10,0) .
The same goes for NUMERIC .
- Added option
ROW_FORMAT={default | dynamic | static |
compressed} to CREATE_TABLE .
DELETE FROM table_name didn't work on temporary
tables.
- Changed function
CHAR_LENGTH() to be multi-byte
character safe.
- Added function
ORD(string) .
- Fixed some Y2K problems in the new date handling in 3.23.
- Fixed problem with
SELECT DISTINCT ... ORDER BY RAND() .
- Added patches by Sergei A. Golubchik for text searching on the
MyISAM level.
- Fixed cache overflow problem when using full joins without keys.
- Fixed some configure issues.
- Some small changes to make parsing faster.
ALTER TABLE + adding a column after the last field
didn't work.
- Fixed problem when using an auto_increment column in two keys
- One can now with MyISAM have the auto_increment part as a sub
part:
CREATE TABLE foo (a int not null auto_increment, b
char(5), primary key (b,a))
- Fixed bug in MyISAM with packed char keys that could be NULL.
AS on fieldname with CREATE TABLE table_name
SELECT ... didn't work.
- Allow use of
NATIONAL and NCHAR when
defining character columns. This is the same as not using BINARY .
- Don't allow
NULL columns in a PRIMARY KEY
(only in UNIQUE keys).
- Clear
LAST_INSERT_ID if in uses this in ODBC: WHERE
auto_increment_column IS NULL . This seams to fix some problems
with Access.
SET SQL_AUTO_IS_NULL=0|1 now turns off/on the handling
of searching after the last inserted row with WHERE auto_increment_column
IS NULL .
- Added new mysqld variable
concurrency for Solaris.
- Added option
--relative to mysqladmin
to make extended-status more useful to monitor changes.
- Fixed bug when using
COUNT(DISTINCT..) on an empty
table.
- Added support for the Chinese character set GBK.
- Fixed problem with
LOAD DATA INFILE and BLOB
columns.
- Added bit operator
~ (negation).
- Fixed problem with
UDF functions.
- Inserting a
DATETIME into a TIME column
will not anymore try to store 'days' in it.
- Fixed problem with storage of float/double on low endian machines.
(This affected
SUM() .)
- Added connect timeout on TCP/IP connections.
- Fixed problem with
LIKE "%" on a index
that may have NULL values.
REVOKE ALL PRIVILEGES didn't revoke all privileges.
- Allow creation of temporary tables with same name as the original
table.
- When granting a user a grant option for a database, he couldn't
grant privileges to other users.
- New command:
SHOW GRANTS FOR user (by Sinisa).
- New
date_add syntax: date/datetime + INTERVAL
# interval_type . By Joshua Chamas.
- Fixed privilege check for
LOAD DATA REPLACE .
- Automatic fixing of broken include files on Solaris 2.7
- Some configure issues to fix problems with big file system detection.
REGEXP is now case insensitive if you use not binary
strings.
- 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 BLOB s)
on Linux Alpha.
- Fixed problem with
LOCK TABLES combined with DELETE
FROM table .
- MyISAM tables now allow keys on
NULL and BLOB/TEXT
columns.
- The following join is now much faster:
SELECT ... FROM
t1 LEFT JOIN t2 ON ... WHERE t2.not_null_column IS NULL .
ORDER BY and GROUP BY can be done
on functions.
- Changed handling of 'const_item' to allow handling of
ORDER
BY RAND() .
- Indexes are now used for
WHERE key_column = function .
- Indexes are now used for
WHERE key_column = column_name
even if the columns are not identically packed.
- Indexes are now used for
WHERE column_name IS NULL .
- Changed heap tables to be stored in low_byte_first order (to
make it easy to convert to MyISAM tables)
- Automatic change of HEAP temporary tables to MyISAM tables in
case of 'table is full' errors.
- Added option
--init-file=file_name to mysqld .
COUNT(DISTINCT value,[value,...])
CREATE TEMPORARY TABLE now creates a temporary
table, in its own namespace, that is automatically deleted if
connection is dropped.
- New keywords (required for
CASE ): CASE, THEN,
WHEN, ELSE and END .
- New functions
EXPORT_SET() and MD5() .
- Support for the GB2312 Chinese character set.
- Fixed some compilation problems.
A new table handler library (MyISAM ) with a lot
of new features. See section 9.4
MySQL table types.
- You can create in-memory
HEAP tables which are
extremely fast for lookups.
- Support for big files (63 bit) on OSes that support big files.
- New function
LOAD_FILE(filename) to get the contents
of a file as a string value.
- New operator
<=> which will act as =
but will return TRUE if both arguments are NULL .
This is useful for comparing changes between tables.
- Added the ODBC 3.0
EXTRACT(interval FROM datetime)
function.
- Columns defined as
FLOAT(X) is not rounded on storage
and may be in scientific notation (1.0 E+10) when retrieved.
REPLACE is now faster than before.
- Changed
LIKE character comparison to behave as
= ; This means that 'e' LIKE ''e' is
now true.
SHOW TABLE STATUS returns a lot of information
about the tables.
- Added
LIKE to the SHOW STATUS command.
- Added privilege column to
SHOW COLUMNS .
- Added columns
packed and comment to
SHOW INDEX .
- Added comments to tables (with
CREATE TABLE ... COMMENT
"xxx" ).
- Added
UNIQUE , as in CREATE TABLE table_name
(col int not null UNIQUE)
- New create syntax:
CREATE TABLE table_name SELECT ....
- New create syntax:
CREATE TABLE IF NOT EXISTS ...
- Allow creation of
CHAR(0) columns.
DATE_FORMAT() now requires `%' before
any format character.
DELAYED is now a reserved word (sorry about that
:( ).
- An example procedure is added:
analyse , file: `sql_analyse.c'.
This will describe the data in your query. Try the following:
SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max elements,[max memory]])
This procedure is extremely useful when you want to check the
data in your table!
BINARY cast to force a string to be compared case
sensitively.
- Added option
--skip-show-database to mysqld .
- Check if a row has changed in an
UPDATE now also
works with BLOB /TEXT columns.
- Added the
INNER join syntax. NOTE:
This made INNER an reserved word!
- Added support for netmasks to the hostname in the MySQL
tables. You can specify a netmask using the
IP/NETMASK
syntax.
- If you compare a
NOT NULL DATE/DATETIME column
with IS NULL , this is changed to a compare against
0 to satisfy some ODBC applications. (By shreeve@uci.edu).
NULL IN (...) now returns NULL instead
of 0 . This will ensure that null_column NOT
IN (...) doesn't match NULL values.
- Fix storage of floating point values in
TIME columns.
- Changed parsing of
TIME strings to be more strict.
Now the fractional second part is detected (and currently skipped).
The following formats are supported:
[[DAYS] [H]H:]MM:]SS[.fraction]
-
[[[[[H]H]H]H]MM]SS[.fraction]
-
- Detect (and ignore) second fraction part from
DATETIME .
- Added the
LOW_PRIORITY attribute to LOAD
DATA INFILE .
- The default index name now uses the same case as the used column
name.
- Changed default number of connections to 100.
- Use bigger buffers when using
LOAD DATA INFILE .
DECIMAL(x,y) now works according to ANSI SQL.
- Added aggregate UDF functions. Thanks to Andreas F. Bobak
LAST_INSERT_ID() is now updated for INSERT
INTO ... SELECT .
- Some small changes to the join table optimizer to make some
joins faster.
SELECT DISTINCT is much faster; It uses the new
UNIQUE functionality in MyISAM . One
difference compared to MySQL 3.22 is that the
output of DISTINCT is not sorted anymore.
- All C client API macros are now functions to make shared libraries
more reliable. Because of this, you can no longer call
mysql_num_fields()
on a MYSQL object, you must use mysql_field_count()
instead.
- Added use of
LIBEWRAP ; Patch by Henning P . Schmiedehausen.
- Don't allow
AUTO_INCREMENT for other than numerical
columns.
- Using
AUTO_INCREMENT will now automatically make
the column NOT NULL .
- Show
NULL as the default value for AUTO_INCREMENT
columns.
- Added
SQL_BIG_RESULT ; SQL_SMALL_RESULT
is now default.
- Added a shared library RPM. This enchancement was contributed
by David Fox (dsfox@cogsci.ucsd.edu).
- Added a
--enable-large-files/--disable-large-files
switch to configure . See `configure.in'
for some systems where this is automatically turned off because
of broken implementations.
- Upgraded
readline to 4.0.
- New
CREATE TABLE options: PACK_KEYS
and CHECKSUM .
- Added
mysqld option --default-table-type .
The 3.22 version has faster and safer connect code and a lot of
new nice enhancements. The reason for not including these changes
in the 3.21 version is mainly that we are trying to avoid big changes
to 3.21 to keep it as stable as possible. As there aren't really
any MAJOR changes, upgrading to 3.22 should be very easy and painless.
See section 4.16.2
Upgrading from a 3.21 version to 3.22.
3.22 should also be used with the new DBD-mysql (1.20xx)
driver that can use the new connect protocol!
- Fixed problem with
LEFT JOIN and COUNT()
on a column which was declared NULL + and it had
a DEFAULT value.
- Fixed core dump problem when using
CONCAT() in
a WHERE clause.
- Fixed problem with
AVG() and STD()
with NULL values.
- Fixed prototype in `my_ctype.h' when using other character
sets.
- Some configure issues to fix problems with big file system detection.
- Fixed problem when sorting on big blob columns.
ROUND() will now work on Win32.
- Fixed core dump with empty
BLOB/TEXT column to
REVERSE() .
- Extended
/*! */ with version numbers.
- Changed
SUBSTRING(text FROM pos) to conform to
ANSI SQL. (Before this construct returned the rightmost 'pos'
characters).
- Fixed problem with
LOCK TABLES combined with DELETE
FROM table
- Fixed problem that INSERT ... SELECT didn't use SQL_BIG_TABLES.
SET SQL_LOW_PRIORITY_UPDATES=# didn't work.
- Password wasn't updated correctly if privileges didn't change
on:
GRANT ... IDENTIFIED BY
- Fixed range optimizer bug in
SELECT * FROM table_name
WHERE key_part1 >= const AND (key_part2 = const OR key_part2
= const)
- Fixed bug in compression key handling in ISAM.
- Fixed some small problems with the installation.
DATA is not a reserved word anymore.
- Fixed optimizer bug with tables with only one row.
- Fixed bug when using
LOCK TABLES table_name READ; FLUSH
TABLES;
- Applied some patches for HP-UX.
isamchk should now work on Win32.
- Changed `configure' to not use big file handling on
Linux as this crashes some RedHat 6.0 systems
- Upgraded to use Autoconf 2.13, Automake 1.4 and
libtool
1.3.2.
- Better support for SCO in
configure .
- Added option
--defaults-file=### to option file
handling to force use of only one specific option file.
- Extended
CREATE syntax to ignore MySQL 3.23
keywords.
- Fixed deadlock problem when using
INSERT DELAYED
on a table locked with LOCK TABLES .
- Fixed deadlock problem when using
DROP TABLE on
a table that was locked by another thread.
- Add logging of
GRANT/REVOKE commands in the update
log.
- Fixed
isamchk to detect a new error condition.
- Fixed bug in
NATURAL LEFT JOIN .
- Fixed problem in the C API when you called
mysql_close()
directly after mysql_init() .
- Better client error message when you can't open socket.
- Fixed
delayed_insert_thread counting when you couldn't
create a new delayed_insert thread.
- Fixed bug in
CONCAT() with many arguments.
- Added patches for DEC 3.2 and SCO.
- Fixed path-bug when installing MySQL as a service
on NT.
- The MySQL-Win32 version is now compiled with
VC++ 6.0 instead of with VC++ 5.0.
- New installation setup for MySQL-Win32.
- Fixed problem with
DELETE FROM TABLE when table
was locked by another thread.
- Fixed bug in
LEFT JOIN involving empty tables.
- Changed the
mysql.db column from char(32)
to char(60) .
MODIFY and DELAYED are not reserved
words anymore.
- Fixed a bug when storing days in a
TIME column.
- Fixed a problem with
Host '..' is not allowed to connect
to this MySQL server after one had inserted a new MySQL
user with a GRANT command.
- Changed to use
TCP_NODELAY also on Linux (Should
give faster TCP/IP connections).
- Fixed
STD() for big tables when result should be
0.
- The update log didn't have newlines on some operating systems.
INSERT DELAYED had some garbage at end in the update
log.
- Fixed bug in
mysql_install_db (from 3.22.17).
- Changed default key cache size to 8M.
- Fixed problem with queries that needed temporary tables with
BLOB columns.
- Fixes a fatal problem in 3.22.17 on Linux; After
shutdown
all threads didn't die properly.
- Added option
-O flush-time=# to mysqld .
This is mostly useful on Win32 and tells how often MySQL
should close all unused tables and flush all updated tables to
disk.
- Fixed problem that a
VARCHAR column compared with
CHAR column didn't use keys efficiently.
- Fixed a core dump problem when using
--log-update
and connecting without a default database.
- Fixed some
configure and portability problems.
- Using
LEFT JOIN on tables that had circular dependencies
caused mysqld to hang forever.
mysqladmin processlist could kill the server if
a new user logged in.
DELETE FROM tbl_name WHERE key_column=col_name
didn't find any matching rows. Fixed.
DATE_ADD(column,...) didn't work.
INSERT DELAYED could deadlock with status 'upgrading
lock'
- Extended
ENCRYPT() to take longer salt strings
than 2 characters.
longlong2str is now much faster than before. For
Intel x86 platforms, this function is written in
optimized assembler.
- Added the
MODIFY keyword to ALTER TABLE .
GRANT used with IDENTIFIED BY didn't
take effect until privileges were flushed.
- Name change of some variables in
SHOW STATUS .
- Fixed problem with
ORDER BY with 'only index' optimzation
when there were multiple key definitions for a used column.
DATE and DATETIME columns are now
up to 5 times faster than before.
INSERT DELAYED can be used to let the client do
other things while the server inserts rows into a table.
LEFT JOIN USING (col1,col2) didn't work if one
used it with tables from 2 different databases.
LOAD DATA LOCAL INFILE didn't work in the Unix
version because of a missing file.
- Fixed problems with
VARCHAR /BLOB on
very short rows (< 4 bytes); error 127 could occur when deleting
rows.
- Updating
BLOB/TEXT through formulas didn't work
for short (< 256 char) strings.
- When you did a
GRANT on a new host, mysqld
could die on the first connect from this host.
- Fixed bug when one used
ORDER BY on column name
that was the same name as an alias.
- Added
BENCHMARK(loop_count,expression) function
to time expressions.
- Allow empty arguments to
mysqld to make it easier
to start from shell scripts.
- Setting a
TIMESTAMP column to NULL
didn't record the timestamp value in the update log.
- Fixed lock handler bug when one did
INSERT INTO TABLE
... SELECT ... GROUP BY .
- Added a patch for
localtime_r() on Win32 so that
it will not crash anymore if your date is > 2039, but instead
will return a time of all zero.
- Names for user-defined functions are no longer case sensitive.
- Added escape of
^Z (ASCII 26) to \Z
as ^Z doesn't work with pipes on Win32.
mysql_fix_privileges adds a new column to the mysql.func
to support aggregate UDF functions in future MySQL
releases.
- Saving
NOW() , CURDATE() or CURTIME()
directly in a column didn't work.
SELECT COUNT(*) ... LEFT JOIN ... didn't work with
no WHERE part.
- Updated `config.guess' to allow MySQL
to configure on UnixWare 7.0.x.
- Changed the implementation of
pthread_cond() on
the Win32 version. get_lock() now correctly times
out on Win32!
- Fixed problem when using
DATE_ADD() and DATE_SUB()
in a WHERE clause.
- You can now set the password for a user with the
GRANT
... TO user IDENTIFIED BY 'password' syntax.
- Fixed bug in
GRANT checking with SELECT
on many tables.
- Added missing file
mysql_fix_privilege_tables to
the RPM distribution. This is not run by default since it relies
on the client package.
- Added option
SQL_SMALL_RESULT to SELECT
to force use of fast temporary tables when you know that the result
set will be small.
- Allow use of negative real numbers without a decimal point.
- Day number is now adjusted to maximum days in month if the resulting
month after
DATE_ADD /DATE_SUB() doesn't
have enough days.
- Fix that
GRANT compares columns in case-insensitive
fashion.
- Fixed a bug in `sql_list.h' that made
ALTER TABLE
dump core in some contexts.
- The hostname in
user@hostname can now include `.'
and `-' without quotes in the context of the GRANT ,
REVOKE and SET PASSWORD FOR ... statements.
- Fix for
isamchk for tables which need big temporary
files.
- IMPORTANT: You must run the
mysql_fix_privilege_tables
script when you upgrade to this version! This is needed because
of the new GRANT system. If you don't do this, you
will get Access denied when you try to use ALTER
TABLE , CREATE INDEX or DROP INDEX .
GRANT to allow/deny users table and column access.
- Changed
USER() to return user@host
- Changed the syntax for how to set
PASSWORD for
another user.
- New command
FLUSH STATUS that sets most status
variables to zero.
- New status variables:
aborted_threads , aborted_connects .
- New option variable:
connection_timeout .
- Added support for Thai sorting (by Pruet Boonma
- Slovak and japanese error messages.
- Configuration and portability fixes.
- Added option
SET SQL_WARNINGS=1 to get a warning
count also for simple inserts.
- MySQL now uses
SIGTERM instead
of SIGQUIT with shutdown to work better on FreeBSD.
- Added option
\G (print vertically) to mysql .
SELECT HIGH_PRIORITY ... killed mysqld .
IS NULL on a AUTO_INCREMENT column
in a LEFT JOIN didn't work as expected.
- New function
MAKE_SET() .
mysql_install_db no longer starts the MySQL
server! You should start mysqld with safe_mysqld
after installing it! The MySQL RPM will however
start the server as before.
- Added
--bootstrap option to mysqld
and recoded mysql_install_db to use it. This will
make it easier to install MySQL with RPMs.
- Changed
+ , - (sign and minus), * ,
/ , % , ABS() and MOD()
to be BIGINT aware (64-bit safe).
- Fixed a bug in
ALTER TABLE that caused mysqld
to crash.
- MySQL now always reports the conflicting key
values when a duplicate key entry occurs. (Before this was only
reported for
INSERT ).
- New syntax:
INSERT INTO tbl_name SET col_name=value,col_name=value,...
- Most errors in the `.err' log are now prefixed with
a time stamp.
- Added option
MYSQL_INIT_COMMAND to mysql_options()
to make a query on connect or reconnect.
- Added option
MYSQL_READ_DEFAULT_FILE and MYSQL_READ_DEFAULT_GROUP
to mysql_options() to read the following parameters
from the MySQL option files: port ,
socket , compress , password ,
pipe , timeout , user , init-command ,
host and database .
- Added
maybe_null to the UDF structure.
- Added option
IGNORE to INSERT statemants
with many rows.
- Fixed some problems with sorting of the koi8 character sets;
Users of koi8 MUST run
isamchk -rq
on each table that has an index on a CHAR or VARCHAR
column.
- New script
mysql_setpermission , by Luuk de Boer,
allows one to easily create new users with permissions for specific
databases.
- Allow use of hexadecimal strings (0x...) when specifying a constant
string (like in the column separators with
LOAD DATA INFILE ).
- Ported to OS/2 (thanks to Antony T. Curtis antony.curtis@olcs.net).
- Added more variables to
SHOW STATUS and changed
format of output to be like SHOW VARIABLES .
- Added
extended-status command to mysqladmin
which will show the new status variables.
SET SQL_LOG_UPDATE=0 caused a lockup of the server.
- New SQL command:
FLUSH [ TABLES | HOSTS | LOGS | PRIVILEGES
] [, ...]
- New SQL command:
KILL thread_id .
- Added casts and changed include files to make MySQL
easier to compile on AIX and DEC OSF1 4.x
- Fixed conversion problem when using
ALTER TABLE
from a INT to a short CHAR() column.
- Added
SELECT HIGH_PRIORITY ; This will get a lock
for the SELECT even if there is a thread waiting
for another SELECT to get a WRITE LOCK .
- Moved wild_compare to string class to be able to use
LIKE
on BLOB /TEXT columns with \0 .
- Added
ESCAPE option to LIKE .
- Added a lot more output to
mysqladmin debug .
- You can now start
mysqld on Win32 with the --flush
option. This will flush all tables to disk after each update.
This makes things much safer on NT/Win98 but also MUCH
slower.
- Czech character sets should now work much better. You must also
install ftp://www.mysql.com/pub/mysql/Downloads/Patches/czech-3.22.8-patch.
This patch should also be installed if you are using a character
set with uses
my_strcoll() ! The patch should always
be safe to install (for any system), but as this patch changes
ISAM internals it's not yet in the default distribution.
DATE_ADD() and DATE_SUB() didn't work
with group functions.
mysql will now also try to reconnect on USE
DATABASE commands.
- Fix problem with
ORDER BY and LEFT JOIN
and const tables.
- Fixed problem with
ORDER BY if the first ORDER
BY column was a key and the rest of the ORDER BY
columns wasn't part of the key.
- Fixed a big problem with
OPTIMIZE TABLE .
- MySQL clients on NT will now by default first
try to connect with named pipes and after this with TCP/IP.
- Fixed a problem with
DROP TABLE and mysqladmin
shutdown on Win32 (a fatal bug from 3.22.6).
- Fixed problems with
TIME columns and negative strings.
- Added an extra thread signal loop on shutdown to avoid some
error messages from the client.
- MySQL now uses the next available number as
extension for the update log file.
- Added patches for UNIXWARE 7.
- Added
LIMIT clause for the DELETE
statement.
- You can now use the
/*! ... */ syntax to hide MySQL-specific
keywords when you write portable code. MySQL
will parse the code inside the comments as if the surrounding
/*! and */ comment characters didn't
exist.
OPTIMIZE TABLE tbl_name can now be used to reclaim
disk space after many deletes. Currently, this uses ALTER
TABLE to re-generate the table, but in the future it will
use an integrated isamchk for more speed.
- Upgraded
libtool to get the configure more portable.
- Fixed slow
UPDATE and DELETE operations
when using DATETIME or DATE keys.
- Changed optimizer to make it better at deciding when to do a
full join and when using keys.
- You can now use
mysqladmin proc to display information
about your own threads. Only users with the Process_priv
privilege can get information about all threads.
- Added handling of formats
YYMMDD , YYYYMMDD ,
YYMMDDHHMMSS for numbers when using DATETIME
and TIMESTAMP types. (Formerly these formats only
worked with strings.)
- Added connect option
CLIENT_IGNORE_SPACE to allow
use of spaces after function names and before `('
(Powerbuilder requires this). This will make all function names
reserved words.
- Added the
--log-long-format option to mysqld
to enable timestamps and INSERT_ID's in the update log.
- Added
--where option to mysqldump
(patch by Jim Faucette).
- The lexical analyzer now uses ``perfect hashing'' for faster
parsing of SQL statements.
- Faster
mysqldump .
- For the
LOAD DATA INFILE statement, you can now
use the new LOCAL keyword to read the file from the
client. mysqlimport will automatically use LOCAL
when importing with the TCP/IP protocol.
- Fixed small optimize problem when updating keys.
- Changed makefiles to support shared libraries.
- MySQL-NT can now use named pipes, which means
that you can now use MySQL-NT without having
to install TCP/IP.
- Added
--tmpdir option to mysqld , for
specifying the location of the temporary file directory.
- MySQL now automatically changes a query from
an ODBC client:
SELECT ... FROM table WHERE auto_increment_column IS NULL
to:
SELECT ... FROM table WHERE auto_increment_column == LAST_INSERT_ID()
This allows some ODBC programs (Delphi, Access) to retrieve
the newly inserted row to fetch the AUTO_INCREMENT
id.
DROP TABLE now waits for all users to free a table
before deleting it.
- Fixed small memory leak in the new connect protocol.
- New functions
BIN() , OCT() , HEX()
and CONV() for converting between different number
bases.
- Added function
SUBSTRING() with 2 arguments.
- If you created a table with a record length smaller than 5,
you couldn't delete rows from the table.
- Added optimization to remove const reference tables from
ORDER
BY and GROUP BY .
mysqld now automatically disables system locking
on Linux and Win32, and for systems that use MIT-pthreads. You
can force the use of locking with the --enable-locking
option.
- Added
--console option to mysqld ,
to force a console window (for error messages) when using Win32.
- Fixed table locks for Win32.
- Allow `$' in identifiers.
- Changed name of user-specific configuration file from `my.cnf'
to `.my.cnf' (Unix only).
- Added
DATE_ADD() and DATE_SUB() functions.
- Fixed a lock problem (bug in MySQL 3.22.1)
when closing temporary tables.
- Added missing
mysql_ping() to the client library.
- Added
--compress option to all MySQL
clients.
- Changed
byte to char in `mysql.h'
and `mysql_com.h'.
- Searching on multiple constant keys that matched more than 30%
of the rows didn't always use the best possible key.
- New functions
<< , >> ,
RPAD() and LPAD() .
- You can now save default options (like passwords) in a configuration
file (`my.cnf').
- Lots of small changes to get
ORDER BY to work when
no records are found when using fields that are not in GROUP
BY (MySQL extension).
- Added
--chroot option to mysqld , to
start mysqld in a chroot environment (by Nikki Chumakov
nikkic@cityline.ru).
- Trailing spaces are now ignored when comparing case-sensitive
strings; this should fix some problems with ODBC and flag 512!
- Fixed a core-dump bug in the range optimizer.
- Added
--one-thread option to mysqld ,
for debugging with LinuxThreads (or glibc ). (This
replaces the -T32 flag)
- Added
DROP TABLE IF EXISTS to prevent an error
from occurring if the table doesn't exist.
IF and EXISTS are now reserved words
(they would have to be sooner or later).
- Added lots of new options to
mysqldump .
- Server error messages are now in `mysqld_error.h'.
- The server/client protocol now supports compression.
- All bug fixes from MySQL 3.21.32.
- Added new C API function
mysql_ping() .
- Added new API functions
mysql_init() and mysql_options() .
You now MUST call mysql_init() before you call mysql_real_connect() .
You don't have to call mysql_init() if you only use
mysql_connect() .
- Added
mysql_options(...,MYSQL_OPT_CONNECT_TIMEOUT,...)
so you can set a timeout for connecting to a server.
- Added
--timeout option to mysqladmin ,
as a test of mysql_options() .
- Added
AFTER column and FIRST options
to ALTER TABLE ... ADD columns . This makes it possible
to add a new column at some specific location within a row in
an existing table.
WEEK() now takes an optional argument to allow
handling of weeks when the week starts on Monday (some European
countries). By default, WEEK() assumes the week starts
on Sunday.
TIME columns weren't stored properly (bug in MySQL
3.22.0).
UPDATE now returns information about how many rows
were matched and updated, and how many ``warnings'' occurred when
doing the update.
- Fixed incorrect result from
FORMAT(-100,2) .
ENUM and SET columns were compared
in binary (case-sensitive) fashion; changed to be case insensitive.
- New (backward compatible) connect protocol that allows you to
specify the database to use when connecting, to get much faster
connections to a specific database. The
mysql_real_connect()
call is changed to:
mysql_real_connect(MYSQL *mysql, const char *host, const char *user,
const char *passwd, const char *db, uint port,
const char *unix_socket, uint client_flag)
- Each connection is handled by its own thread, rather than by
the master
accept() thread. This fixes permanently
the telnet bug that was a topic on the mail list some time ago.
- All TCP/IP connections are now checked with backward resolution
of the hostname to get better security.
mysqld now
has a local hostname resolver cache so connections should actually
be faster than before, even with this feature.
- A site automatically will be blocked from future connections
if someone repeatedly connects with an ``improper header'' (like
when one uses telnet).
- You can now refer to tables in different databases with references
of the form
tbl_name@db_name or db_name.tbl_name .
This makes it possible to give a user read access to some tables
and write access to others simply by keeping them in different
databases!
- Added
--user option to mysqld , to
allow it to run as another Unix user (if it is started as the
Unix root user).
- Added caching of users and access rights (for faster access
rights checking)
- Normal users (not anonymous ones) can change their password
with
mysqladmin password '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 problem when sending
SIGHUP to mysqld ;
mysqld core dumped when starting from boot on some
systems.
- Fixed problem with losing a little memory for some connections.
DELETE FROM tbl_name without a WHERE
condition is now done the long way when you use LOCK TABLES
or if the table is in use, to avoid race conditions.
INSERT INTO TABLE (timestamp_column) VALUES (NULL);
didn't set timestamp.
- 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.
- Fixed a sign extension problem for the
TINYINT
type on Irix.
- Fixed problem with
LEFT("constant_string",function) .
- Fixed problem with
FIND_IN_SET() .
LEFT JOIN core dumped if the second table is used
with a constant WHERE/ON expression that uniquely
identifies one record.
- Fixed problems with
DATE_FORMAT() and incorrect
dates. DATE_FORMAT() now ignores '%'
to make it possible to extend it more easily in the future.
mysql now returns an exit code > 0 if the query
returned an error.
- Saving of command line history to file in
mysql
client. By Tommy Larsen tommy@mix.hive.no.
- Fixed problem with empty lines that were ignored in `mysql.cc'.
- Save the pid of the signal handler thread in the pid file instead
of the pid of the main thread.
- Added patch by tommy@valley.ne.jp
to support Japanese characters SJIS and UJIS.
- Changed
safe_mysqld to redirect startup messages
to 'hostname'.err instead of 'hostname'.log
to reclaim file space on mysqladmin refresh .
ENUM always had the first entry as default value.
ALTER TABLE wrote two entries to the update log.
sql_acc() now closes the mysql grant
tables after a reload to save table space and memory.
- Changed
LOAD DATA to use less memory with tables
and BLOB columns.
- Sorting on a function which made a division / 0 produced a wrong
set in some cases.
- Fixed
SELECT problem with LEFT() when
using the czech character set.
- Fixed problem in
isamchk ; it couldn't repair a
packed table in a very unusual case.
SELECT statements with & or |
(bit functions) failed on columns with NULL values.
- When comparing a field = field, where one of the fields was
a part key, only the length of the part key was compared.
LOCK TABLES + DELETE from tbl_name
never removed locks properly.
- Fixed problem when grouping on an
OR function.
- Fixed permission problem with
umask() and creating
new databases.
- Fixed permission problem on result file with
SELECT ...
INTO OUTFILE ...
- Fixed problem in range optimizer (core dump) for a very complex
query.
- Fixed problem when using
MIN(integer) or MAX(integer)
in GROUP BY .
- Fixed bug on Alpha when using integer keys. (Other keys worked
on Alpha).
- Fixed bug in
WEEK("XXXX-xx-01") .
- Fixed socket permission (clients couldn't connect to Unix socket
on Linux).
- Fixed bug in record caches; for some queries, you could get
Error from table handler: # on some operating systems.
- 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.)
FROM_DAYS(0) now returns "0000-00-00".
- In
DATE_FORMAT() , PM and AM were swapped for hours
00 and 12.
- Extended the default maximum key size to 256.
- Fixed bug when using
BLOB /TEXT in
GROUP BY with many tables.
- An
ENUM field that is not declared NOT NULL
has NULL as the default value. (Previously, the default
value was the first enumeration value.)
- Fixed bug in the join optimizer code when using many part keys
on the same key:
INDEX (Organization,Surname(35),Initials(35)) .
- Added some tests to the table order optimizer to get some cases
with
SELECT ... FROM many_tables much faster.
- Added a retry loop around
accept() to possibly
fix some problems on some Linux machines.
- Changed
typedef 'string' to typedef 'my_string'
for better portability.
- You can now kill threads that are waiting on a disk full condition.
- Fixed some problems with UDF functions.
- Added long options to
isamchk . Try isamchk
--help .
- Fixed a bug when using 8 bytes long (alpha);
filesort()
didn't work. Affects DISTINCT , ORDER BY
and GROUP BY on 64-bit processors.
- Dynamic loadable functions. Based on source from Alexis Mikhailov.
- You couldn't delete from a table if no one had done a
SELECT
on the table.
- Fixed problem with range optimizer with many
OR
operators on key parts inside each other.
- Recoded
MIN() and MAX() to work properly
with strings and HAVING .
- Changed default umask value for new files from
0664
to 0660 .
- Fixed problem with
LEFT JOIN and constant expressions
in the ON part.
- Added Italian error messages from brenno@dewinter.com.
configure now works better on OSF1 (tested on 4.0D).
- Added hooks to allow
LIKE optimization with international
character support.
- Upgraded
DBI to 0.93.
- 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
OR s
of key parts inside AND s.
- Added command
variables to mysqladmin .
- A lot of small changes to the binary releases.
- Fixed a bug in the new protocol from MySQL
3.21.20.
- Changed
ALTER TABLE to work with Win32 (Win32 can't
rename open files). Also fixed a couple of small bugs in the Win32
version.
- All standard MySQL clients are now ported to
MySQL-Win32.
- MySQL can now be started as a service on NT.
- Configure changes for some operating systems.
- Fixed optimizer bug when using
WHERE data_field = date_field2
AND date_field2 = constant .
- Added command
SHOW STATUS .
- Removed `manual.ps' from the source distribution to
make it smaller.
- Changed the maximum table name and column name lengths from
32 to 64.
- Aliases can now be of ``any'' length.
- Fixed
mysqladmin stat to return the right number
of queries.
- Changed protocol (downward compatible) to mark if a column has
the
AUTO_INCREMENT attribute or is a TIMESTAMP .
This is needed for the new Java driver.
- Added Hebrew sorting order by Zeev Suraski.
- Solaris 2.6: Fixed
configure bugs and increased
maximum table size from 2G to 4G.
- Upgraded
DBD to 1823. This version implements mysql_use_result
in DBD-Mysql .
- Benchmarks updated for empress (by Luuk).
- Fixed a case of slow range searching.
- Configure fixes (`Docs' directory).
- Added function
REVERSE() (by Zeev Suraski).
- Issue error message if client C functions are called in wrong
order.
- Added automatic reconnect to the `libmysql.c' library.
If a write command fails, an automatic reconnect is done.
- Small sort sets no longer use temporary files.
- Upgraded
DBI to 0.91.
- Fixed a couple of problems with
LEFT OUTER JOIN .
- Added
CROSS JOIN syntax. CROSS is
now a reserved word.
- Recoded
yacc /bison stack allocation
to be even safer and to allow MySQL to handle
even bigger expressions.
- Fixed a couple of problems with the update log.
ORDER BY was slow when used with key ranges.
- 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
BLOB s
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.
- Added ODBC 2.0 & 3.0 functions
POWER() , SPACE() ,
COT() , DEGREES() , RADIANS() ,
ROUND(2 arg) and TRUNCATE() .
- WARNING: INCOMPATIBLE CHANGE!!
LOCATE()
parameters were swapped according to ODBC standard. Fixed.
- Added function
TIME_TO_SEC() .
- In some cases, default values were not used for
NOT NULL
fields.
- Timestamp wasn't always updated properly in
UPDATE SET
... statements.
- Allow empty strings as default values for
BLOB
and TEXT , to be compatible with mysqldump .
- WARNING: INCOMPATIBLE CHANGE!!
mysqlperl
is now from Msql-Mysql-modules. This means that connect()
now takes host , database , user ,
password arguments! The old version took host ,
database , password , user .
- Allow
DATE '1997-01-01' , TIME '12:10:10'
and TIMESTAMP '1997-01-01 12:10:10' formats required
by ANSI SQL. WARNING: INCOMPATIBLE CHANGE!! This
has the unfortunate side-effect that you no longer can have columns
named DATE , TIME or TIMESTAMP .
:( Old columns can still be accessed through tablename.columnname !)
- Changed Makefiles to hopefully work better with BSD systems.
Also, `manual.dvi' is now included in the distribution
to avoid having stupid
make programs trying to rebuild
it.
readline library upgraded to version 2.1.
- A new sortorder german-1. That is a normal ISO-Latin1 with a
german sort order.
- Perl
DBI /DBD is now included in the
distribution. DBI is now the recommended way to connect
to MySQL from Perl.
- New portable benchmark suite with
DBD , with test
results from mSQL 2.0.3, MySQL,
PostgreSQL 6.2.1 and Solid server 2.2.
crash-me is now included with the benchmarks; This
is a Perl program designed to find as many limits as possible
in a SQL server. Tested with mSQL , PostgreSQL, Solid
and MySQL.
- Fixed bug in range-optimizer that crashed MySQL
on some queries.
- Table and column name completion for
mysql command
line tool, by Zeev Suraski and Andi Gutmans.
- Added new command
REPLACE that works like INSERT
but replaces conflicting records with the new record. REPLACE
INTO TABLE ... SELECT ... works also.
- Added new commands
CREATE DATABASE db_name and
DROP DATABASE db_name .
- Added
RENAME option to ALTER TABLE :
ALTER TABLE name RENAME AS new_name .
make_binary_distribution now includes `libgcc.a'
in `libmysqlclient.a'. This should make linking work
for people who don't have gcc .
- Changed
net_write() to my_net_write()
because of a name conflict with Sybase.
- New function
DAYOFWEEK()
compatible with ODBC.
- Stack checking and
bison memory overrun checking
to make MySQL safer with weird queries.
- Fixed a couple of small
configure problems on some
platforms.
- Ported to SCO Openserver 5.0.4 with FSU Pthreads.
- HP-UX 10.20 should work.
- Added new function
DATE_FORMAT() .
- Added
NOT IN .
- Added automatic removal of 'ODBC function conversions':
{fn
now() }
- Handle ODBC 2.50.3 option flags.
- Fixed comparison of
DATE and TIME
values with NULL .
- Changed language name from germany to german to be consistent
with the other language names.
- Fixed sorting problem on functions returning a
FLOAT .
Previously, the values were converted to INT s before
sorting.
- Fixed slow sorting when sorting on key field when using
key_column=constant .
- Sorting on calculated
DOUBLE values sorted on integer
results instead.
mysql no longer needs a database argument.
- Changed the place where
HAVING should be. According
to ANSI, it should be after GROUP BY but before ORDER
BY . MySQL 3.20 incorrectly had it last.
- Added Sybase command
USE DATABASE to start using
another database.
- Added automatic adjusting of number of connections and table
cache size if the maximum number of files that can be opened is
less than needed. This should fix that
mysqld doesn't
crash even if you haven't done a ulimit -n 256 before
starting mysqld .
- Added lots of limit checks to make it safer when running with
too little memory or when doing weird queries.
- 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.
- Fixed
ftruncate() call in MIT-pthreads. This made
isamchk destroy the `.ISM' files on (Free)BSD
2.x systems.
- Fixed broken
__P_ patch in MIT-pthreads.
- Many memory overrun checks. All string functions now return
NULL if the returned string should be longer than
max_allowed_packet bytes.
- Changed the name of the
INTERVAL type to ENUM ,
because INTERVAL is used in ANSI SQL.
- In some cases, doing a
JOIN + GROUP
+ INTO OUTFILE , the result wasn't grouped.
LIKE with '_' as last character didn't
work. Fixed.
- Added extended ANSI SQL
TRIM() function.
- Added
CURTIME() .
- Added
ENCRYPT() function by Zeev Suraski.
- Fixed better
FOREIGN KEY syntax skipping. New reserved
words: MATCH , FULL , PARTIAL .
mysqld now allows IP number and hostname to the
--bind-address option.
- Added
SET OPTION CHARACTER SET cp1251_koi8 to enable
conversions of data to/from cp1251_koi8.
- Lots of changes for Win95 port. In theory, this version should
now be easily portable to Win95.
- Changed the
CREATE COLUMN syntax of NOT NULL
columns to be after the DEFAULT value, as specified
in the ANSI SQL standard. This will make mysqldump
with NOT NULL and default values incompatible with
MySQL 3.20.
- Added many function name aliases so the functions can be used
with ODBC or ANSI SQL92 syntax.
- Fixed syntax of
ALTER TABLE tbl_name ALTER COLUMN col_name
SET DEFAULT NULL .
- Added
CHAR and BIT as synonyms for
CHAR(1) .
- Fixed core dump when updating as a user who has only select
privilege.
INSERT ... SELECT ... GROUP BY didn't work in some
cases. An Invalid use of group function error occurred.
- When using
LIMIT , SELECT now always
uses keys instead of record scan. This will give better performance
on SELECT and a WHERE that matches many
rows.
- Added Russian error messages.
- Configure changes.
- MySQL now works with the new thread library
on BSD/OS 3.0.
- Added new group functions
BIT_OR() and BIT_AND() .
- Added compatibility functions
CHECK and REFERENCES .
CHECK is now a reserved word.
- Added
ALL option to GRANT for better
compatibility. (GRANT is still a dummy function.)
- Added partly-translated dutch messages.
- Fixed bug in
ORDER BY and GROUP BY
with NULL columns.
- Added function
last_insert_id() to retrieve last
AUTO_INCREMENT value. This is intended for clients
to ODBC that can't use the mysql_insert_id() API
function, but can be used by any client.
- Added
--flush-logs option to mysqladmin .
- Added command
STATUS to mysql .
- Fixed problem with
ORDER BY /GROUP BY
because of bug in gcc .
- Fixed problem with
INSERT ... SELECT ... GROUP BY .
- New
mysqlaccess .
CREATE now supports all ODBC types and the mSQL
TEXT type. All ODBC 2.5 functions are also supported
(added REPEAT ). This provides better portability.
- Added text types
TINYTEXT , TEXT , MEDIUMTEXT
and LONGTEXT . These are actually BLOB types,
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.
- Added
--enable-unix-socket=pathname option to configure .
- Fixed a couple of portability problems with include files.
- Fixed bug in range calculation that could return empty set when
searching on multiple key with only one entry (very rare).
- Most things ported to FSU Pthreads, which should allow MySQL
to run on SCO. See section 4.11.13
SCO notes.
- Works now in Solaris 2.6.
- Added handling of calculation of
SUM() functions.
For example, you can now use SUM(column)/COUNT(column) .
- Added handling of trigometric functions:
PI() ,
ACOS() , ASIN() , ATAN() ,
COS() , SIN() and TAN() .
- New languages: norwegian, norwegian-ny and portuguese.
- Fixed parameter bug in
net_print() in `procedure.cc'.
- Fixed a couple of memory leaks.
- Now allow also the old
SELECT ... INTO OUTFILE
syntax.
- Fixed bug with
GROUP BY and SELECT
on key with many values.
mysql_fetch_lengths() sometimes returned incorrect
lengths when you used mysql_use_result() . This affected
at least some cases of mysqldump --quick .
- Fixed bug in optimization of
WHERE const op field .
- Fixed problem when sorting on
NULL fields.
- Fixed a couple of 64-bit (Alpha) problems.
- Added
--pid-file=# option to mysqld .
- Added date formatting to
FROM_UNIXTIME() , originally
by Zeev Suraski.
- Fixed bug in
BETWEEN in range optimizer (Did only
test = of the first argument).
- Added machine-dependent files for MIT-pthreads i386-SCO. There
is probably more to do to get this to work on SCO 3.5.
- 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.
- Fixed more portability issues (incorrect
sigwait
and sigset defines).
configure should now be able to detect the last
argument to accept() .
- Should now work with FreeBSD 3.0 if used with `FreeBSD-3.0-libc_r-1.0.diff',
which can be found at http://www.mysql.com/Download/Patches.
- Added new option
-O tmp_table_size=# to mysqld .
- New function
FROM_UNIXTIME(timestamp) which returns
a date string in 'YYYY-MM-DD HH:MM:DD' format.
- New function
SEC_TO_TIME(seconds) which returns
a string in 'HH:MM:SS' format.
- New function
SUBSTRING_INDEX() , originally by Zeev
Suraski.
- Should now configure and compile on OSF1 4.0 with the DEC compiler.
- Configuration and compilation on BSD/OS 3.0 works, but due to
some bugs in BSD/OS 3.0,
mysqld doesn't work on it
yet.
- Configuration and compilation on FreeBSD 3.0 works, but I couldn't
get
pthread_create to work.
- 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.
- The range optimizer is coded, but only 85% tested. It can be
enabled with
--new , but it crashes core a lot yet...
- More portable. Should compile on AIX and alpha-digital. At least
the
isam library should be relatively 64-bit clean.
- New
isamchk which can detect and fix more problems.
- New options for
isamlog .
- Using new version of Automake.
- Many small portability changes (from the AIX and alpha-digital
port) Better checking of pthread(s) library.
- czech error messages by snajdr@pvt.net.
- Decreased size of some buffers to get fewer problems on systems
with little memory. Also
- added more checks to handle ``out of memory'' problems.
mysqladmin : you can now do mysqladmin kill
5,6,7,8 to kill multiple threads.
- When the maximum connection limit is reached, one extra connection
by a user with the PROCESS_ACL privilege is granted.
- Added
-O backlog=# option to mysqld .
- Increased maximum packet size from 512K to 1024K for client.
- Almost all of the function code is now tested in the internal
test suite.
ALTER TABLE now returns warnings from field conversions.
- Port changed to 3306 (got it reserved from ISI).
- Added a fix for Visual FoxBase so that any schema name from
a table specification is automatically removed.
- New function
ASCII() .
- Removed function
BETWEEN(a,b,c) . Use the standard
ANSI synax instead: expr BETWEEN expr AND expr .
- MySQL no longer has to use an extra temporary
table when sorting on functions or
SUM() functions.
- Fixed bug that you couldn't use
tbl_name.field_name
in UPDATE .
- Fixed
SELECT DISTINCT when using 'hidden group'.
For example:
mysql> SELECT DISTINCT MOD(some_field,10) FROM test
GROUP BY some_field;
Note: some_field is normally in the SELECT
part. ANSI SQL should require it.
Changes from 3.20.18 to 3.20.32b are not documented here since
the 3.21 release branched here. And the relevant changes are also
documented as changes to the 3.21 version.
- 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) .
- More changes in MIT-pthreads to get them safer. Fixed also some
link bugs at least in SunOS.
- Changed
mysqld to work around a bug in MIT-pthreads.
This makes multiple small SELECT operations 20 times
faster. Now lock_test.pl should work.
- Added
mysql_FetchHash(handle) to mysqlperl .
- The
mysqlbug script is now distributed built to
allow for reporting bugs that appear during the build with it.
- Changed `libmysql.c' to prefer
getpwuid()
instead of cuserid() .
- Fixed bug in
SELECT optimizer when using many tables
with the same column used as key to different tables.
- Added new latin2 and Russian KOI8 character tables.
- Added support for a dummy
GRANT command to satisfy
Powerbuilder.
- Fixed fatal bug
packets out of order when using
MIT-pthreads.
- Removed possible loop when a thread waits for command from client
and
fcntl() fails. Thanks to Mike Bretz for finding
this bug.
- Changed alarm loop in `mysqld.cc' because shutdown
didn't always succeed in Linux.
- Removed use of
termbits from `mysql.cc'.
This conflicted with glibc 2.0.
- Fixed some syntax errors for at least BSD and Linux.
- Fixed bug when doing a
SELECT as superuser without
a database.
- Fixed bug when doing
SELECT with group calculation
to outfile.
- If one gives
-p or --password option
to mysql without an argument, the user is solicited
for the password from the tty.
- Added default password from
MYSQL_PWD (by Elmar
Haneke).
- Added command
kill to mysqladmin to
kill a specific MySQL thread.
- Sometimes when doing a reconnect on a down connection this succeeded
first on second try.
- Fixed adding an
AUTO_INCREMENT key with ALTER_TABLE .
AVG() gave too small value on some SELECT s
with GROUP BY and ORDER BY .
- Added new
DATETIME type (by Giovanni Maruzzelli
- Fixed that define
DONT_USE_DEFAULT_FIELDS works.
- Changed to use a thread to handle alarms instead of signals
on Solaris to avoid race conditions.
- Fixed default length of signed numbers. (George Harvey
- Allow anything for
CREATE INDEX .
- Add prezeros when packing numbers to
DATE , TIME
and TIMESTAMP .
- Fixed a bug in
OR of multiple tables (gave empty
set).
- Added many patches to MIT-pthreads. This fixes at least one
lookup bug.
- Added ANSI SQL94
DATE and TIME types.
- Fixed bug in
SELECT with AND -OR
levels.
- Added support for Slovenian characters. The `Contrib'
directory contains source and instructions for adding other character
sets.
- Fixed bug with
LIMIT and ORDER BY .
- Allow
ORDER BY and GROUP BY on items
that aren't in the SELECT list. (Thanks to Wim Bonis
bonis@kiss.de, for pointing
this out.)
- Allow setting of timestamp values in
INSERT .
- Fixed bug with
SELECT ... WHERE ... = NULL .
- Added changes for
glibc 2.0. To get glibc
to work, you should add the `gibc-2.0-sigwait-patch'
before compiling glibc .
- Fixed bug in
ALTER TABLE when changing a NOT
NULL field to allow NULL values.
- Added some ANSI92 synonyms as field types to
CREATE TABLE .
CREATE TABLE now allows FLOAT(4) and
FLOAT(8) to mean FLOAT and DOUBLE .
- New utility program
mysqlaccess by Yves.Carlier@rug.ac.be.
This program shows the access rights for a specific user and the
grant rows that determine this grant.
- Added
WHERE const op field (by bonis@kiss.de).
- When using
SELECT ... INTO OUTFILE , all temporary
tables are ISAM instead of HEAP to allow big dumps.
- Changed date functions to be string functions. This fixed some
``funny'' side effects when sorting on dates.
- Extended
ALTER TABLE according to SQL92.
- Some minor compability changes.
- Added
--port and --socket options
to all utility programs and mysqld .
- Fixed MIT-pthreads
readdir_r() . Now mysqladmin
create database and mysqladmin drop database
should work.
- Changed MIT-pthreads to use our
tempnam() . This
should fix the ``sort aborted'' bug.
- Added sync of records count in
sql_update . This
fixed slow updates on first connection. (Thanks to Vaclav Bittner
for the test.)
- New insert type:
INSERT INTO ... SELECT ...
MEDIUMBLOB fixed.
- Fixed bug in
ALTER TABLE and BLOB s.
SELECT ... INTO OUTFILE now creates the file in
the current database directory.
DROP TABLE now can take a list of tables.
- Oracle synonym
DESCRIBE (DESC ).
- Changes to
make_binary_distribution .
- Added some comments to installation instructions about
configure 's
C++ link test.
- Added
--without-perl option to configure .
- Lots of small portability changes.
ALTER TABLE didn't copy null bit. As a result,
fields that were allowed to have NULL values were
always NULL .
CREATE didn't take numbers as DEFAULT .
- Some compatibility changes for SunOS.
- Removed `config.cache' from old distribution.
- Fixed bug with
ALTER TABLE and multi-part keys.
- New commands:
ALTER TABLE , SELECT ... INTO
OUTFILE and LOAD DATA INFILE .
- New function:
NOW() .
- Added new field file_priv to
mysql/user
table.
- New script
add_file_priv which adds the new field
file_priv to the user table. This
script must be executed if you want to use the new SELECT
... INTO and LOAD DATA INFILE ... commands
with a version of MySQL earlier than 3.20.7.
- Fixed bug in locking code, which made
lock_test.pl
test fail.
- New files `NEW' and `BUGS'.
- Changed `select_test.c' and `insert_test.c'
to include `config.h'.
- Added command
status to mysqladmin
for short logging.
- Increased maximum number of keys to 16 and maximum number of
key parts to 15.
- Use of sub keys. A key may now be a prefix of a string field.
- Added
-k option to mysqlshow , to get
key information for a table.
- Added long options to
mysqldump .
- Portable to more systems because of MIT-pthreads, which will
be used automatically if
configure cannot find a
-lpthreads library.
- Added GNU-style long options to almost all programs. Test with
program --help .
- Some shared library support for Linux.
- The FAQ is now in `.texi' format and is available in
`.html', `.txt' and `.ps' formats.
- Added new SQL function
RAND([init]) .
- Changed
sql_lex to handle \0 unquoted,
but the client can't send the query through the C API, because
it takes a str pointer. You must use mysql_real_query()
to send the query.
- Added API function
mysql_get_client_info() .
mysqld now uses the N_MAX_KEY_LENGTH
from `nisam.h' as the maximum allowed key length.
- The following now works:
mysql> SELECT filter_nr,filter_nr FROM filter ORDER BY filter_nr;
Previously, this resulted in the error: Column: 'filter_nr'
in order clause is ambiguous .
mysql now outputs '\0' , '\t' ,
'\n' and '\\' when encountering ASCII
0, tab, newline or '\' while writing tab-separated
output. This is to allow printing of binary data in a portable
format. To get the old behavior, use -r (or --raw ).
- Added german error messages (60 of 80 error messages translated).
- Added new API function
mysql_fetch_lengths(MYSQL_RES *) ,
which returns an array of of column lengths (of type uint ).
- Fixed bug with
IS NULL in WHERE clause.
- Changed the optimizer a little to get better results when searching
on a key part.
- Added
SELECT option STRAIGHT_JOIN
to tell the optimizer that it should join tables in the given
order.
- Added support for comments starting with
'--' in
`mysql.cc' (Postgres syntax).
- You can have
SELECT expressions and table columns
in a SELECT which are not used in the group part.
This makes it efficient to implement lookups. The column that
is used should be a constant for each group because the value
is calculated only once for the first row that is found for a
group.
mysql> SELECT id,lookup.text,sum(*) FROM test,lookup
WHERE test.id=lookup.id GROUP BY id;
- Fixed bug in
SUM(function) (could cause a core
dump).
- Changed
AUTO_INCREMENT placement in the SQL query:
INSERT into table (auto_field) values (0);
inserted 0, but it should insert an AUTO_INCREMENT
value.
- `mysqlshow.c': Added number of records in table. Had
to change the client code a little to fix this.
mysql now allows doubled '' or ""
within strings for embedded ' or " .
- New math functions:
EXP() , LOG() ,
SQRT() , ROUND() , CEILING() .
- 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 recreating tables.
- Some parser bugs from 3.19.5 (
BLOB and TIMESTAMP )
are corrected. TIMESTAMP now returns different date
information depending on its create length.
- Changed parser to allow a database, table or field name to start
with a number or
'_' .
- All old C code from Unireg changed to C++ and cleaned up. This
makes the daemon a little smaller and easier to understand.
- A lot of small bug fixes done.
- New `INSTALL' files (not final version) and some info
regarding porting.
- Some new functions, some more optimization on joins.
- Should now compile clean on Linux (2.0.x).
- Added functions
DATABASE() , USER() ,
POW() , LOG10() (needed for ODBC).
- In a
WHERE with an ORDER BY on fields
from only one table, the table is now preferred as first table
in a multi-join.
HAVING and IS NULL or IS NOT
NULL now works.
- A group on one column and a sort on a group function (
SUM() ,
AVG() ...) didn't work together. Fixed.
mysqldump : Didn't send password to server.
- Fixed horrible locking bug when inserting in one thread and
reading in another thread.
- Fixed one-off decimal bug. 1.00 was output as 1.0.
- Added attribute
'Locked' to process list as info
if a query is locked by another query.
- Fixed full magic timestamp. Timestamp length may now be 14,
12, 10, 8, 6, 4 or 2 bytes.
- Sort on some numeric functions could sort incorrectly on last
number.
IF(arg,syntax_error,syntax_error) crashed.
- Added functions
CEILING() , ROUND() ,
EXP() , LOG() and SQRT() .
- Enhanced
BETWEEN to handle strings.
- Fixed
SELECT with grouping on BLOB
columns not to return incorrect BLOB info. Grouping,
sorting and distinct on BLOB columns will not yet
work as expected (probably it will group/sort by the first 7 characters
in the BLOB ). Grouping on formulas with a fixed string
size (use MID() on a BLOB ) should work.
- When doing a full join (no direct keys) on multiple tables with
BLOB fields, the BLOB was garbage on
output.
- Fixed
DISTINCT with calculated columns.
Go to the first, previous,
next, last
section, table of contents.
|