This appendix lists the changes from version to version in the MySQL source code.
新しい変更を MySQL に施すと同時に、マニュアルを変更することに注意してください。 もしマニュアルにかかれているのに MySQL download page に 新しいバージョンの MySQL が見つからない場合、そのバージョンはまだリリースされていません!
We have now started to work on MySQL 4.0. We will update this section as we add new features, so that others can follow our development.
Our TODO section contains what we plan to have in 4.0. 「H.1 Things that should be in 4.0」節参照.
SQL_CALC_FOUND_ROWS and FOUND_ROWS(). This makes it
possible to know how many rows a query would have returned
without a LIMIT clause.
SHOW OPEN TABLES.
SELECT expression LIMIT ....
IDENTITY as a synonym for AUTO_INCREMENT (like Sybase).
ORDER BY syntax to UPDATE and DELETE.
SELECT DISTINCT * from table_name ORDER by key_part1 LIMIT #
The 3.23 release has several major features that are not present in previous versions. We have added three new table types:
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 doesn'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 uses this code as the rest of the code and because of this we are not yet 100% confident in this code.
REPLACE() when using the ujis character set.
--skip-stack-trace to mysqld.
CREATE TEMPORARY now works with InnoDB tables.
InnoDB now promotes sub keys to whole keys.
CONCURRENT to LOAD DATA.
max_allowed_packet is to low to
read a very long log event from the master
SELECT DISTINCT ... HAVING.
SHOW CREATE TABLE now returns TEMPORARY for temporary tables.
Rows_examined to slow query log.
WHERE that didn't match any rows.
mysqlcheck.
CHECK,
REPAIR, OPTIMIZE.
SELECT * FROM table_name,table_name2 ... ORDER BY key_part1 LIMIT #
will use index on key_part1 instead of filesort.
LOCK TABLE to_table WRITE,...; INSERT INTO to_table... SELECT ...
when to_table was empty.
LOCK TABLE and BDB tables.
MATCH in HAVING clause.
HEAP tables with LIKE.
--mysql-version to safe_mysqld
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!
CHAR(255) NULL columns.
master-host is not set, as
long as server-id is set and valid master.info is present
SET SQL_SLAVE_SKIP_COUNTER=1; SLAVE START after a manual sanity
check/correction of data integrity.
REGEXP() on 64-bit machines.
UPDATE and DELETE with WHERE unique_key_part IS NULL
didn't update/delete all rows.
INSERT DELAYED for tables that support transactions.
TEXT/BLOB column
with wrong date format.
ALTER TABLE and LOAD DATA INFILE that disabled
key-sorting. These commands should now be faster in most cases.
FLUSH or REPAIR) would not use indexes for the
next query.
ALTER TABLE to Innobase tables on FreeBSD.
mysqld variables myisam_max_sort_file_size and
myisam_max_extra_sort_file_size.
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 !
--skip-safemalloc option to mysqld.
mysqld is run
as root.
FLUSH TABLES as this will cause problems
with temporary tables.
latin1
and another problem when using many columns.
DISTINCT and summary functions.
SET TRANSACTION ISOLATION LEVEL ...
SELECT ... FOR UPDATE.
MySQL
was compiled without transaction support.
UPDATE where keys weren't always used to find the
rows to be updated.
CONCAT_WS() where it returned wrong results.
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).
ORDER BY.
CLIENT_TRANSACTIONS.
SHOW VARIABLES when using INNOBASE tables.
SELECT DISTINCT didn't work.
SHOW ANALYZE for small tables.
INNOBASE support
to be compiled.
INNOBASE table handler and the BDB table handler
to the MySQL source distribution.
GEMINI tables.
INSERT DELAYED that caused threads to hang when
inserting NULL into an AUTO_INCREMENT column.
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.
LOAD DATA INFILE to allow numeric values to be read into
ENUM and SET columns.
ALTER TABLE ... ORDER BY.
max_user_connections to mysqld.
max_allowed_packet, not the
arbitrary limit of 4 MB.
= in argument to --set-variable.
Waiting for table.
SHOW CREATE TABLE now dumps the UNION() for MERGE tables.
ALTER TABLE now remembers the old UNION() definition.
BDB table handler that occurred when using an index
on multi-part key where a key part may be NULL.
MAX() optimization on sub-key for BDB tables.
BDB
tables and BLOB or TEXT fields when joining many tables.
BDB tables and TEXT columns.
BLOB key where a const row wasn't found.
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.
--skip-gemini, --skip-bdb and
--skip-innobase to mysqld even if these databases are not
compiled in mysqld.
GROUP BY ... DESC.
SET code, when one ran SET @foo=bar,
where bar is a column reference, an error was not properly generated.
--character-sets-dir to myisampack.
REPAIR TABLE ... EXTENDED.
GROUP BY on an alias,
where the alias was the same as an existing column name.
SEQUENCE() as an example UDF function.
mysql_install_db to use BINARY for CHAR
columns in the privilege tables.
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.
MyISAM tables when a BLOB was
first part of a multi-part key.
CASE didn't work with GROUP BY.
--sort-recover to myisamchk.
myisamchk -S and OPTIMIZE TABLE now work on Windows.
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;
libmysqlclient library.
Fixed bug in handling STOP event after ROTATE event in
replication.
DROP DATABASE.
Table_locks_immediate and Table_locks_waited status
variables.
master.info. This fixes a bug introduced in 3.23.32.
SET SQL_SLAVE_SKIP_COUNTER=n command to recover from
replication glitches without a full database copy.
max_binlog_size variable; the binary log will be rotated
automatically when the size crosses the limit.
Last_error, Last_errno, and Slave_skip_counter to
SHOW SLAVE STATUS.
MASTER_POS_WAIT() function.
SIGILL, and SIGBUS in addition to
SIGSEGV.
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.
MERGE tables on Windows.
BACKUP, RESTORE, CHECK, REPAIR, and
ANALYZE TABLE.
FULL to SHOW COLUMNS. Now we show the
privilege list for the columns only if this option is given.
SHOW LOGS when there weren't any BDB logs.
mysql_list_fields(). This is
to keep this code compatible with SHOW FIELDS.
MERGE tables didn't work on Windows.
SET PASSWORD=... on Windows.
TRIM("foo" from "foo") didn't return an empty string.
--with-version-suffix to configure.
mysql_close() を実行しないで接続を中断したときに
コアを吐くのを修正した。3.23.31 でエンバグした。
RESTORE TABLE when trying to restore from a non-existant
directory.
SET PASSWORD.
MASTER_POS_WAIT().
HAVING on an empty table could produce one result row when
it shouldn't.
HEAP tables on Windows.
SHOW TABLE STATUS didn't show correct average row length for tables
larger than 4G.
CHECK TABLE ... EXTENDED didn't check row links for fixed size tables.
MEDIUM to CHECK TABLE.
DECIMAL() keys on negative numbers.
HOUR() (and some other TIME functions) on a CHAR column
always returned NULL.
setrlimit() on Linux to get
-O --open-files-limit=# to work on Linux.
mysqld variable: bdb_version.
SELECT ... FROM t1 LEFT JOIN t2 ON (t1.a=t2.a) WHERE t1.a=t2.aIn this case the test in the
WHERE clause was wrongly optimized away.
MyISAM when deleting keys with possible NULL
values, but the first key-column was not a prefix-compressed text column.
mysql.server to read the mysql.server option section
instead of mysql_server.
safe_mysqld and mysql.server to also read the
server option section.
Threads_created status variable to mysqld.
SHOW OPEN TABLES command.
myisamdump works against old mysqld servers.
myisamchk -k# so that it works again.
LOCK TABLES will now automatically start a new transaction.
BDB tables to not use internal subtransactions and reuse
open files to get more speed.
--mysqld=# to safe_mysqld.
--fields-*-by and
--lines-terminated-by options to mysqldump and
mysqlimport. By Paul DuBois.
--safe-show-database to mysqld.
have_bdb, have_gemini, have_innobase,
have_raid and have_ssl to SHOW VARIABLES to make it
easy to test for supported extensions.
--open-files-limit to mysqld.
--open-files to --open-files-limit in
safe_mysqld.
HEAP tables
that had many keys.
--bdb-no-sync works.
--bdb-recover to --bdb-no-recover as recover should
be on by default.
--skip-networking on Debian Linux.
UNOPENED in error messages.
SHOW LOGS queries.
<=> operator.
REPLACE with BDB tables.
LPAD() and RPAD() will shorten the result string if it's longer
than the length argument.
SHOW LOGS command.
PRIMARY keys first, followed by
UNIQUE keys.
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.
mysqld to report the
hostname as '' in some error messages.
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.
bdb_lock_max to bdb_max_lock.
auto_increment on sub-fields for BDB tables.
ANALYZE of BDB tables.
ROLLBACK when you have updated a non-transactional table
you will get an error as a warning.
--bdb-shared-data to mysqld.
Slave_open_temp_tables.
binlog_cache_size and max_binlog_cache_size to
mysqld.
DROP TABLE, RENAME TABLE, CREATE INDEX and
DROP INDEX are now transaction endpoints.
DROP DATABASE on a symbolic linked database, both
the link and the original database is deleted.
DROP DATABASE works on OS/2.
SELECT DISTINCT ... table1 LEFT JOIN
table2 ... when table2 was empty.
--abort-slave-event-count and
--disconnect-slave-event-count options to mysqld for
debugging and testing of replication.
SHOW KEYS now shows whether or not key is FULLTEXT.
mysqld processes.
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.
FULLTEXT indexes in one table.
REPAIR/OPTIMIZE.
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.
mi_create() to use less stack space.
MATCH when used
with UNIQUE key.
crash-me and the MySQL benchmarks to also work
with FrontBase.
RESTRICT and CASCADE after DROP TABLE to make
porting easier.
--slow-log.
connect_timeout to mysql and mysqladmin.
connect_timeout as an alias for timeout for option files
read by mysql_options().
--pager[=...], --no-pager,
--tee=... and --no-tee to the mysql client. The
new corresponding interactive commands are pager, nopager,
tee and notee. 「15.5 コマンドラインツール ( mysql )」節参照, mysql --help and the
interactive help for more information.
MyISAM table failed.
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.
options_files with mysql_options() the
return-found-rows option was ignored.
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.
--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.
LEFT JOIN which caused all columns in a reference
table to be NULL.
NATURAL JOIN without keys.
TEXT or BLOB.
DROP of temporary tables wasn't stored in the update/binary log.
SELECT DISTINCT * ... LIMIT # only returned one row.
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)
--skip-networking now works properly on NT.
ISAM tables when a row with a length
of more than 65K was shortened by a single byte.
MyISAM when running multiple updating processes on
the same table.
FLUSH TABLE tablename.
--replicate-ignore-table, --replicate-do-table,
--replicate-wild-ignore-table, --replicate-wild-do-table.
IO_CACHE mechanism instead of
FILE to avoid OS problems when there are many files open.
--open-files and --timezone to safe_mysqld.
CREATE TEMPORARY TABLE ... SELECT ....
CREATE TABLE ... SELECT NULL.
large_file_support,net_read_timeout,
net_write_timeout and query_buffer_size to SHOW VARIABLES.
created_tmp_files and sort_merge_passes
to SHOW STATUS.
FOREIGN KEY definition.
TRUNCATE table_name as a synonym for
DELETE FROM table_name.
bdb_lock_max to mysqld.
mysql_connect() now aborts on Linux if the server doesn't answer in
timeout seconds.
SLAVE START did not work if you started with
--skip-slave-start and had not explicitly run CHANGE MASTER TO.
SHOW MASTER STATUS to be consistent with
SHOW SLAVE STATUS. (It now has no directory in the log name.)
PURGE MASTER LOGS TO.
SHOW MASTER LOGS.
--safemalloc-mem-limit option to mysqld to simulate memory
shortage when compiled --with-debug=full.
SHOW SLAVE STATUS was using an uninitialized mutex if the slave had
not been started yet.
ELT() and MAKE_SET() when the query used
a temporary table.
CHANGE MASTER TO without specifying MASTER_LOG_POS would
set it to 0 instead of 4 and hit the magic number in the master binlog.
ALTER TABLE ... ORDER BY ... syntax added. This will create the
new table with the rows in a specific order.
SHOW CREATE when using AUTO_INCREMENT columns.
mit-pthreads.
<> to work properly with NULL.
SUBSTRING_INDEX() and REPLACE().
(Patch by Alexander Igonitchev)
CREATE TEMPORARY TABLE IF NOT EXISTS not to give an error
if the table exists.
PRIMARY KEY in a BDB table, a hidden
PRIMARY KEY will be created.
LEFT JOIN in some cases preferred a full table scan when there was
no WHERE clause.
--log-slow-queries, don't count the time waiting for a lock.
MyISAM tables if you start mysqld with
--myisam-recover.
TYPE= keyword from CHECK and
REPAIR. Allow CHECK options to be combined. (You can still
use TYPE= but this usage is deprecated.)
--replicate-rewrite-db option to mysqld.
--skip-slave-start option to mysqld.
INSERT INTO foo(some_key)
values (1),(1)) erroneously terminated the slave thread.
DISTINCT is only used on columns
from some of the tables.
SHOW GRANTS didn't always show all column grants.
--default-extra-file=# to all MySQL clients.
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.
FULLTEXT index when inserting a NULL column.
mkstemp() instead of tempnam(). Based
on a patch from John Jones.
databasename works as second argument to mysqlhotcopy.
UMASK and UMASK_DIR can now be specified in octal.
RIGHT JOIN. This makes RIGHT a reserved word.
@@IDENTITY as a synonym for LAST_INSERT_ID().
(This is for Visual Basic compatibility.)
myisamchk and REPAIR when using FULLTEXT
index.
LOAD DATA INFILE now works with FIFOs.
(Patch by Toni L. Harbaugh-Blackford.)
FLUSH LOGS broke replication if you specified a log name with an
explicit extension as the value of the log-bin option.
MyISAM with packed multi-part keys.
CHECK TABLE on Windows.
FULLTEXT index always used the koi8_ukr
character set.
CHECK TABLE.
MyISAM repair/reindex code didn't use the --tempdir
option for its temporary files.
BACKUP TABLE/RESTORE TABLE.
CHANGE MASTER TO when the slave did not have
the master to start with.
Time in the processlist for Connect of
the slave thread.
FLUSH MASTER if you didn't specify
a filename argument to --log-bin.
--memlock option to mysqld to lock mysqld
in memory on systems with the mlockall() call (like in Solaris).
HEAP tables didn't use keys properly. (Bug from 3.23.23.)
MERGE tables (keys, mapping, creation,
documentation...). 「8.2 MERGE Tables」節参照.
mysqldump from 3.23 which caused some CHAR columns
not to be quoted.
analyze, check, optimize and repair code.
OPTIMIZE TABLE is now mapped to REPAIR with statistics and
sorting of the index tree. This means that for the moment it only
works on MyISAM tables.
ORDER BY bug with BDB tables.
mysqld couldn't remove the `.pid' file
under Windows.
--log-isam to log MyISAM tables instead of isam
tables.
CHECK TABLE to work on Windows.
pwrite() safe on Windows.
mysqld variable created_tmp_disk_tables.
TIMESTAMP(X) columns, MySQL now reports columns with X
other than 14 or 8 to be strings.
CHAR columns that may have characters with ASCII
values greater than 128 that was created or modified with 3.23.22 must
be repaired!
REPAIR TABLE or myisamchk before use!
--core-file to mysqld to get a core file on
Linux if mysqld dies on the SIGSEGV signal.
mysql は、デフォルトで
--no-named-commands (-g) オプションで起動されるようになった。
このオプションは --enable-named-commands (-G) で無効にできる。
これはある場合に非互換の問題を引き起こすでしょう。たとえば、セミコロンなしで
named コマンドを使用している SQL スクリプトなど!
Long format commands
still work from the first line.
DROP TABLE statements at
the same time.
LEFT JOIN on an
empty table.
mysqld with incorrect options.
free() bug in mysqlimport.
MyISAM index handling of
DECIMAL/NUMERIC keys.
MyISAM tables; In some contexts,
usage of MIN(key_part) or MAX(key_part) returned an empty set.
mysqlhotcopy to use the new FLUSH TABLES table_list
syntax. Only tables which are being backed up are flushed now.
--enable-thread-safe-client の振る舞いを変更。
非スレッド (-lmysqlclient) とスレッド (-lmysqlclient_r) ライブラリ
の両方が作成されるため。
今までスレッド化された -lmysqlclient をリンクしていた場合には、
今後、libmysqlclient_r のリンクが必要となる。
RENAME command.
COUNT(DISTINCT ...) は NULL のエントリを数えない。
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.
BLOB フィールドにデフォルト値を定義した場合にクラッシュしていたのを修正。
DATE_ADD/DATE_SUB が date でなく datetime を返していたバグを修正。
***DEAD*** in SHOW PROCESSLIST.
pthread_rwlock_rdlock code.
SELECT on part keys works with BDB tables.
INSERT INTO bdb_table ... SELECT to work with BDB tables.
CHECK 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.
CHECK, ANALYZE,
REPAIR and SHOW CREATE commands.
CHANGE MASTER TO コマンドの追加。
FAST, QUICK EXTENDED check types to
CHECK TABLES.
myisamchk so that --fast and
--check-changed-tables are also honored with --sort-index and
--analyze.
LOAD TABLE FROM MASTER がインデックスを再構築している間にテーブルを
ロックしなかったバグを修正。
LOAD DATA INFILE を
行うと、レプリケーションを壊していたのを修正。
SHOW SLAVE STATUS and SHOW MASTER STATUS.
SLAVE STOP now will not return until the slave thread actually exits.
MATCH 関数を利用した全テキスト検索と FULLTEXT インデックスの追加。
(MyISAM でのみ利用可能)。 これにより FULLTEXT が予約語になる。
lex_hash.h is created properly for each MySQL
distribution.
MASTER and COLLECTION are not reserved words.
--slow-query-log didn't contain the whole queries.
gcc 2.96 (intel) and gcc 2.9
(Ia64) in gen_lex_hash.c.
my.cnf ファイルで host= を使用した場合、
クライアントライブラリにメモリリークがあったのを修正した。
DATE_ADD()/DATE_SUB()
against a number.
-F, --fast for myisamchk. Added option
-C, --check-only-changed to myisamchk.
ANALYZE table_name to update key statistics for tables.
0x... to be regarded as integers by default.
SHOW PROCESSLIST.
auto-rehash on reconnect for the mysql client.
MyISAM の インデックスファイルが 64M bytes を超えれないバグを修正した。
3.23.21 でエンバグした。
SHOW MASTER STATUS と SHOW SLAVE STATUS の追加。
mysql_character_set_name(MYSQL *mysql) 関数を追加。
ASCII 0 safe.
mysql_config スクリプトの追加。
< or > with a char column that was only
partly indexed.
mysqladmin を、API コールしていたかわりに、
CREATE DATABASE/DROP DATABASE コマンドを
使用するように変更した。
chown warning in safe_mysqld.
ORDER BY のバグを修正。 3.23.19 でエンバグした。
DELETE FROM tbl_name to do a drop+create of
the table if we are in AUTOCOMMIT mode. (Needed for BDB tables).
ISAM/MyISAM
index files gets full during an INSERT/UPDATE.
myisamchk didn't correctly update row checksum when used with
-ro (This only gave an warning in subsequent runs).
REPAIR TABLE so that it works with tables without indexes.
DROP DATABASE
LOAD TABLE FROM MASTER is sufficiently bug-free to announce it as
a feature.
MATCH と AGAINST が予約語になった。
DELETE FROM table_name が .frm ファイルを消してしまっていた。
SHOW CREATE TABLE.
MyISAM table
when doing update based on key on a table with many keys and some key changed
values.
ORDER BY can now uses REF keys to find subset the rows
that needs to be sorted.
print_defaults の名前を my_print_defaults に変更。
名前の衝突をさけるため。
NULLIF() to work according to ANSI SQL99.
net_read_timeout と net_write_timeout を
mysqld の起動時のパラメタとして追加。
myisamchk --sort-records
on a table with prefix compressed index.
BEGIN WORK (the same as BEGIN).
ORDER BY on a CONV() expression.
LOAD TABLE FROM MASTER
FLUSH MASTER and FLUSH SLAVE
FLUSH TABLES WITH READ LOCK to make a global lock suitable to
make a copy of MySQL data files.
CREATE TABLE ... SELECT ... PROCEDURE now works.
GROUP BY on VARCHAR/CHAR columns.
READ and a
WRITE lock.
RAID tables.
find_in_set() when the first argument was NULL.
LEFT JOIN and ORDER BY where the first
table had only one matching row.
my.cfg example files in the `support-files'
directory.
duplicated key problem when doing big GROUP BY's.
(This bug was probably introduced in 3.23.15).
INNER JOIN の文法を ANSI SQL にマッチさせた.
NATURAL JOIN 構文を追加.
BDB interface.
--no-defaults and --defaults-file to
safe_mysqld.sh and mysql_install_db.sh.
USE INDEX works with PRIMARY keys.
BEGIN statement to start a transaction in AUTOCOMMIT mode.
KILL now works on a thread that is locked on a 'write' to a dead client.
log-slave-updates to allow daisy-chaining the slaves.
pthread_t
is not the same as int.
INSERT DELAYED code when doing
ALTER TABLE.
INSERT DELAYED
TYPE=QUICK オプションを CHECK と REPAIR に追加。
REPAIR TABLE when the table was in use by other threads.
gdb when one does a lot of reconnects. This will also improve
systems where you can't use persistent connections.
UPDATE IGNORE will not abort if an update results in a
DUPLICATE_KEY error.
CREATE TEMPORARY TABLE commands in the update log.
delayed_key_writes tables and CHECK TABLE.
replicate-do-db and replicate-ignore-db options to
restrict which databases get replicated
SQL_LOG_BIN オプションを追加。
mysqld as root one must now use the --user=root option.
FLUSH TABLES command.
slow_launch_time variable and the Slow_launch_threads
status variable to mysqld. These can be examined with
mysqladmin variables and mysqladmin extended-status.
INET_NTOA() and INET_ATON().
IF() now depends on the second and
third arguments and not only on the second argument.
myisamchk could go into a loop when trying to
repair a crashed table.
INSERT DELAYED to update log if SQL_LOG_UPDATE=0.
REPLACE on HEAP tables.
SHOW VARIABLES.
DELETE of many rows on a table with
compressed keys where MySQL scanned the index to find the rows.
CHECK on table with deleted keyblocks.
LAST_INSERT_ID() to update
a table with an auto_increment key.
NULLIF().
LOAD DATA INFILE on a table with
BLOB/TEXT columns.
EXPLAIN SELECT ... now also prints out whether MySQL needs to
create a temporary table or use file sorting when resolving the SELECT.
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. 「13.4 MySQL はどのようにインデックスを使用するか?」節参照.
UPDATE and DELETE on a whole unique key in the WHERE part,
is now faster than before.
RAID_CHUNKSIZE to be in 1024 byte increments.
CONCAT() where one of the arguments was a function
that returned a modified argument.
myisamchk の致命的なバグを修正した。 このバグはインデックスファイル中の
ヘッダーを、テーブルをチェックしているだけなのにもかかわらず、更新していた。
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 shoul
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!
DROP TABLE is logged in the update log.
DECIMAL() key field
where the column data contained leading zeros.
myisamchk のバグを修正。
DATETIME in ISO8601 format: 2000-03-12T12:00:00
mysqld バイナリで、多くの違う
キャラクタセットを扱えるようになった。
(mysqld スタート時に指定できます).
REPAIR TABLE コマンドを追加。
mysql_thread_safe() C API 関数を追加。
UMASK_DIR 環境変数を追加。
CONNECTION_ID() 関数を追加
= 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.
ORDER BY の問題を修正
GROUP BY part.
LOCK TABLE command; This fixed the problem one got when running
the test-ATIS test with --fast or --check-only-changed.
SQL_BUFFER_RESULT オプションを SELECT に追加
CHECK TABLE コマンドの追加。
MyISAM involving REPLACE ... SELECT ... which could
give a corrupted table.
myisamchk where it wrongly reset the auto_increment value.
HEAP 一時テーブル上の DISTINCT を変更した。
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.
新しく追加したコードは、とても速い。
IF NOT EXISTS を CREATE DATABASE に追加.
--all-databases と --databases オプションを mysqldump に追加。
MyISAM 型テーブル中の圧縮した DECIMAL() インデックスのバグを修正した。
mysqladmin shutdown を実行した場合に、mysqladmin は
終了前に pidfile が無くなるまで待つようになった。
COUNT(DISTINCT ...) クエリでコアを吐いたのを修正した。
myisamchk works properly with RAID:ed tables.
LEFT JOIN and key_field IS NULL.
net_clear() which could give the error Aborted
connection in the MySQL clients.
USE INDEX (key_list) and IGNORE INDEX (key_list) as
join parameters in SELECT.
DELETE and RENAME should now work on RAID tables.
ALTER TABLEL tbl_name ADD (field_list) 文を許可した。
GRANT/REVOKE ALL PRIVILEGES が GRANT OPTION に影響しなかったのを修正。
) from the output of SHOW GRANTS
CREATE 文での UNIQUE INDEX の使用を許可。
mysqlhotcopy - ローカルの MySQL データベースをバックアップする
ツール。 By Tim Bunce.
mysqlaccess. Thanks to Steve Harvey for this.
--i-am-a-dummy と --safe-updates オプションを mysql に追加。
select_limit と max_join_size 変数を mysql に追加。
SQL_MAX_JOIN_SIZE と SQL_SAFE_UPDATES.
READ LOCAL lock that doesn't lock the table for concurrent
inserts. (This is used by mysqldump).
LOCK TABLES ... READ doesn't anymore allow concurrent
inserts.
--skip-delay-key-write を mysqld に追加。
_rowid can now be used as an alias for an integer type unique indexed
column.
SIGPIPE when compiling with --thread-safe-clients
to make things safe for old clients.
LOCK TABLES.
INSERT DELAYED.
date_column BETWEEN const_date AND const_date works.
NULL in a table with
BLOB/TEXT columns.
WHERE K1=1 and K3=2 and (K2=2 and K4=4 or K2=3 and K4=5)
source コマンドを mysql に追加。 これは mysql クライアント内
で、バッチファイルを読むことができる。 Original patch by Matthew Vanecek.
WITH GRANT OPTION オプションの致命的なバグを修正
GRANT error when using tables from many
databases in the same query.
SELECT when using many overlapping indexes.
MySQL should now be able to choose keys even better when there
is many keys to choose from.
SELECT * from key_part_1=const and key_part_2 > const2
VARCHAR columns to CHAR columns
didn't change row type from dynamic to fixed.
SELECT floor(pow(2,63)).
mysqld の起動オプション --delay-key-write を
--delay-key-write-for-all-tables に変更
read-next-on-key to HEAP tables. This should fix all
problems with HEAP tables when using not UNIQUE keys.
mysqld に --log-slow-queries を追加。 これは時間のかかった
全てのクエリを別のログファイルに記録する。どのくらい時間がかかったかが記される
WHERE key_column=RAND(...) を行ったときコアを吐くバグを修正
SELECT ... LEFT JOIN ... key_column IS NULL,
when key_column could contain NULL values.
LOAD DATA INFILE.
NISAM 中のパックされたキーの削除時のバグを修正。
ORDER BY ... DESC クエリを実行した際の ISAM の問題を修正。
--delay-key-write が delayed key writing を有効にしていなかったのを修正。
TEXT column which only involved case changes.
INSERT DELAYED doesn't update timestamps that are given.
YEARWEEK() 関数の追加と、x, X, v,
V オプションの DATE_FORMAT() への追加。
MAX(indexed_column) and HEAP tables.
BLOB NULL keys and LIKE "prefix%".
MyISAM and fixed-length rows < 5 bytes.
GROUP BY queries.
ENUM field value
was too big.
pthread_mutex_timedwait の問題を避けるようにした。
この関数は INSERT DELAYED で使用されていた。 「4.12.5 Linux Notes (All Linux Versions)」節参照.
MyISAM で、キーが 250 文字を超えた場合のバグを修正。
MyISAM において、他のスレッドが読んでいるテーブルに対し、
他のスレッドが INSERT を同時に行うことができるようになった。
max_write_lock_count to mysqld to force a
READ lock after a certain number of WRITE locks.
delayed_key_write on show variables.
concurrency 変数を thread_concurrency に改名。
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.
FULL オプションを SHOW PROCESSLIST に追加。
--verbose オプションを mysqladmin に追加。
REPLACE() と LOAD DATA INFILE
のバグを修正。
mysqld 変数に interactive_timeout を追加.
mysql_data_seek() の引数を ulong から ulonglong に
変更.
mysqld に -O lower_case_table_names={0|1} オプションを追加。
これはテーブル名を強制的に小文字にします。
SELECT ... INTO DUMPFILE 追加。
--ansi オプションを追加。 これはいくつかの関数を
ANSI SQL 互換にします。
#sql.
` (" in --ansi mode).
floor() をオーバーフローセーフにした。
--quote-names オプションを mysqldump に追加
PRIMARY KEY NOT NULL.
encrypt() to be thread safe and not reuse buffer.
mysql_odbc_escape_string() 関数が、big5 をサポートした。
FLOAT and DOUBLE (without any length modifiers) are
not anymore fixed decimal point numbers.
FLOAT(X) の意味を変更: X <=24 ならば、これは FLOAT と同じで、
24 < X <= 53 であるならば DOUBLE と同じになります。
DECIMAL(X) は DECIMAL(X,0) のエイリアスになりました。
また DECIMAL は DECIMAL(10,0) のエイリアスになりました。
The same goes for NUMERIC.
ROW_FORMAT={default | dynamic | static | compressed} オプションを
CREATE_TABLE に追加.
DELETE FROM table_name が一時テーブルで動かなかった。
CHAR_LENGTH() 関数をマルチバイトセーフに変更
ORD(string) 関数の追加.
SELECT DISTINCT ... ORDER BY RAND() の問題を修正。
MyISAM で auto_increment をサブパートとして使用できるようになった:
CREATE TABLE foo (a int not null auto_increment, b char(5), primary key (b,a))
MyISAM with packed char keys that could be NULL.
CREATE TABLE table_name SELECT ... 時にとした場合、動かなかった。
NATIONAL and NCHAR when defining character columns.
This is the same as not using BINARY.
NULL のフィールドを PRIMARY KEY ( UNIQUE キー) には
許さなくなった。
LAST_INSERT_ID if one uses this in ODBC:
WHERE auto_increment_column IS NULL. This seems to fix some problems
WHERE auto_increment_column IS NULL を使用して最後にレコードが挿入された後に、
SET SQL_AUTO_IS_NULL=0|1 はサーチのハンドリングの on/off になった。
mysqld variable concurrency for Solaris.
--relative オプションを mysqladmin に追加。
これは extended-status で変更のモニターをする場合、より便利になった。
COUNT(DISTINCT...) を使用した際のバグを修正。
GBK を追加。
LOAD DATA INFILE を BLOB フィールドに使用した際の問題を修正。
~ (negation) を追加。
UDF 関数での問題を修正。
DATETIME 型を TIME フィールドに挿入するとき、'day' を
保存しようと試みなくなった。
SUM() に影響する.)
NULL 値を持つかもしれないものに LIKE "%" した際の問題を修正。
REVOKE ALL PRIVILEGES が全ての権限を取り消していなかったのを修正。
SHOW GRANTS FOR user (by Sinisa).
date_add syntax: date/datetime + INTERVAL # interval_type.
By Joshua Chamas.
LOAD DATA REPLACE の権限のチェックを修正。
REGEXP はケース非依存になった。もしバイナリ文字でない場合は。
ORDER BY のデフォルトが再び ASC になった。
LIMIT を UPDATE に追加。
mysql_change_user().
SHOW VARIABLES にキャラクターセットを追加。
--[whitespace] コメントをサポートした。
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.
SUBSTRING(text FROM pos) to conform to ANSI SQL. (Before this
construct returned the rightmost 'pos' characters).
GROUP BY をともなった SUM() は 0 を返すようになった。
SHOW TABLE STATUS の出力を変更。
DELAY_KEY_WRITE オプションを CREATE TABLE に追加。
AUTO_INCREMENT をいかなるキーの部分に使用できるようにした。
YEAR(NOW()) , YEAR(CURDATE()) の問題を修正。
CASE construct.
COALESCE().
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.
myisamchk without -a updated the index
distribution wrong.
SET SQL_LOW_PRIORITY_UPDATES=1 gave parse error before.
WHERE 節に使用されているインデックスフィールドを更新できるようになった:
UPDATE tbl_name SET KEY=KEY+1 WHERE KEY > 100
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.
egcs 1.1.2 optimizer のバグ(BLOB 使用時)を修正。
LOCK TABLES combined with DELETE FROM table.
NULL 値と BLOB/TEXT フィールドにキーを許すようになった。
SELECT ... FROM t1 LEFT JOIN t2 ON ... WHERE t2.not_null_column IS NULL.
ORDER BY and GROUP BY can be done on functions.
ORDER BY RAND().
WHERE key_column = function でインデックスが使用されるようになった。
WHERE key_column = column_name でインデックスが使用されるようになった。
WHERE column_name IS NULL でインデックスが使用されるようになった。
--init-file=file_name オプションを 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.
CASE を要求): CASE, THEN, WHEN, ELSE and END.
EXPORT_SET() , MD5().
MyISAM )。
「8.1 MyISAM Tables」節参照.
HEAP テーブルを作成できるようになりました。
これは探索がとても速いです。
LOAD_FILE(filename) 。 これはファイルの中身を文字列値として読みます。
<=> 。 これは、 = のように振る舞いますが、
もし両辺の引数が NULL なら、真を返します。
これはテーブル間の変更の比較に役立ちます。
EXTRACT(interval FROM datetime) 関数の追加。
FLOAT(X) フィールドは、保存した値を丸めません。
これは検索されたときに 科学表記 (1.0 E+10) になるかもしれません。
REPLACE が前よりも速くなった。
LIKE 文字比較を = のよに振る舞うように変更;
これは 'e' LIKE ''e' が真になるということです。
(if the line doesn't display
correctly, the latter 'e' means a French 'e' with a dot above)
SHOW TABLE STATUS はテーブルについての情報を多く出すようになりました。
LIKE を SHOW STATUS コマンドに追加。
SHOW COLUMNS に Privileges 項目を追加。
SHOW INDEX に packed と comment 項目を追加。
CREATE TABLE ... COMMENT "xxx").
UNIQUE を次のように追加:
CREATE TABLE table_name (col int not null UNIQUE)
CREATE TABLE table_name SELECT ...
CREATE TABLE IF NOT EXISTS ...
CHAR(0) フィールドの作成を許可した。
DATE_FORMAT() は、フォーマット文字の前に `%' が必要になった。
DELAYED が予約語になった。 (sorry about that :( ).
analyse, file: `sql_analyse.c'.
これはクエリのデータについて説明します。 以下の様にしてみてください:
SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max elements,[max memory]])この プロセジャーは、テーブルのデータをチェックしたい時に、とても役立ちます!
BINARY cast to force a string to be compared case sensitively.
--skip-show-database オプションを mysqld に追加。
BLOB/TEXT フィールドにおいて、 UPDATE された
レコードをチェックできるようになりました。
INNER JOIN の追加。 注意: INNER は予約語になりました!
IP/NETMASK として、ネットマスクを指定できます。
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 (...) は 0 ではなく NULL を返します。 これは
null_column NOT IN (...) が NULL 値にマッチしないのを確実にします。
TIME フィールド中に、浮動小数点の値を入れるのを修正。
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]
DATETIME.
LOW_PRIORITY 属性を LOAD DATA INFILE に追加。
LOAD DATA INFILE 時に、より大きなバッファを使用するようにした。
DECIMAL(x,y) は ANSI SQL に従って動作するようになった。
LAST_INSERT_ID() is now updated for INSERT INTO ... SELECT.
SELECT DISTINCT が凄く速くなった;
これは MyISAM の新しい UNIQUE を使用します。
MySQL バージョン 3.22 と一つ違う点は、 DISTINCT の出力が
ソートされないという事です。
mysql_num_fields() を
MYSQL ととしてコールできず、この代わりに mysql_field_count() を
使用しなくてはなりません。
LIBEWRAP の追加; Patch by Henning P . Schmiedehausen.
AUTO_INCREMENT for other than numerical columns.
AUTO_INCREMENT の使用は、フィールドを自動的に
NOT NULL にします。
NULL as the default value for AUTO_INCREMENT columns.
SQL_BIG_RESULT の追加; SQL_SMALL_RESULT がデフォルトになりました。
--enable-large-files/--disable-large-files スイッチを configure に
追加。 See `configure.in' for some systems where this is
automatically turned off because of broken implementations.
readline 4.0 にアップグレード
CREATE TABLE オプション: PACK_KEYS と CHECKSUM.
mysqld オプションに --default-table-type を追加。
3.22 は 3.21 より早く、より安全なコードをもち、たくさんの新しい機能が盛り込まれています。 これらの変更を 3.21 に行わないのは、3.21 の安定度を保つためにはとても多くの変更が必要とされるからです。 これらの変更はメジャーバージョンの変更ではないので、簡単に障害もなく 3.22 にアップグレードができます。 「4.18.2 バージョン 3.21 から バージョン 3.22 へのアップグレード」節参照.
3.22 は新しい DBD-mysql (1.20xx) ドライバーのみを新しい接続プロトコルに対して使用します!
STD().
ISAM library from 3.23.
INSERT DELAYED.
LEFT JOIN/STRAIGHT_JOIN
on a table with only one row.
GROUP BY on TINYBLOB columns; This
caused bugzilla to not show rows in some queries.
LOCK TABLE
SELECT DISTINCT queries.
mysqlhotcopy - ローカルの MySQL データベースをコピーする
ツール. By Tim Bunce.
mysqlaccess が新しくなった. Thanks to Steve Harvey for this.
GROUP functions.
ISAM code when deleting rows on tables with
packed indexes.
SELECT when using many overlapping indexes.
SELECT floor(pow(2,63)).
WITH GRANT OPTION オプションの致命的なバグを修正.
NISAM 中のパックされたキーの削除時のバグを修正。
GROUP BY queries.
ENUM field value
was too big.
mysqlshutdown.exe and mysqlwatch.exe to the Windows
distribution.
ORDER BY を行ったときの問題を修正
INSERT DELAYED doesn't update timestamps that are given.
LEFT JOIN and COUNT() on a column which
was declared NULL + and it had a DEFAULT value.
CONCAT() をある WHERE 節で使用した際にコア・ダンプする問題を修正した。
AVG() and STD() with NULL values.
ROUND() will now work on Windows.
BLOB/TEXT フィールドを REVERSE() した際にコアダンプしたのを修正。
/*! */ バージョン番号 を拡張した
SUBSTRING(text FROM pos) to conform to ANSI SQL. (Before this
construct returned the rightmost 'pos' characters).
LOCK TABLES combined with DELETE FROM table
INSERT ... SELECT が SQL_BIG_TABLES を使用していなかったのを修正。
SET SQL_LOW_PRIORITY_UPDATES=# が動いてなかった。
GRANT ... IDENTIFIED BY で変更しても直にパスワードが
反映されなかったのを修正。
SELECT * FROM table_name WHERE key_part1 >= const AND (key_part2 = const OR key_part2 = const)
DATA は予約語でなくなった。
LOCK TABLES table_name READ; FLUSH TABLES; を使用した際のバグ修正。
isamchk が Windows 上で動くようになった。
libtool 1.3.2 を使用するようにアップグレード。
configure.
--defaults-file=### to option file handling to force use
of only one specific option file.
MySQL バージョン 3.23 のキーワードを無視するように
CREATE 構文を拡張した。
LOCK TABLES でロックされているテーブルに INSERT DELAYED を
使用した際の、デッドロックの問題を修正。
DROP TABLE を使用した際の
問題を修正。
GRANT/REVOKE コマンドを update log に追加。
isamchk を修正。
NATURAL LEFT JOIN のバグを修正。
mysql_init() の後に直接 mysql_close() を読んだときの問題を修正。
(C API)
delayed_insert_thread 数の表示を修正。
CONCAT() の引数を多くした場合のバグを修正。
DELETE FROM TABLE の
問題を修正。
LEFT JOIN involving empty tables.
mysql.db フィールドを char(32) から char(60) に変更。
MODIFY と DELAYED は予約語でなくなった。
TIME フィールドに日にちを入れようとしたときのバグを修正。
GRANT コマンドで新しい MySQL ユーザーを登録した後に
Host '...' is not allowed to connect to this MySQL server となる問題を修正。
TCP_NODELAY を使用するように変更。 (これは TCP/IP 接続を速くします)
STD() for big tables when result should be 0.
INSERT DELAYED had some garbage at end in the update log.
mysql_install_db のバグ修正。 (from 3.22.17).
BLOB フィールドで一時テーブルが必要とされるクエリの問題を修正。
shutdown 後、全ての
スレッドが確実に死ななかった。
-O flush_time=# オプションを mysqld に追加。 This is mostly
useful on Windows and tells how often MySQL should close all
unused tables and flush all updated tables to disk.
VARCHAR フィールドと CHAR を比較した際にキーを効果的に
使用していなかったのを修正。
--log-update を使用したときとデフォルトのデータベースを指定しないで
接続したときのコアダンプを修正した。
configure と移植性の問題を修正した。
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 table_name WHERE key_column=column_name が
マッチする行を1行も見つけれないのを修正
DATE_ADD(column, ...) が動かないのを修正
INSERT DELAYED could deadlock with status 'upgrading lock'
ENCRYPT() を拡張。
longlong2str は以前よりかなり速くなった。Intel x86 用に
このコードは最適化されたアセンブラで書き直した
ALTER TABLE に MODIFY キーワードを追加
GRANT を IDENTIFIED BY と共に使用した際、権限情報がフラッシュされるまで
有効にならない
SHOW STATUS.
ORDER BY with 'only index' optimization 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) が動作しなかった
LOAD DATA LOCAL INFILE がファイルがないための理由で UNIX では動作しなかった
VARCHAR/BLOB での問題の修正;
error 127 がこの行を消去する場合に起きる可能性があった
BLOB/TEXT through formulas didn't work for short (< 256 char)
strings.
GRANT を実行した場合、そのホストからの最初のコネクションで
mysqld が死ぬ可能性があった
ORDER BY で使用する場合のバグを修正
name as an alias.
BENCHMARK(loop_count,expression) function to time expressions.
mysqld の引数がない場合を許可した。
TIMESTAMP column to NULL didn't record the timestamp
value in the update log.
INSERT INTO TABLE ... SELECT ... GROUP BY.
localtime_r() on Windows so that it will not crash
anymore if your date is > 2039, but instead will return a time of all zero.
^Z (ASCII 26) to \Z as ^Z doesn't
work with pipes on Windows.
mysql_fix_privileges は、
UDF のサポートのために、新しい項目を mysql.func に追加する。
( type enum ('function','aggregate') NOT NULL が追加された )
NOW(), CURDATE() or CURTIME() directly in a
column didn't work.
WHERE 節が無い場合、SELECT COUNT(*) ... LEFT JOIN ... が動かなかった
pthread_cond() on the Windows version.
get_lock() now correctly times out on Windows!
WHERE 節で DATE_ADD() と DATE_SUB() を使用した際の問題を修正
GRANT ... TO user IDENTIFIED BY 'password' 構文でパスワードをセットできるようにした
SELECT して GRANT を確認する際のバグを修正
mysql_fix_privilege_tables ファイルの追加。
これはクライアントパッケージに含んだため、デフォルトでは起動されない。
SQL_SMALL_RESULT オプションを SELECT に追加。
これは強制的に速い一時テーブルを使用する。
結果が小さいとわかっている場合に使用すると有効。
DATE_ADD/DATE_SUB() の結果、十分な日数を得られない場合、
日数を月の最大日にするようにした。
GRANT がカラムをケース非依存で比較していたのを修正
ALTER TABLE が core をはくバグが
`sql_list.h' にあったのでこれを修正
user@hostname can now include `.' and `-'
without quotes in the context of the GRANT, REVOKE and
SET PASSWORD FOR ... statements.
isamchk を修正
mysql_fix_privilege_tables スクリプトを実行しなくてはなりません!
これは新しい GRANT システムのために実行します。
もしこれを行わなければ、ALTER TABLE や CREATE INDEX, DROP INDEX を
実行しようとすると Access denied になります。
USER() を user@host を返すように変更
PASSWORD をセットする構文を変更
FLUSH STATUS はほとんどのステータス変数をゼロにセットします
aborted_threads, aborted_connects.
connection_timeout
SET SQL_WARNINGS=1 to get a warning count also for simple
inserts.
SIGQUIT のかわりに SIGTERM を使用します
mysql に オプション \G (print vertically) 追加
SELECT HIGH_PRIORITY ... killed mysqld.
IS NULL on a AUTO_INCREMENT column in a LEFT JOIN didn't
work as expected.
MAKE_SET().
safe_mysqld で mysqld を開始させる必要があります。
しかし MySQL の RPM パッケージはサーバーをたちあげるようにしています。
--bootstrap を mysqld に追加。mysql_install_db はこれを使用します。
この引数は RPM パッケージで MySQL のインストールを簡略化します。
+, - (sign and minus), *, /, %, ABS() and MOD() のコードを修正。
BIGINTで使用した場合の危険性を回避しました(64 bit safe).
ALTER TABLE が mysqld をクラッシュさせるバグを修正。
INSERT の時にしかメッセージが出ませんでした)
INSERT INTO table_name SET column=value,column=value, ...
MYSQL_INIT_COMMAND オプションを mysql_options() に追加。
(接続要求する場合に使用できる)
MYSQL_READ_DEFAULT_FILE と MYSQL_READ_DEFAULT_GROUP を
mysql_options()に追加。
MySQL オプションファイルから以下のパラメーターを読み取る:
port,
socket, compress, password, pipe, timeout,
user, init-command, host and database
(訳注)オプションファイルのデフォルトは /etc/my.cnf , install_directory/share/mysql/my.cnf
maybe_null を追加
IGNORE to INSERT statements with many rows.
CHAR や VARCHAR カラムを
インデックスにしているテーブルに対して、必ず isamchk -rq を実行すること。
mysql_setpermission (Luuk de Boer 作)
これは指定されたデータベースに対してアクセスを許可するユーザーを
簡単に登録してくれます。
LOAD DATA INFILE).
SHOW STATUS での変数を増やしました。また、SHOW VARIABLES の
ような出力フォーマットに変更しました。
extended-status コマンドを mysqladmin に追加。
これは新しいステイタス変数を表示します
SET SQL_LOG_UPDATE=0 caused a lockup of the server.
FLUSH [ TABLES | HOSTS | LOGS | PRIVILEGES ] [, ...]
KILL thread_id .
ALTER TABLE を使用して INT からサイズの小さい CHAR() に
変更する場合におきていた不具合を修正。
SELECT HIGH_PRIORITY 追加。
SELECT において、たとえ他の SELECT を待っているスレッドがあったとしても、
WRITE LOCK することができます。
LIKE on
BLOB/TEXT columns with \0.
ESCAPE option to LIKE
mysqladmin debug において、より多くの出力が得られるようにした。
--flush オプションをつけて mysqld を起動できるようになりました。
これはアップデートが終わった後ですべてのテーブルをディスクにフラッシュします。
このオプションにより NT/Win98 上ですごく安全に動かすことができますが、
とても 遅くなります。
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.
ORDER BY and LEFT JOIN and const tables.
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.
OPTIMIZE TABLE.
DROP TABLE and mysqladmin shutdown on Windows
(a fatal bug from 3.22.6).
TIME columns and negative strings.
LIMIT clause for the DELETE statement.
/*! ... */ 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.
libtool to get the configure more portable.
UPDATE and DELETE operations when using
DATETIME or DATE keys.
mysqladmin proc to display information about your own
threads. Only users with the Process_priv privilege can get
information about all threads.
YYMMDD, YYYYMMDD,
YYMMDDHHMMSS for numbers when using DATETIME and
TIMESTAMP types. (Formerly these formats only worked with strings.)
CLIENT_IGNORE_SPACE to allow use of spaces
after function names and before `(' (Powerbuilder requires this).
This will make all function names reserved words.
--log-long-format option to mysqld to enable timestamps
and INSERT_ID's in the update log.
--where option to mysqldump (patch by Jim Faucette).
mysqldump.
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.
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.
DBI to 1.00 and DBD to 1.2.0.
mysqld. (To avoid errors if you accidentally
try to use an old error message file.)
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.
mysql_fetch_lengths() has changed from uint *
to ulong *. This may give a warning for old clients but should work
on most machines.
mysys and dbug libraries to allocate all thread variables
in one struct. This makes it easier to make a threaded `libmysql.dll'
library.
gethostname() (instead of uname()) when
constructing `.pid' file names.
COUNT(), STD() and AVG() are extended to handle more than
4G rows.
-838:59:59 <= x <=
838:59:59 in a TIME column.
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.
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.)
LPAD().
BLOB reading from
pipes safer.
-O max_connect_errors=# option to mysqld.
Connect errors are now reset for each correct connection.
max_allowed_packet to 1M in
mysqld.
--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. :(
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.)
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 `;'.
SELECT INTO OUTFILE.
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.
DAYOFWEEK() had offset 0 for Sunday. Changed the offset to 1.
GROUP BY columns and fields when
there is no GROUP BY specification.
--vertical option to mysql, for printing results in
vertical mode.
--tmpdir option to mysqld, for specifying the location
of the temporary file directory.
SELECT ... FROM table WHERE auto_increment_column IS NULLto:
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.
BIN(), OCT(), HEX() and CONV() for
converting between different number bases.
SUBSTRING() with 2 arguments.
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.
--console option to mysqld, to force a console window
(for error messages) when using Windows.
DATE_ADD() and DATE_SUB() functions.
mysql_ping() to the client library.
--compress option to all MySQL clients.
byte to char in `mysql.h' and `mysql_com.h'.
<<, >>, RPAD() and LPAD().
ORDER BY to work when no records are found
when using fields that are not in GROUP BY (MySQL extension).
--chroot option to mysqld, to start mysqld in
a chroot environment (by Nikki Chumakov nikkic@cityline.ru).
--one-thread option to mysqld, for debugging with
LinuxThreads (or glibc). (This replaces the -T32 flag)
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).
mysqldump.
mysql_ping().
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().
mysql_options(...,MYSQL_OPT_CONNECT_TIMEOUT,...) so you can set a
timeout for connecting to a server.
--timeout option to mysqladmin, as a test of
mysql_options().
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.
FORMAT(-100,2).
ENUM and SET columns were compared in binary (case-sensitive)
fashion; changed to be case insensitive.
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)
accept() thread. This fixes permanently the telnet bug
that was a topic on the mail list some time ago.
mysqld now has a local hostname
resolver cache so connections should actually be faster than before,
even with this feature.
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!
--user option to mysqld, to allow it to run
as another Unix user (if it is started as the Unix root user).
mysqladmin password 'new_password'. This uses encrypted passwords
that are not logged in the normal MySQL log!
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;
malloc().
-T32 option to mysqld, for running all queries under the
main thread. This makes it possible to debug mysqld under Linux with
gdb!
not_null_column IS NULL (needed for some Access
queries).
STRAIGHT_JOIN to be used between two tables to force the optimizer
to join them in a specific order.
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.
--set-variable option wait_timeout to mysqld.
mysqladmin processlist to show how long a query
has taken or how long a thread has slept.
show variables and some new to
show status.
YEAR. YEAR is stored in 1 byte with allowable
values of 0, and 1901 to 2155.
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.
Error from table handler: # on some operating systems.
--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!
Version 3.21 is quite old now, and should be avoided if possible. This information is kept here for historical purposes only.
SIGHUP to mysqld;
mysqld core dumped when starting from boot on some systems.
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.
mysqladmin
refresh often. This could in some very rare cases corrupt the header of the
index file and cause error 126 or 138.
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.
Use_count: Wrong count for ... in the error log file.
TINYINT type on Irix.
LEFT("constant_string",function).
FIND_IN_SET().
LEFT JOIN core dumped if the second table is used with a constant
WHERE/ON expression that uniquely identifies one record.
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.
mysql client.
By Tommy Larsen tommy@mix.hive.no.
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.
LOAD DATA to use less memory with tables and BLOB
columns.
SELECT problem with LEFT() when using the czech character
set.
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.
LOCK TABLES + DELETE from tbl_name never removed locks properly.
OR function.
umask() and creating new databases.
SELECT ... INTO OUTFILE ...
MIN(integer) or MAX(integer) in
GROUP BY.
WEEK("XXXX-xx-01").
Error from table handler: # on some operating systems.
GET_LOCK(string,timeout),
RELEASE_LOCK(string).
opened_tables to show status.
mysqld through telnet + TCP/IP.
WHERE key_part_1 >= something AND key_part_2 <= something_else.
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).
umask() to make log files non-readable for normal users.
--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".
DATE_FORMAT(), PM and AM were swapped for hours 00 and 12.
BLOB/TEXT in GROUP BY with many
tables.
ENUM field that is not declared NOT NULL has NULL as
the default value.
(Previously, the default value was the first enumeration value.)
INDEX (Organization,Surname(35),Initials(35)).
SELECT ... FROM many_tables much faster.
accept() to possibly fix some problems on some
Linux machines.
typedef 'string' to typedef 'my_string' for better
portability.
isamchk. Try isamchk --help.
filesort() didn't work.
Affects DISTINCT, ORDER BY and GROUP BY on 64-bit
processors.
SELECT on the
table.
OR operators on key parts
inside each other.
MIN() and MAX() to work properly with strings and
HAVING.
0664 to 0660.
LEFT JOIN and constant expressions in the ON
part.
configure now works better on OSF1 (tested on 4.0D).
LIKE optimization with international character
support.
DBI to 0.93.
TIME, DATE, TIMESTAMP, TEXT, BIT,
ENUM, NO, ACTION, CHECK, YEAR,
MONTH, DAY, HOUR, MINUTE, SECOND,
STATUS, VARIABLES.
TIMESTAMP to NULL in LOAD DATA INFILE ... didn't
set the current time for the TIMESTAMP.
BETWEEN to recognize binary strings. Now BETWEEN is
case sensitive.
--skip-thread-priority option to mysqld, for systems
where mysqld's thread scheduling doesn't work properly (BSDI 3.1).
DAYNAME() and MONTHNAME().
TIME_FORMAT(). This works like DATE_FORMAT(),
but takes a time string ('HH:MM:DD') as argument.
ORs of key parts
inside ANDs.
variables to mysqladmin.
ALTER TABLE to work with Windows (Windows can't rename
open files). Also fixed a couple of small bugs in the Windows version.
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.
COUNT(*) problems when the WHERE clause didn't match any
records. (Bug from 3.21.17.)
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.
LEFT OUTER JOIN clauses.
ORDER BY on string formula with possible NULL values.
DAYOFYEAR(), DAYOFMONTH(), MONTH(),
YEAR(), WEEK(), QUARTER(), HOUR(), MINUTE(),
SECOND() and FIND_IN_SET().
SHOW VARIABLES.
mysql> SELECT 'first ' 'second'; -> 'first second'
mysqlaccess to 2.02.
LIKE.
WHERE data_field = date_field2 AND date_field2 = constant.
SHOW STATUS.
mysqladmin stat to return the right number of queries.
AUTO_INCREMENT attribute or is a TIMESTAMP. This is needed for
the new Java driver.
configure bugs and increased maximum table size
from 2G to 4G.
DBD to 1823. This version implements mysql_use_result in
DBD-Mysql.
REVERSE() (by Zeev Suraski).
DBI to 0.91.
LEFT OUTER JOIN.
CROSS JOIN syntax. CROSS is now a reserved word.
yacc/bison stack allocation to be even safer and to allow
MySQL to handle even bigger expressions.
ORDER BY was slow when used with key ranges.
--with-unix-socket-path to avoid
confusion.
LEFT OUTER JOIN.
LEFT, NATURAL,
USING.
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.
BLOBs with ASCII
characters over 127.
mysqld
restart if one thread was reading data that another thread modified.
LIMIT offset,count didn't work in INSERT ... SELECT.
POWER(), SPACE(),
COT(), DEGREES(), RADIANS(), ROUND(2 arg)
and TRUNCATE().
LOCATE() parameters were
swapped according to ODBC standard. Fixed.
TIME_TO_SEC().
NOT NULL fields.
UPDATE SET ... statements.
BLOB and TEXT, to
be compatible with mysqldump.
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.
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!)
make programs trying to rebuild it.
readline library upgraded to version 2.1.
DBI/DBD is now included in the distribution. DBI
is now the recommended way to connect to MySQL from Perl.
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.
mysql command line tool, by Zeev
Suraski and Andi Gutmans.
REPLACE that works like INSERT but
replaces conflicting records with the new record. REPLACE INTO
TABLE ... SELECT ... works also.
CREATE DATABASE db_name and DROP
DATABASE db_name.
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.
net_write() to my_net_write() because of a name
conflict with Sybase.
DAYOFWEEK() compatible with ODBC.
bison memory overrun checking to make MySQL
safer with weird queries.
configure problems on some platforms.
DATE_FORMAT().
NOT IN.
{fn now() }
DATE and TIME values with NULL.
FLOAT. Previously, the
values were converted to INTs before sorting.
key_column=constant.
DOUBLE values sorted on integer results instead.
mysql no longer needs a database argument.
HAVING should be. According to ANSI, it should
be after GROUP BY but before ORDER BY. MySQL Version 3.20
incorrectly had it last.
USE DATABASE to start using another database.
mysqld doesn't crash even if you haven't done a
ulimit -n 256 before starting mysqld.
errno.
This makes Linux systems much safer!
SELECT.
LIKE on number key.
--table option to mysql to print in table format.
Moved time and row information after query result.
Added automatic reconnect of lost connections.
!= as a synonym for <>.
VERSION() to make easier logs.
ftruncate() call in MIT-pthreads. This made isamchk
destroy the `.ISM' files on (Free)BSD 2.x systems.
__P_ patch in MIT-pthreads.
NULL
if the returned string should be longer than max_allowed_packet bytes.
INTERVAL type to ENUM, because
INTERVAL is used in ANSI SQL.
JOIN + GROUP + INTO OUTFILE,
the result wasn't grouped.
LIKE with '_' as last character didn't work. Fixed.
TRIM() function.
CURTIME().
ENCRYPT() function by Zeev Suraski.
FOREIGN KEY syntax skipping. New reserved words:
MATCH, FULL, PARTIAL.
mysqld now allows IP number and hostname to the --bind-address
option.
SET OPTION CHARACTER SET cp1251_koi8 to enable conversions of
data to/from cp1251_koi8.
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.
ALTER TABLE tbl_name ALTER COLUMN col_name SET DEFAULT
NULL.
CHAR and BIT as synonyms for CHAR(1).
INSERT ... SELECT ... GROUP BY didn't work in some cases. An
Invalid use of group function error occurred.
LIMIT, SELECT now always uses keys instead of record
scan. This will give better performance on SELECT and a WHERE
that matches many rows.
BIT_OR() and BIT_AND().
CHECK and REFERENCES.
CHECK is now a reserved word.
ALL option to GRANT for better compatibility. (GRANT
is still a dummy function.)
ORDER BY and GROUP BY with NULL columns.
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.
--flush-logs option to mysqladmin.
STATUS to mysql.
ORDER BY/GROUP BY because of bug in gcc.
INSERT ... SELECT ... GROUP BY.
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.
TINYTEXT, TEXT, MEDIUMTEXT and
LONGTEXT. These are actually BLOBtypes, but all searching is
done in case-insensitive fashion.
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.
configure issues.
test-select works.
--enable-unix-socket=pathname option to configure.
SUM() functions.
For example, you can now use SUM(column)/COUNT(column).
PI(), ACOS(), ASIN(), ATAN(), COS(),
SIN() and TAN().
net_print() in `procedure.cc'.
SELECT ... INTO OUTFILE syntax.
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.
WHERE const op field.
NULL fields.
--pid-file=# option to mysqld.
FROM_UNIXTIME(), originally by Zeev Suraski.
BETWEEN in range optimizer (Did only test = of the first
argument).
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!
sigwait and sigset
defines).
configure should now be able to detect the last argument to
accept().
-O tmp_table_size=# to mysqld.
FROM_UNIXTIME(timestamp) which returns a date string in
'YYYY-MM-DD HH:MM:DD' format.
SEC_TO_TIME(seconds) which returns a string in
'HH:MM:SS' format.
SUBSTRING_INDEX(), originally by Zeev Suraski.
mysqld doesn't work on it yet.
pthread_create to work.
mysqld doesn't accept hostnames that start with digits followed by a
'.', because the hostname may look like an IP number.
--skip-networking option to mysqld, to only allow socket
connections. (This will not work with MIT-pthreads!)
free() that killed the server on
CREATE DATABASE or DROP DATABASE.
mysqld -O options to better names.
-O join_cache_size=# option to mysqld.
-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''.
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.
query() in
mysqlperl to take a query with \0 in it.
YYMMDD) didn't work.
UPDATE
clause.
SELECT * INTO OUTFILE, which didn't correctly if the outfile already
existed.
mysql now shows the thread ID when starting or doing a reconnect.
--new, but it crashes core a lot yet...
isam library should be relatively 64-bit clean.
isamchk which can detect and fix more problems.
isamlog.
mysqladmin: you can now do mysqladmin kill 5,6,7,8 to kill
multiple threads.
-O backlog=# option to mysqld.
ALTER TABLE now returns warnings from field conversions.
ASCII().
BETWEEN(a,b,c). Use the standard ANSI
synax instead: expr BETWEEN expr AND expr.
SUM() functions.
tbl_name.field_name in UPDATE.
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.
INTERVAL, EXPLAIN, READ,
WRITE, BINARY.
CHAR(num,...).
IN. This uses a binary search to find a match.
LOCK TABLES tbl_name [AS alias] {READ|WRITE} ...
--log-update option to mysqld, to get a log suitable for
incremental updates.
EXPLAIN SELECT ... to get information about how the
optimizer will do the join.
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.
0x###### which can be used as a string
(default) or a number.
FIELD_TYPE_CHAR is renamed to FIELD_TYPE_TINY.
DEFAULT values no longer need to be NOT NULL.
ENUM
SET
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.
WHERE with expressions.
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.
-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.
mysqlperl version. It is now compatible with msqlperl-0.63.
DBD module available at http://www.mysql.com/Downloads/Contrib/
site.
STD() (standard deviation).
mysqld server is now compiled by default without debugging
information. This will make the daemon smaller and faster.
--basedir option to
mysqld. All other paths are relative in a normal installation.
BLOB columns sometimes contained garbage when used with a SELECT
on more than one table and ORDER BY.
GROUP BY work as expected
(ANSI SQL extension).
Example:
mysql> SELECT id,id+1 FROM table GROUP BY id;
MYSQL_PWD was reversed. Now MYSQL_PWD is
enabled as default in the default release.
mysqld to core dump with
Arithmetic error on Sparc-386.
--unbuffered option to mysql, for new mysqlaccess.
BLOB columns and the functions IS NULL and
IS NOT NULL in the WHERE clause.
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.
safe_mysqld to check for running daemon.
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.
SELECT ... GROUP BY.
WHERE with many unoptimizable brace levels.
get_hostname, only the IP is checked.
Previously, you got Access denied.
INSERT INTO ... SELECT ... WHERE could give the error
Duplicated field.
safe_mysqld to make it ``safer''.
LIKE was case sensitive in some places and case insensitive in others.
Now LIKE is always case insensitive.
'#' anywhere on the line.
SET OPTION SQL_SELECT_LIMIT=#. See the FAQ for more details.
mysqlaccess script.
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.
UNIX_TIMESTAMP(timestamp_column).
mysqld to work around a bug in MIT-pthreads. This makes multiple
small SELECT operations 20 times faster. Now lock_test.pl should
work.
mysql_FetchHash(handle) to mysqlperl.
mysqlbug script is now distributed built to allow for reporting
bugs that appear during the build with it.
getpwuid() instead of
cuserid().
SELECT optimizer when using many tables with the same
column used as key to different tables.
GRANT command to satisfy Powerbuilder.
packets out of order when using MIT-pthreads.
fcntl() fails. Thanks to Mike Bretz for finding this bug.
termbits from `mysql.cc'. This conflicted with
glibc 2.0.
SELECT as superuser without a database.
SELECT with group calculation to outfile.
-p or --password option to mysql without
an argument, the user is solicited for the password from the tty.
MYSQL_PWD (by Elmar Haneke).
kill to mysqladmin to kill a specific
MySQL thread.
AUTO_INCREMENT key with ALTER_TABLE.
AVG() gave too small value on some SELECTs with
GROUP BY and ORDER BY.
DATETIME type (by Giovanni Maruzzelli
maruzz@matrice.it).
DONT_USE_DEFAULT_FIELDS works.
CREATE INDEX.
DATE, TIME and
TIMESTAMP.
OR of multiple tables (gave empty set).
DATE and TIME types.
SELECT with AND-OR levels.
LIMIT and ORDER BY.
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.)
INSERT.
SELECT ... WHERE ... = NULL.
glibc 2.0. To get glibc to work, you should
add the `gibc-2.0-sigwait-patch' before compiling glibc.
ALTER TABLE when changing a NOT NULL field to
allow NULL values.
CREATE TABLE.
CREATE TABLE now allows FLOAT(4) and FLOAT(8) to mean
FLOAT and DOUBLE.
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.
WHERE const op field (by bonis@kiss.de).
SELECT ... INTO OUTFILE, all temporary tables are ISAM
instead of HEAP to allow big dumps.
ALTER TABLE according to SQL92.
--port and --socket options to all utility programs and
mysqld.
readdir_r(). Now mysqladmin create database
and mysqladmin drop database should work.
tempnam(). This should fix the ``sort
aborted'' bug.
sql_update. This fixed slow updates
on first connection. (Thanks to Vaclav Bittner for the test.)
INSERT INTO ... SELECT ...
MEDIUMBLOB fixed.
ALTER TABLE and BLOBs.
SELECT ... INTO OUTFILE now creates the file in the current
database directory.
DROP TABLE now can take a list of tables.
DESCRIBE (DESC).
make_binary_distribution.
configure's
C++ link test.
--without-perl option to configure.
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.
ALTER TABLE and multi-part keys.
ALTER TABLE, SELECT ... INTO OUTFILE and
LOAD DATA INFILE.
NOW().
mysql/user table.
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.
lock_test.pl test fail.
status to mysqladmin for short logging.
-k option to mysqlshow, to get key information for a table.
mysqldump.
configure cannot find a -lpthreads
library.
program --help.
RAND([init]).
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.
mysql_get_client_info().
mysqld now uses the N_MAX_KEY_LENGTH from `nisam.h' as
the maximum allowed key length.
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).
mysql_fetch_lengths(MYSQL_RES *), which
returns an array of column lengths (of type uint).
IS NULL in WHERE clause.
SELECT option STRAIGHT_JOIN to tell the optimizer that
it should join tables in the given order.
'--' in `mysql.cc'
(Postgres syntax).
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;
SUM(function) (could cause a core dump).
AUTO_INCREMENT placement in the SQL query:
INSERT into table (auto_field) values (0);inserted 0, but it should insert an
AUTO_INCREMENT value.
mysql now allows doubled '' or "" within strings for
embedded ' or ".
EXP(), LOG(), SQRT(), ROUND(), CEILING().
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.
readline library from bash-2.0.
configure and makefiles (and related source).
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.
FIELDS() to ELT().
Changed SQL function INTERVALL() to INTERVAL().
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.
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.
sql_acl (core on new connection).
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.
CONCAT() and WEEKDAY().
mysqld to be compiled with SunPro
compiler.
'(' 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.
configure and Automake.
It will make porting much easier. The readline library is included
in the distribution.
DBD will follow when the new DBD code
is ported.
mysqld can now be started with Swedish
or English (default) error messages.
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.
BLOB and TIMESTAMP) are corrected.
TIMESTAMP now returns different date information depending on its
create length.
'_'.
Version 3.19 is quite old now, and should be avoided if possible. This information is kept here for historical purposes only.
DATABASE(), USER(), POW(),
LOG10() (needed for ODBC).
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.
SUM(),
AVG()...) didn't work together. Fixed.
mysqldump: Didn't send password to server.
'Locked' to process list as info if a query is
locked by another query.
IF(arg,syntax_error,syntax_error) crashed.
CEILING(), ROUND(), EXP(), LOG() and SQRT().
BETWEEN to handle strings.
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.
BLOB
fields, the BLOB was garbage on output.
DISTINCT with calculated columns.
Go to the first, previous, next, last section, table of contents.