| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
This appendix lists the changes from version to version in the MySQL source code.
We are now working actively on MySQL 4.1 & 5.0 and will only provide critical bug fixes for MySQL 4.0 and MySQL 3.23. We update this section as we add new features, so that everybody can follow the development.
Our TODO section contains what further plans we have for 4.1 & 5.0. 「1.6 MySQL の今後(TODO)」 節 参照 .
Note that we tend to update the manual at the same time we make changes to MySQL. If you find a version listed here that you can't find on the MySQL download page (http://www.mysql.com/downloads/ ), this means that the version has not yet been released!
The date mentioned with a release version is the date of the last BitKeeper ChangeSet that this particular release has been based on, not the date when the packages have been made available. The binaries are usually made available a few days after the date of the tagged ChangeSet - building and testing all packages takes some time.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
For the time being, version 5.0 is only available in source code. 「2.3.4 開発ソースツリーからのインストール」 節 参照 .
The following changelog shows what has already been done in the 5.0 tree:
SELECT INTO list_of_vars, which can be of mixed,
that is, global and local type.
SET
@a=10; then SELECT @A; will now return 10. Of course,
the content of the variable is still case sensitive; only the name of
this variable is case insensitive.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Version 4.1 of the MySQL server includes many enhancements and new features. Binaries for this version are available for download at http://www.mysql.com/downloads/mysql-4.1.html .
INSERT ... ON DUPLICATE KEY UPDATE ... syntax. This allows you to
UPDATE an existing row if the insert would cause a duplicate value
in a PRIMARY or UNIQUE key. (REPLACE allows you to
overwrite an existing row, which is something entirely different.)
「6.4.3 INSERT 構文」 節 参照 .
GROUP_CONCAT() aggregate function.
「6.3.7 GROUP BY 節で使用する関数と修飾子」 節 参照 .
MyISAM tables with many tunable parameters. You can
have multiple key caches, preload index into caches for batches...
BTREE index on HEAP tables.
SHOW WARNINGS shows warnings for the last command.
「SHOW WARNINGS」 節 参照 .
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table2 LIKE
table1.
HELP command that can be used in the mysql
command line client (and other clients) to get help for SQL statements.
For a full list of changes, please refer to the changelog sections for each individual 4.1.x release.
| D.2.1 Changes in release 4.1.2 (not released yet) | ||
| D.2.2 Changes in release 4.1.1 (01 Dec 2003) | ||
| D.2.3 Changes in release 4.1.0 (03 Apr 2003: Alpha) |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Functionality added or changed:
Bugs fixed:
postinstall script
(mysql_install_db was called with an obsolete argument).
MySQL-server-4.1.1-0 to MySQL-server-4.1.1-1. The
other RPMs were not affected by this change.
CHECK TABLE that sometimes
resulted in a spurious error Found key at page ..... that points to record
outside datafile for a table with a FULLTEXT index.
ujis) data.
OPTIMIZE TABLE, REPAIR
TABLE etc) was run on the slave, this could sometimes stop the slave
SQL thread (this did not lead to any corruption; one just had to type
START SLAVE to get replication going again). (Bug #1858)
UPDATE could produce an
incorrect complaint that some record was not found in one table, if the
UPDATE was preceded by a INSERT ... SELECT. (Bug #1701)
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Functionality added or changed:
IGNORE option for DELETE statement.
mysql_set_server_option() C API client function to allow multiple
statement handling in the server to be enabled or disabled.
mysql_next_result() C API function now returns -1 if there
are no more result sets.
CLIENT_MULTI_QUERIES connect option flag to
CLIENT_MULTI_STATEMENTS. To allow for a transition period, the old
option will continue to be recognized for a while.
DEFAULT before table and database default character set.
This enables us to use ALTER TABLE table_name ... CHARACTER SET=...
to change the character set for all CHAR, VARCHAR, and
TEXT columns in a table.
MATCH ... AGAINST( ... WITH QUERY EXPANSION) and the
ft_query_expansion_limit server variable.
ft_max_word_len_for_sort server variable.
utf8 character set. (The Unicode ucs2 character set is not
yet supported.)
MATCH ... AGAINST ( ... IN BOOLEAN MODE) no longer
matches partial words.
BIT_XOR() for bitwise XOR operations.
START SLAVE statement now supports an UNTIL clause for
specifying that the slave SQL thread should be started but run only until it
reaches a given position in the master's binary logs or in the slave's relay logs.
INSERT statements, not just for
multiple-row INSERT statements. Previously, it was necessary to set
SQL_WARNINGS=1 to generate warnings for single-row statements.
delimiter (\d) command to the mysql command-line
client for changing the statement delimiter (terminator).
The default delimiter is semicolon.
CHAR, VARCHAR, and TEXT columns now have lengths measured
in characters rather than in bytes.
The character size depends on the column's character set.
This means, for example, that a CHAR(n) column
for a multi-byte character set will take more storage than before.
Similarly, index values on such columns are measured in characters, not bytes.
LIMIT no longer accepts negative arguments
(they used to be treated as very big positive numbers before).
DATABASE() function now returns NULL rather than the empty
string if there is no database selected.
--sql-mode=NO_AUTO_VALUE_ON_ZERO option to suppress the usual
behavior of generating the next sequence number when zero is stored in
an AUTO_INCREMENT column. With this mode enabled, zero is stored as
zero; only storing NULL generates a sequence number.
user table, not 45-byte passwords as in 4.1.0.
Any 45-byte passwords created for 4.1.0 must be reset after running the
mysql_fix_privilege_tables script.
mysql_prepare_result() function to
mysql_get_metadata() as the old name was confusing.
DROP USER 'username'@'hostname' statement to drop an account
that has no privileges.
xxx_clear() function for each aggregate function XXX().
CONCAT_WS() function no longer skips empty strings.
ADDTIME(), DATE(), DATEDIFF(), LAST_DAY(),
MAKEDATE(), MAKETIME(), MICROSECOND(), SUBTIME(),
TIME(), TIMEDIFF(), TIMESTAMP(), UTC_DATE(),
UTC_TIME(), UTC_TIMESTAMP(), and WEEKOFYEAR()
functions.
ADDDATE() and SUBDATE().
The second argument now may be a number representing the number of days to
be added to or subtracted from the first date argument.
type values DAY_MICROSECOND,
HOUR_MICROSECOND, MINUTE_MICROSECOND,
SECOND_MICROSECOND, and MICROSECOND
for DATE_ADD(), DATE_SUB(), and EXTRACT().
%f microseconds format specifier for DATE_FORMAT() and
TIME_FORMAT().
SELECT does not use indexes properly
now are written to the slow query log when long log format is used.
MERGE table from MyISAM tables in
different databases. Formerly, all the MyISAM tables had to be in the
same database, and the MERGE table had to be created in that database
as well.
COMPRESS(), UNCOMPRESS(), and
UNCOMPRESSED_LENGTH() functions.
SET sql_mode='mode' for a complex mode (like ANSI), we
now update the sql_mode variable to include all the individual options
implied by the complex mode.
ROLLUP, which
provides summary rows for each GROUP BY level.
SQLSTATE codes for all server errors.
mysql_sqlstate() and mysql_stmt_sqlstate() C API client
functions that return the SQLSTATE error code for the last error.
TIME columns with hour values greater than 24 were returned incorrectly
to the client.
ANALYZE, OPTIMIZE, REPAIR, and FLUSH statements
are now stored in the binary log and thus replicated to slaves.
This logging does not occur if the optional NO_WRITE_TO_BINLOG keyword
(or its alias LOCAL) is given. Exceptions are that
FLUSH LOGS, FLUSH MASTER, FLUSH SLAVE, and
FLUSH TABLES WITH READ LOCK are not logged in any case.
For a syntax example, see 「FLUSH」 .
RELAY_LOG_PURGE to enable or disable automatic
relay log purging.
LOAD DATA now produces warnings that can be fetched with
SHOW WARNINGS.
CREATE TABLE table2 (LIKE table1)
that creates an empty table table2 with a definition that is
exactly the same as table1, including any indexes.
CREATE TABLE table_name (...) TYPE=storage_engine now generates a
warning if the named storage engine is not available. The table is still
created as a MyISAM table, as before.
PURGE BINARY LOGS as an alias for PURGE MASTER LOGS.
PURGE LOGS statement that was added in in version 4.1.0.
The statement now should be issued as PURGE MASTER LOGS or
PURGE BINARY LOGS.
SHOW BDB LOGS as an alias for SHOW LOGS.
SHOW MASTER LOGS (which had been deleted in version
4.1.0) as an alias for SHOW BINARY LOGS.
Slave_IO_State and Seconds_Behind_Master columns
to the output of SHOW SLAVE STATUS.
Slave_IO_State indicates the state of the slave I/O thread, and
Seconds_Behind_Master indicates the number of seconds by
which the slave is late compared to the master.
--lower-case-table-names=1 now also makes aliases case
insensitive. (Bug #534)
Bugs fixed:
UNION
operations. The types and lengths now are determined taking into
account values for all SELECT statements in the UNION,
not just the first SELECT.
[CREATE | REPLACE| INSERT] ... SELECT statements.
HASH, BTREE, RTREE, ERRORS, and
WARNINGS no longer are reserved words. (Bug #724)
ROLLUP when all tables were const tables.
(Bug #714)
UNION that prohibited NULL values from being
inserted into result set columns where the first SELECT of the
UNION retrieved NOT NULL columns.
WHERE clause
bigger than outer query WHERE clause. (Bug #726)
MyISAM tables with FULLTEXT indexes
created in 4.0.x to be unreadable in 4.1.x.
REPAIR TABLE ... USE_FRM when used
with tables
that contained TIMESTAMP columns and were created in 4.0.x.
ORDER BY/GROUP BY
clauses. (Bug #442)
INSERT/REPLACE statements. (Bug #446)
CREATE FULLTEXT INDEX syntax illegal.
SELECT that required a temporary table
(marked by Using temporary in EXPLAIN output)
was used as a derived table in EXPLAIN command. (Bug #251)
DELETE
from a big table with
a new (created by MySQL-4.1) full-text index.
LAST_INSERT_ID() now returns 0 if the last INSERT statement
didn't insert any rows.
BEGIN, in the
first relay log.) (Bug #53)
CONNECTION_ID() now is properly replicated. (Bug #177)
PASSWORD() function in 4.1 is now properly replicated.
(Bug #344)
UNION operations that involved temporary tables.
DERIVED TABLES when EXPLAIN is
used on a DERIVED TABLES with a join.
DELETE with ORDER BY and
LIMIT caused by an uninitialized array of reference pointers.
USER() function caused by an error in the size of
the allocated string.
UNION caused by the empty select list and
a non-existent column being used in some of the individual SELECT
statements.
FLUSH LOGS was
issued on the master. (Bug #254)
REQUIRE SSL option specified for
their accounts.
INSERT INTO t VALUES(@a), where @a had never
been set by this connection before), the slave could replicate the
query incorrectly if a previous transaction on the master used a user
variable of the same name. (Bug #1331)
? prepared statement
parameter as the argument to certain functions or statement clauses caused
a server crash when mysql_prepare() was invoked. (Bug #1500)
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Functionality added or changed:
user table.
CRC32() function to compute cyclic redundancy check value.
localhost.
REPAIR of MyISAM tables now uses less temporary disk space when
sorting char columns.
DATE/DATETIME checking is now a bit stricter to support the
ability to automatically distinguish between date, datetime, and time
with microseconds. For example, dates of type YYYYMMDD HHMMDD are no
longer supported; you must either have separators between each
DATE/TIME part or not at all.
help
week in the mysql client and get help for the week()
function.
mysql_get_server_version() C API client function.
libmysqlclient that fetched column defaults.
record_in_range() method to MERGE tables to be
able to choose the right index when there are many to choose from.
RAND() and user variables @var.
ANSI_QUOTES on the fly.
EXPLAIN SELECT now can be killed. 「KILL」 節 参照 .
REPAIR TABLE now can be killed. 「KILL」 節 参照 .
USE INDEX,
IGNORE INDEX, and FORCE INDEX.
DROP TEMPORARY TABLE now drops only temporary tables and doesn't
end transactions.
UNION in derived tables.
TIMESTAMP is now returned as a string of type
'YYYY-MM-DD HH:MM:SS' and different timestamp lengths are not supported.
This change was necessary for SQL standards compliance. In a future version, a further change will be made (backward compatible with this change), allowing the timestamp length to indicate the desired number of digits of fractions of a second.
MYSQL_FIELD structure.
CREATE TABLE foo (a INT not null primary key) the
PRIMARY word is now optional.
CREATE TABLE the attribute SERIAL is now an alias for
BIGINT NOT NULL AUTO_INCREMENT UNIQUE.
SELECT ... FROM DUAL is an alias for SELECT ....
(To be compatible with some other databases).
CHAR/VARCHAR it's now
automatically changed to TEXT or BLOB; One will get a
warning in this case.
BLOB/TEXT types with the
syntax BLOB(length) and TEXT(length). MySQL will
automatically change it to one of the internal BLOB/TEXT
types.
CHAR BYTE is an alias for CHAR BINARY.
VARCHARACTER is an alias for VARCHAR.
integer MOD integer and integer DIV integer.
SERIAL DEFAULT VALUE added as an alias for AUTO_INCREMENT.
TRUE and FALSE added as alias for 1 and 0, respectively.
SELECT .. LIMIT 0 to return proper row count for
SQL_CALC_FOUND_ROWS.
--tmpdir=dirname1:dirname2:dirname3.
SELECT * from t1 where t1.a=(SELECT t2.b FROM t2).
SELECT a.col1, b.col2
FROM (SELECT MAX(col1) AS col1 FROM root_table) a,
other_table b
WHERE a.col1=b.col1;
|
CONVERT(... USING ...) syntax for converting string values between
character sets.
BTREE index on HEAP tables.
CREATE TABLE.
SHOW FULL COLUMNS FROM table_name shows column comments.
ALTER DATABASE.
SHOW [COUNT(*)] WARNINGS shows warnings from the last command.
CREATE TABLE
... SELECT by defining the column in the CREATE part.
CREATE TABLE foo (a tinyint not null) SELECT b+1 AS 'a' FROM bar; |
expr SOUNDS LIKE expr same as SOUNDEX(expr)=SOUNDEX(expr).
VARIANCE(expr) function returns the variance of expr
CREATE
[TEMPORARY] TABLE [IF NOT EXISTS] table (LIKE table). The table can
be either normal or temporary.
--reconnect and --disable-reconnect for the
mysql client, to reconnect automatically or not if the
connection is lost.
START SLAVE (STOP SLAVE) no longer returns an error
if the slave is already started (stopped); it returns a
warning instead.
SLAVE START and SLAVE STOP are no longer accepted by the query
parser; use START SLAVE and STOP SLAVE instead.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Version 4.0 of the MySQL server includes many enhancements and new features:
InnoDB storage engine is now included in the standard binaries,
adding transactions, row-level locking, and foreign keys.
「InnoDB」 節 参照 .
MERGE tables, now supporting INSERT statements and
AUTO_INCREMENT.
「MERGE」 節 参照 .
UNION syntax in SELECT.
「UNION」 節 参照 .
DELETE statements.
「DELETE」 節 参照 .
libmysqld, the embedded server library.
「libmysqld」 節 参照 .
GRANT privilege options for even tighter control and
security.
「GRANT」 節 参照 .
GRANT system, particularly
useful for ISPs and other hosting providers.
「4.4.7 ユーザリソースの制限」 節 参照 .
SET OPTION」 節 参照 .
For a full list of changes, please refer to the changelog sections for each individual 4.0.x release.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Functionality added or changed:
WEEK(..., mode) function.
「WEEK(date」 節 参照 .
(Bug #1178)
mysqld from MySql
to MySQL.
This should not affect usage, because service names are not case sensitive.
mysqld as a service on Windows systems, mysqld
will read startup options in option files from the option group with the same
name as the service name.
(Except when the service name is MySQL).
Bugs fixed:
EXPLAIN if query contained an
ORDER BY NULL clause. (Bug #1335)
DROP DATABASE. (Bug #1898)
AND/OR queries. (Bug #1828)
ORDER BY when ordering by expression and identifier.
(Bug #1945)
HANDLER when an ALTER TABLE was
executed in a different connection. (Bug #1826)
trunc* operator of full-text search which
sometimes caused MySQL not to find all matched rows.
DECIMAL column type.
REF access plan was
preferred to more efficient RANGE on another column.
mysqld --install mysql --defaults-file=path-to-file.
const tables
(such as one-row tables) and non-constant expression
(such as RAND()). (Bug #1271)
SQL_CALC_FOUND_ROWS into
account if LIMIT clause was present. (Bug #1274)
mysqlbinlog now asks for a password at the console when the -p
or --password option is used with no argument. This is consistent with
the way that other clients such mysqladmin and mysqldump
already behave. Note: A consequence of this change is that it is no
longer possible to invoke mysqlbinlog as mysqlbinlog -p
pass_val (with a space between the -p option and the following
password value).
(Bug #1595)
STOP SLAVE was
issued.
A->B->C, if 2 sessions on A
updated temporary tables of the same name at the same time, the binary log
of B became incorrect, resulting in C becoming confused.
(Bug #1686)
A->B->C, if STOP SLAVE
was issued on B while it was replicating a temporary table from
A, then when START SLAVE was issued on B, the binary log
of B became incorrect, resulting in C becoming confused.
(Bug #1240)
MASTER_LOG_FILE and MASTER_LOG_POS were not
specified, CHANGE MASTER used the coordinates of the slave I/O
thread to set up replication, which broke replication if the slave SQL
thread lagged behind the slave I/O thread. This caused the slave
SQL thread to lose some events. The new behavior is to use the
coordinates of the slave SQL thread instead.
「CHANGE MASTER TO」 節 参照 .
(Bug #1870)
TIMESTAMP or
DATETIME value checks of year, month, day, hour, minute
and second ranges are performed and numbers representing illegal
timestamps are converted to 0 value. This behavior is consistent
with manual and with behavior of string to
TIMESTAMP/DATETIME conversion. (Bug #1448)
BIT_AND() and BIT_OR() group functions
returned incorrect value if SELECT used a temporary table and
no rows were found. (Bug #1790)
BIT_AND() still returning signed value for an
empty set in some cases. (Bug #1972)
^ (XOR) and >> (bit shift) still returning
signed value in some cases. (Bug #1993)
OPTIMIZE TABLE, REPAIR
TABLE etc) was run on the slave, this could sometimes stop the slave
SQL thread (this did not led to any corruption; one just had to type
START SLAVE to get replication going again). (Bug #1858)
UPDATE could produce a
wrong complain that some record was not found in one table, if the
UPDATE was preceded by a INSERT ... SELECT. (Bug #1701)
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Functionality added or changed:
mysqladmin debug. This works only on systems that support the
mallinfo() call (like newer Linux systems).
range_alloc_block_size, query_alloc_block_size,
query_prealloc_size, transaction_alloc_block_size, and
transaction_prealloc_size.
mysqlbinlog now reads option files. To make this work one must now
specify --read-from-remote-server when reading binary logs from
a MySQL server. (Note that using a remote server is deprecated and may
disappear in future mysqlbinlog versions).
SIGPIPE signals also for non-threaded programs. The blocking is moved
from mysql_init() to mysql_server_init(), which is
automatically called on the first call to mysql_init().
--libs_r and --include options to mysql_config.
`> prompt for mysql. This prompt is similar to the
'> and "> prompts, but indicates that an identifier
quoted with backticks was begun on an earlier line and the closing backtick
has not yet been seen.
mysql_install_db to be able to use the local machine's IP
address instead of the host name when building the initial grant tables if
skip-name-resolve has been specified. This
option can be helpful on FreeBSD to avoid thread-safety problems with the
FreeBSD resolver libraries. (Thanks to Jeremy Zawodny for the patch.)
--slave-load-tmpdir option. All these files are
needed when the slave resumes replication after you restore the slave's data.
Bugs fixed:
ERROR 14: Can't change size of file (Errcode: 2)
on Windows in DELETE FROM table_name without a WHERE clause or
TRUNCATE TABLE table_name, when table_name is a MyISAM
table. (Bug #1397)
thr_alarm queue is full warnings after
increasing the max_connections variable with SET GLOBAL.
(Bug #1435)
LOCK TABLES to work when Lock_tables_priv is granted on the
database level and Select_priv is granted on the table level.
FLUSH QUERY CACHE on queries that use same table
several times (Bug #988).
SQL_WARNINGS) to NULL.
ERROR 2013: Lost connection
to MySQL server during query for queries that lasted longer than 30 seconds,
if the client didn't specify a limit with mysql_options(). Users of
4.0.15 on Windows should upgrade to avoid this problem.
SELECT statement. (Bug #1194).
BLOB values with compressed tables.
This was a bug introduced in 4.0.14. It caused MySQL to regard some
correct tables containing BLOB values as corrupted.
(Bug #770, Bug #1304, and maybe Bug #1295)
SHOW GRANTS showed USAGE instead of the real column-level
privileges when no table-level privileges were given.
LOAD DATA FROM
MASTER dropped the corresponding database on the slave, thus erroneously
dropping tables that had no counterpart on the master and tables that
may have been excluded from replication using replicate-*-table
rules. Now LOAD DATA FROM MASTER no longer drops the database.
Instead, it drops only the tables that have a counterpart on the master
and that match the replicate-*-table
rules. replicate-*-db rules can still be used to include or exclude a
database as a whole from LOAD DATA FROM MASTER. A database will
also be included or excluded as a whole if there are some rules like
replicate-wild-do-table=db1.% or
replicate-wild-ignore-table=db1.%, as is already the case for
CREATE DATABASE and DROP DATABASE in replication. (Bug
#1248)
mysqlbinlog crashed with a segmentation fault when used with the
-h or --host option. (Bug #1258)
mysqlbinlog crashed with a segmentation fault when used on a binary log
containing only final events for LOAD DATA. (Bug #1340)
OPENSSL_DISABLE_OLD_DES_SUPPORT
option was enabled).
LOAD DATA INFILE command from its master.
The bug was that one slave MySQL server sometimes
deleted the `SQL_LOAD-*' files (used for replication of
LOAD DATA INFILE and located in the slave-load-tmpdir directory,
which defaults to tmpdir) belonging to the other slave MySQL server of
this machine, if these slaves had the same slave-load-tmpdir directory.
When that happened, the other slave could not replicate
LOAD DATA INFILE and complained about not being able to open some
SQL_LOAD-* file. (Bug #1357)
LOAD DATA INFILE failed for a small file, the master forgot to
write a marker (a Delete_file event) in its binary log, so the slave
could not delete 2 files (`SQL_LOAD-*.info' and
`SQL_LOAD-*.data' from its tmpdir. (Bug #1391)
SQL_LOAD-*.info
file from tmpdir after successfully replicating a LOAD DATA
INFILE command. (Bug #1392)
DROP TEMPORARY TABLE
statements to the binary log for all temporary tables which the
connection had not explicitely dropped. MySQL forgot to backquote the
database and table names in the statement. (Bug #1345)
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
IMPORTANT:
If you are using this release on Windows, you should upgrade at least your
clients (any program that uses libmysql.lib) to 4.0.16 or above. This
is because the 4.0.15 release had a bug in the Windows client library that
causes Windows clients using the library to die with a Lost connection
to MySQL server during query error for queries that take more than 30
seconds. This problem is specific to Windows; clients on other platforms are
unaffected.
Functionality added or changed:
mysqldump now correctly quotes all identifiers when communicating
with the server. This assures that during the dump process, mysqldump
will never send queries to the server that result in a syntax error.
This problem is not related to the
mysqldump program's output, which was not changed. (Bug #1148)
MIN() and MAX()
report that they can return NULL (this is true because an
empty set will return NULL). (Bug #324)
mysqld server is
started on the same TCP/IP port as an already running mysqld server.
mysqld server variables wait_timeout,
net_read_timeout, and net_write_timeout now work on Windows.
One can now also set timeouts for read and writes in Windows clients with
mysql_options().
--sql-mode=NO_DIR_IN_CREATE to make it possible for
slaves to ignore INDEX DIRECTORY and
DATA DIRECTORY options given to CREATE TABLE.
When this is mode is on, SHOW CREATE TABLE will not show the
given directories.
SHOW CREATE TABLE now shows the INDEX DIRECTORY and
DATA DIRECTORY options, if they were specified when the table was
created.
open_files_limit server variable now shows the real open files limit.
MATCH ... AGAINST() in natural language mode
now treats words that are present
in more than 2,000,000 rows as stopwords.
.tar.gz) has been moved into a subdirectory docs.
「2.2.5 インストールレイアウト」 節 参照 .
info file in the binary
distributions. (Bug #1019)
libmysqld.a) by default. Due to a linking problem with non-gcc
compilers, it was not included in all packages of the initial 4.0.15
release. The affected packages were rebuilt and released as 4.0.15a.
「1.5.1.2 組み込み MySQL サーバ」 節 参照 .
BETWEEN with
non-constant limits. (Bug #991)
binlog-do-db and binlog-ignore-db options are tested
against the database on the master ( 「4.10.4 バイナリログ」 節 参照 ), and a
paragraph about how replicate-do-db, replicate-do-table
and analogous options are tested against the database and tables on the
slave ( 「4.11.6 レプリケーションスタートアップオプション」 節 参照 ).
SET PASSWORD
if it is configured to exclude the mysql database from
replication (using for example
replicate-wild-ignore-table=mysql.%). This was already the
case for GRANT and REVOKE since version 4.0.13 (though
there was Bug #980 in 4.0.13 & 4.0.14, which has been fixed in
4.0.15).
State column of SHOW
PROCESSLIST for replication threads and for MASTER_POS_WAIT()
and added the most common states for these threads to the
documentation, 「4.11.3 レプリケーションの実装の詳細」 節 参照 .
GRANT command that creates an anonymous user
(that is, an account with an empty username) no longer requires
FLUSH PRIVILEGES for the account to be recognized by the server.
(Bug #473)
CHANGE MASTER now flushes `relay-log.info'. Previously
this was deferred to the next run of START SLAVE, so if
mysqld was shutdown on the slave after CHANGE MASTER
without having run START SLAVE, the relay log's name and
position were lost. At restart they were reloaded from
`relay-log.info', thus reverting to their old (incorrect) values from
before CHANGE MASTER and leading to error messages
(as the old relay log did not exist any more) and the slave threads
refusing to start. (Bug #858)
Bugs fixed:
ALTER privilege on the
mysql.user table to execute random code or to gain shell access with
the UID of the mysqld process (thanks to Jedi/Sector One for spotting and
reporting this bug).
FORCE INDEX in a query that contained
"Range checked for each record" in the EXPLAIN output. (Bug #1172)
UPDATE of split dynamic rows.
The symptom was that the table had a corrupted delete-link if mysqld
was shut down or the table was checked directly after the update.
Can't unlock file error when running
myisamchk --sort-index on Windows. (Bug #1119)
key_buffer_size while
the key cache was actively used. (Bug #1088)
MyISAM and ISAM when a row is updated
in a table with a large number of columns and at least one BLOB/TEXT
column.
UNION and LIMIT #,# when
one didn't use braces around the SELECT parts.
UNION and ORDER BY .. LIMIT #
when one didn't use braces around the SELECT parts.
SELECT SQL_CALC_FOUND_ROWS ... UNION ALL ... LIMIT #
where FOUND_ROWS() returned incorrect number of rows.
1+1-1+1-1... in certain combinations. (Bug #871)
FULLTEXT index
from being marked as "analyzed".
SHOW CREATE TABLE is always larger than the data length.
The only known application that was affected by the old behavior was
Borland dbExpress, which truncated the output from the command.
(Bug #1064)
tis620 character
set. (Bug #1116)
ISAM bug in MAX() optimization.
myisamchk --sort-records=N no longer marks table as crashed if
sorting failed because of an inappropriate key. (Bug #892)
MyISAM compressed table handling that sometimes
made it impossible to repair compressed table in "Repair by sort" mode.
"Repair with keycache" (myisamchk --safe-recover) worked, though.
(Bug #1015)
PRIMARY key declared for a column
that is not explicitly marked NOT NULL was sorted after a
UNIQUE key for a NOT NULL column).
INTERVAL when applied to a DATE value.
(Bug #792)
XOR evaluation in WHERE clause. (Bug #992)
LEFT JOIN)
when ON condition is always false, and range search in used.
(Bug #926)
MATCH ... AGAINST() in some
joins. (Bug #942)
MERGE tables do not ignore "Using index" (from EXPLAIN output)
anymore.
myisamchk --sort-records crash when used on compressed table.
ALTER TABLE and related commands such as CREATE INDEX.
(Bug #712)
LOAD DATA FROM MASTER when
the master was running without the --log-bin option. (Bug #934)
REQUIRE SSL option specified for
their accounts.
GRANT
or REVOKE queries even if it was configured to exclude the
mysql database from replication (for example, using
replicate-wild-ignore-table=mysql.%). (Bug #980)
Last_Errno and Last_Error fields in the output of
SHOW SLAVE STATUS are now cleared by CHANGE MASTER and
when the slave SQL thread starts. (Bug #986)
RESET SLAVE does not change
connection information (master host, port, user, and
password), whereas it does. The statement resets these to the startup options
(master-host etc) if there were some. (Bug #985)
SHOW SLAVE STATUS now shows correct information (master host,
port, user, and password) after RESET SLAVE
(that is, it shows the new values, which are copied from the startup
options if there were some). (Bug #985)
Exec_Master_Log_Pos and problems
with MASTER_POS_WAIT() in A->B->C replication setup. (Bug #1086)
mysqlbinlog when
--position=x was used with x being between a
Create_file event and its fellow Append_block,
Exec_load or Delete_file events. (Bug #1091)
mysqlbinlog printed superfluous warnings when using
--database, which caused syntax errors when piped to
mysql. (Bug #1092)
mysqlbinlog --database filter LOAD DATA INFILE too
(previously, it filtered all queries except LOAD DATA
INFILE). (Bug #1093)
mysqlbinlog in some cases forgot to put a leading '#' in
front of the original LOAD DATA INFILE (this command is
displayed only for information, not to be run; it is later reworked to
LOAD DATA LOCAL with a different filename, for execution by
mysql). (Bug #1096)
binlog-do-db and binlog-ignore-db incorrectly filtered
LOAD DATA INFILE (it was half-written to the binary log). This
resulted in a corrupted binary log, which could cause the slave to
stop with an error. (Bug #1100)
InnoDB table)
was updated, and later in the same transaction a
non-transactional table (such as a MyISAM table) was
updated using the updated content of the transactional table
(with INSERT ... SELECT for example), the queries were written
to the binary log in an incorrect order. (Bug #873)
INSERT ... SELECT updated a
non-transactional table, and ROLLBACK was issued, no error was
returned to the client. Now the client is warned that some changes
could not be rolled back, as this was already the case for normal
INSERT. (Bug #1113)
STOP SLAVE was run while the slave
SQL thread was in the middle of a transaction, and then CHANGE
MASTER was used to point the slave to some non-transactional
statement, the slave SQL thread could get confused (because it would
still think, from the past, that it was in a transaction).
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Functionality added or changed:
InnoDB now supports indexing a prefix of a column. This means, in
particular, that BLOB and TEXT columns can be indexed in
InnoDB tables, which was not possible before.
INTERVAL(NULL, ...) returns -1.
INSERT from SELECT when the table into which the records
are inserted is also a table listed in the SELECT.
CREATE TABLE and INSERT from any UNION.
SQL_CALC_FOUND_ROWS option now always returns the total number
of rows for any UNION.
--table option from mysqlbinlog
to avoid repeating mysqldump functionality.
basedir=c:\mysql # installation directory).
max_seeks_for_key variable that can
be used to force the optimizer to use keys instead of table scans
even if the cardinality of the index is low.
LEFT JOIN to normal join in
some cases.
CHANGE MASTER command. 「4.11.8.1 CHANGE MASTER TO」 節 参照 .
--nice option to mysqld_safe to allow setting the
niceness of the mysqld process. (Thanks to Christian Hammers for
providing the initial patch.) (Bug #627)
--read-only option to cause mysqld to allow no updates
except from slave threads or from users with the SUPER privilege.
(Original patch from Markus Benning).
SHOW BINLOG EVENTS FROM x where x is less than 4 now
silently converts x to 4 instead of printing an error. The same change
was done for CHANGE MASTER TO MASTER_LOG_POS=x and
CHANGE MASTER TO RELAY_LOG_POS=x.
mysqld now only adds an interrupt handler for the SIGINT signal
if you start it with the new --gdb option. This is because some
MySQL users encountered strange problems when they accidentally sent SIGINT to
mysqld threads.
RESET SLAVE now clears the Last_Errno and
Last_Error fields in the output of SHOW SLAVE STATUS.
max_relay_log_size variable; the relay log will be rotated
automatically when its size exceeds max_relay_log_size. But if
max_relay_log_size is 0 (the default), max_binlog_size
will be used (as in older versions). max_binlog_size still
applies to binary logs in any case.
FLUSH LOGS now rotates relay logs in addition to the other types of
logs it already rotated.
Bugs fixed:
latin1_de character set was rewritten.
The old algorithm could not handle cases like "s@"a" > "ßa".
「4.7.1.1 ドイツ語キャラクタセット」 節 参照 . In rare cases it resulted in table
corruption.
ALTER TABLE ... UNION=(...) for MERGE table is now allowed
even if some underlying MyISAM tables are read-only. (Bug #702)
CREATE TABLE t1 SELECT x'41'. (Bug #801)
REPAIR on a table with a multi-part
auto_increment key where one part was a packed CHAR.
INSERT statements not being replicated in the
event of a FLUSH LOGS command or when the binary log exceeds
max_binlog_size. (Bug #791)
INTERVAL and GROUP BY or
DISTINCT. (Bug #807)
mysqlhotcopy so it actually aborts for unsuccessful
table copying operations. Fixed another bug so that it succeeds
when there are thousands of tables to copy. (Bug #812)
mysqlhotcopy failing to read options from option
files. (Bug #808)
FULLTEXT indexes even though it was possible (for example, in
SELECT * FROM t1 WHERE MATCH a,b AGAINST("index") > 0).
UNION operations.
SHOW TABLES and
similar commands.
max_user_connections.
HANDLER without an index now works properly when a table has deleted
rows. (Bug #787)
LOAD DATA in mysqlbinlog. (Bug #670)
SET CHARACTER SET DEFAULT works. (Bug #462)
MERGE table behavior in ORDER BY ... DESC queries.
(Bug #515)
PURGE MASTER LOGS or SHOW MASTER LOGS
when the binary log is off. (Bug #733)
DATETIME column and an integer
constant. (Bug #504)
mysqlbinlog. (Bug #672)
ERROR 1105: Unknown error that occurred for some SELECT
queries, where a column that was declared as NOT NULL was compared
with an expression that took NULL value.
mysql_real_connect() to use poll() instead of
select() to work around problem with many open files in the client.
MATCH ... AGAINST used with a
LEFT JOIN query.
mysqld variables
to 4294967295 when they are specified on the command line.
HANDLER ... READ statements, when a table is referenced
via an alias.
safe_malloc, which caused MySQL to
give "Freeing wrong aligned pointer" errors on SCO 3.2.
ALTER TABLE ... ENABLE/DISABLE KEYS could cause a core dump when
done after an INSERT DELAYED statement on the same table.
mysqld. (Bug #549)
INSERT ... SELECT into an AUTO_INCREMENT column
not replicate well. This bug is in the master, not in the slave.
(Bug #490)
INSERT ... SELECT statement inserted rows into a
non-transactional table, but failed at some point (for example, due to
a "Duplicate key" error), the query was not written to the binlog.
Now it is written to the binlog, with its error code, as all other
queries are. About the slave-skip-errors option for how to
handle partially completed queries in the slave, see 「4.11.6 レプリケーションスタートアップオプション」 . (Bug #491)
SET FOREIGN_KEY_CHECKS=0 was not replicated properly.
The fix probably will not be backported to 3.23.
LOAD DATA INFILE which had no IGNORE or
REPLACE clause on the master, was replicated with IGNORE.
While this is not a problem if the master and slave data are identical
(a LOAD that produces no duplicate conflicts on the master will
produce none on the slave anyway), which is true in normal operation, it
is better for debugging not to silently add the IGNORE. That way,
you can get an error message on the slave and discover that for some
reason, the data on master and slave are different and investigate why.
(Bug #571)
LOAD DATA INFILE printed an incomplete "Duplicate entry
'%-.64s' for key %d"' message (the key name and value were not mentioned)
in case of duplicate conflict (which does not happen in normal operation).
(Bug #573)
--debug, CHANGE MASTER
TO RELAY_LOG_POS could cause a debug assertion failure. (Bug #576)
LOCK TABLES WRITE on an InnoDB table, commit could
not happen, if the query was not written to the binary log (for example, if
--log-bin was not used, or binlog-ignore-db was
used). (Bug #578)
DROP TABLE statements to its binlog, then the 4.0.13
slave would not notice the temporary tables have to be dropped, until the
slave mysqld server is restarted. This minor inconvenience is
fixed in 3.23.57 and 4.0.14 (meaning the master must be upgraded to
3.23.57 and the slave to 4.0.14 to remove the inconvenience). (Bug #254)
MASTER_POS_WAIT() was waiting, and the slave was idle, and
the slave SQL thread terminated, MASTER_POS_WAIT() would wait
forever. Now when the slave SQL thread terminates,
MASTER_POS_WAIT() immediately returns NULL ("slave
stopped"). (Bug #651)
RESET SLAVE; START SLAVE;, the Relay_Log_Space value
displayed by SHOW SLAVE STATUS was too big by four bytes. (Bug #763)
replicate-ignore-table and other similar rules), the slave
still checked if the query got the same error code (0, no error) as on
the master. So if the master had an error on the query (for example,
"Duplicate entry" in a multiple-row insert), then the slave stopped
and warned that the error codes didn't match. (Bug #797)
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Functionality added or changed:
PRIMARY KEY now implies NOT NULL. (Bug #390)
--enable-local-infile to match the Unix build configuration.
mysql-test-run. time does not
accept all required parameters on many platforms (for example, QNX) and timing
the tests is not really required (it's not a benchmark anyway).
SHOW MASTER STATUS and SHOW SLAVE STATUS required the
SUPER privilege; now they accept REPLICATION CLIENT as well.
(Bug #343)
myisam_repair_threads variable to enable it.
「myisam_repair_threads」 節 参照 .
innodb_max_dirty_pages_pct variable which controls amount of
dirty pages allowed in InnoDB buffer pool.
CURRENT_USER() and Access denied error messages now report the
hostname exactly as it was specified in the GRANT command.
InnoDB tables now support ANALYZE TABLE.
--new now changes binary items (0xFFDF) to be
treated as binary strings instead of numbers by default. This fixes some
problems with character sets where it's convenient to input the string
as a binary item. After this change you have to convert the binary
string to INTEGER with a CAST if you want to compare two
binary items with each other and know which one is bigger than the other.
SELECT CAST(0xfeff AS UNSIGNED) < CAST(0xff AS UNSIGNED).
This will be the default behavior in MySQL 4.1. (Bug #152)
delayed_insert_timeout on Linux (most modern glibc
libraries have a fixed pthread_cond_timedwait). (Bug #211)
max_insert_delayed_threads. (Bug #211)
UPDATE ... LIMIT to apply the limit to rows that were matched,
whether or not they actually were changed. Previously the limit was applied
as a restriction on the number of rows changed.
BIT_AND() and BIT_OR() now return an unsigned 64-bit value.
--log-warnings).
--skip-symlink and --use-symbolic-links and
replaced these with --symbolic-links.
innodb_flush_log_at_trx_commit was changed
from 0 to 1 to make InnoDB tables ACID by default.
「InnoDB start」 節 参照 .
SHOW KEYS to display keys that are disabled by
ALTER TABLE DISABLE KEYS command.
CREATE TABLE, first
try if the default table type exists before falling back to MyISAM.
MEMORY as an alias for HEAP.
rnd to my_rnd as the name was too generic
and is an exported symbol in libmysqlclient (thanks to Dennis Haney
for the initial patch).
mysqldump no longer silently deletes the binlogs when called with
--master-data or --first-slave;
while this behavior was convenient for some
users, others may suffer from it. Now one has to explicitely ask for
this deletion with the new --delete-master-logs option.
replicate-wild-ignore-table=mysql.%)
to exclude mysql.user, mysql.host, mysql.db,
mysql.tables_priv and mysql.columns_priv from
replication, then GRANT and REVOKE will not be replicated.
Bugs fixed:
Access denied error message had incorrect Using password
value. (Bug #398)
NATURAL LEFT JOIN, NATURAL RIGHT JOIN and
RIGHT JOIN when using many joined tables. The problem was that
the JOIN method was not always associated with the tables
surrounding the JOIN method. If you have a query that uses many
RIGHT JOIN or NATURAL ... JOINS you should check that they
work as you expected after upgrading MySQL to this version. (Bug #291)
mysql command line client no longer looks for \* commands
inside backtick-quoted strings.
Unknown error when using UPDATE ... LIMIT. (Bug #373)
GROUP BY with constants. (Bug #387)
UNION and OUTER JOIN. (Bug #386)
UPDATE and the query required a
temporary table bigger than tmp_table_size. (Bug #286)
mysql_install_db with the -IN-RPM option for the Mac OS X
installation to not fail on systems with improperly configured hostname
configurations.
LOAD DATA INFILE will now read 000000 as a zero date instead as
"2000-00-00".
DELETE FROM table WHERE const_expression
always to delete the whole table (even if expression result was false).
(Bug #355)
FORMAT('nan',#). (Bug #284)
HAVING ... COUNT(DISTINCT ...).
*) in
MATCH ... AGAINST() in some complex joins.
REPAIR ... USE_FRM command, when used on read-only,
nonexisting table or a table with a crashed index file.
--no-defaults, with a prompt
that contained hostname and connection to non-existing db was requested
LEFT, RIGHT and MID when used with
multi-byte character sets and some GROUP BY queries. (Bug #314)
ORDER BY being discarded for some
DISTINCT queries. (Bug #275)
SET SQL_BIG_SELECTS=1 works as documented (This corrects
a new bug introduced in 4.0)
UPDATE ... ORDER BY. (Bug #241)
WHERE clause with constant
expression like in WHERE 1 AND (a=1 AND b=1).
SET SQL_BIG_SELECTS=1 works again.
SHOW GRANTS.
FULLTEXT index stopped working after ALTER TABLE
that converts TEXT column to CHAR. (Bug #283)
SELECT and wildcarded select list,
when user only had partial column SELECT privileges on the table.
SET PASSWORD.
NATURAL JOINs in the query.
SUM() didn't return NULL when there was no rows in result
or when all values was NULL.
--open-files-limit in
mysqld_safe. (Bug #264)
SHOW PROCESSLIST.
NAN in FORMAT(...) function ...
ALTER TABLE ENABLE / DISABLE KEYS which failed to
force a refresh of table data in the cache.
LOAD DATA INFILE for custom parameters
(ENCLOSED, TERMINATED and so on) and temporary tables.
(Bug #183, Bug #222)
FLUSH LOGS was
issued on the master. (Bug #254)
LOAD DATA INFILE IGNORE: When reading
the binary log, mysqlbinlog and the replication code read REPLACE
instead of IGNORE. This could make the slave's table
become different from the master's table. (Bug #218)
relay_log_space_limit was set to a too
small value. (Bug #79)
MyISAM when a row is inserted into a table with a
large number of columns and at least one BLOB/TEXT column. Bug was caused
by incorrect calculation of the needed buffer to pack data.
SELECT @nonexistent_variable caused the
error in client - server protocol due to net_printf() being sent to
the client twice.
SQL_BIG_SELECTS option.
SHOW PROCESSLIST which only displayed a localhost
in the "Host" column. This was caused by a glitch that only used
current thread information instead of information from the linked list of threads.
InnoDB tables as well.
mysqldump when it was called with
--master-data: the CHANGE MASTER TO commands appended to
the SQL dump had incorrect coordinates. (Bug #159)
USER() was replicated
on the slave; this caused segfault on the slave. (Bug #178).
USER() is still badly replicated on the slave (it is
replicated to "").
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Functionality added or changed:
mysqld no longer reads options from world-writeable config files.
SHOW PROCESSLIST will now include the client TCP port after the
hostname to make it easier to know from which client the request
originated.
Bugs fixed:
mysqld crash on extremely small values of
sort_buffer variable.
INSERT INTO u SELECT ... FROM t was written too late to the
binary log if t was very frequently updated during the execution of
this query. This could cause a problem with mysqlbinlog or
replication. The master must be upgraded, not the slave. (Bug #136)
WHERE clause. (Bug #142)
InnoDB
tables. This bug occurred as, in many cases, InnoDB tables cannot
be updated "on the fly," but offsets to the records have to be stored in
a temporary table.
mysql_secure_installation to the server
RPM subpackage. (Bug #141)
myisamchk) crash on artificially
corrupted .MYI files.
BACKUP TABLE to overwrite existing files.
UPDATE statements when user had all privileges
on the database where tables are located and there were any entries in
tables_priv table, that is, grant_option was true.
TRUNCATE any table in the same database.
LOCK TABLE followed by DROP
TABLE in the same thread. In this case one could still kill the thread
with KILL.
LOAD DATA LOCAL INFILE was not properly written to the binary
log (hence not properly replicated). (Bug #82)
RAND() entries were not read correctly by mysqlbinlog from
the binary log which caused problems when restoring a table that was
inserted with RAND(). INSERT INTO t1 VALUES(RAND()). In
replication this worked ok.
SET SQL_LOG_BIN=0 was ignored for INSERT DELAYED
queries. (Bug #104)
SHOW SLAVE STATUS reported too old positions
(columns Relay_Master_Log_File and Exec_Master_Log_Pos)
for the last executed statement from the master, if this statement
was the COMMIT of a transaction. The master must be upgraded for that,
not the slave. (Bug #52)
LOAD DATA INFILE was not replicated by the slave if
replicate_*_table was set on the slave. (Bug #86)
RESET SLAVE, the coordinates displayed by SHOW
SLAVE STATUS looked un-reset (though they were, but only
internally). (Bug #70)
LOAD DATA.
ANALYZE procedure with error.
CHAR(0) columns that could cause incorrect
results from the query.
AUTO_INCREMENT column,
as a secondary column in a multi-column key ( 「AUTO_INCREMENT on secondary column in a multi-column key」 節 参照 ), when
data was inserted with INSERT ... SELECT or LOAD DATA into
an empty table.
STOP SLAVE didn't stop the slave until the slave
got one new command from the master (this bug has been fixed for MySQL 4.0.11
by releasing updated 4.0.11a Windows packages, which include this individual
fix on top of the 4.0.11 sources). (Bug #69)
LOAD DATA command
was issued with full table name specified, including database prefix.
pthread_attr_getstacksize on
HP-UX 10.20 (Patch was also included in 4.0.11a sources).
bigint test to not fail on some platforms (for example, HP-UX and
Tru64) due to different return values of the atof() function.
rpl_rotate_logs test to not fail on certain platforms (e.g.
Mac OS X) due to a too long file name (changed slave-master-info.opt
to .slave-mi).
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Functionality added or changed:
NULL is now sorted LAST if you use ORDER BY ... DESC
(as it was before MySQL 4.0.2). This change was required to comply
with the SQL-99 standard. (The original change was made because we thought
that SQL-99 required NULL to be always sorted at the same position,
but this was incorrect).
START TRANSACTION (SQL-99 syntax) as alias for BEGIN.
This is recommended to use instead of BEGIN to start a transaction.
OLD_PASSWORD() as a synonym for PASSWORD().
ALL in group functions.
INNER JOIN and JOIN syntaxes.
For example, SELECT * FROM t1 INNER JOIN t2 didn't work before.
Bugs fixed:
InnoDB tables.
BLOB NOT NULL columns used with IS NULL.
InnoDB storage engine.
BLOB columns with long strings.
CREATE TABLE (...)
AUTO_INCREMENT=#.
MIN(key_column) could in some cases return NULL on a column
with NULL and other values.
MIN(key_column) and MAX(key_column) could in some cases
return incorrect values when used in OUTER JOIN.
MIN(key_column) and MAX(key_column) could return incorrect
values if one of the tables was empty.
INTERVAL,
CASE, FIELD, CONCAT_WS, ELT and
MAKE_SET functions.
--lower-case-table-names (default on Windows)
and you had tables or databases with mixed case on disk, then
executing SHOW TABLE STATUS followed with DROP DATABASE
or DROP TABLE could fail with Errcode 13.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Functionality added or changed:
--log-error[=file_name] to mysqld_safe and
mysqld. This option will force all error messages to be put in a
log file if the option --console is not given. On Windows
--log-error is enabled as default, with a default name of
host_name.err if the name is not specified.
Warning: to Note: in the log files.
GROUP BY ... ORDER BY NULL
then result is not sorted.
--ft-stopword-file command-line option for mysqld to
replace/disable the built-in stopword list that is used in full-text searches.
「ft_stopword_file」 節 参照 .
glibc that requires a
stack size larger than 128K
for gethostbyaddr() to resolve a hostname. You can fix
this for earlier MySQL versions by starting mysqld with
--thread-stack=192K.
mysql_waitpid to the binary distribution and the
MySQL-client RPM subpackage (required for mysql-test-run).
MySQL RPM package to MySQL-server. When
updating from an older version, MySQL-server.rpm will simply replace
MySQL.rpm.
replicate_wild_do_table=db.% or
replicate_wild_ignore_table=db.%, these rules will be applied to
CREATE/DROP DATABASE, too.
MASTER_POS_WAIT().
Bugs fixed:
rand() distribution from the first call.
mysqld to hang when a
table was opened with the HANDLER command and then
dropped without being closed.
NULL in an AUTO_INCREMENT column and also
uses LAST_INSERT_ID().
ORDER BY constant_expression.
myisamchk's parallel repair mode.
mysqladmin --relative.
show status reported a strange number for
Open_files and Open_streams.
EXPLAIN on empty table.
LEFT JOIN that caused zero rows to be returned in
the case the WHERE condition was evaluated as FALSE after
reading const tables. (Unlikely condition).
FLUSH PRIVILEGES didn't correctly flush table/column privileges
when mysql.tables_priv is empty.
LOAD DATA INFILE one a file
that updated an AUTO_INCREMENT column with NULL or 0. This
bug only affected MySQL 4.0 masters (not slaves or MySQL 3.23 masters).
Note: If you have a slave that has replicated a file with
generated AUTO_INCREMENT columns then the slave data is corrupted and you
should reinitialize the affected tables from the master.
BLOB value larger than 16M
to the client.
NOT NULL column to an
expression that returned NULL.
str LIKE "%other_str%" where str or
other_str contained characters >= 128.
LOAD DATA and InnoDB failed
with table full error the binary log was corrupted.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Functionality added or changed:
OPTIMIZE TABLE will for MyISAM tables treat all NULL
values as different when calculating cardinality. This helps in
optimizing joins between tables where one of the tables has a lot of
NULL values in a indexed column:
SELECT * from t1,t2 where t1.a=t2.key_with_a_lot_of_null; |
FORCE INDEX (key_list). This acts likes
USE INDEX (key_list) but with the addition that a table scan is
assumed to be VERY expensive. One bad thing with this is that it makes
FORCE a reserved word.
Bugs fixed:
LOAD DATA INFILE statement that
caused log rotation.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Functionality added or changed:
max_packet_length for libmysqld.c is now 1024*1024*1024.
max_allowed_packet in a file ready by
mysql_options(MYSQL_READ_DEFAULT_FILE).
for clients.
InnoDB tables now also support ON UPDATE CASCADE in
FOREIGN KEY constraints. See the InnoDB section in the manual
for the InnoDB changelog.
Bugs fixed:
ALTER TABLE with BDB tables.
QUOTE() function.
GROUP BY when used on BLOB column with NULL values.
NULL values in CASE ... WHEN ...
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Functionality added or changed:
mysqlbug now also reports the compiler version used for building
the binaries (if the compiler supports the option --version).
Bugs fixed:
-DBIG_TABLES
on a 32-bit system.
mysql_drop_db() didn't check permissions properly so anyone could
drop another users database. DROP DATABASE is checked properly.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Functionality added or changed:
CHARACTER SET xxx and CHARSET=xxx
table options (to be able to read table dumps from 4.1).
IFNULL(A,B) is now set to be the
more 'general' of the types of A and B. (The order is
STRING, REAL or INTEGER).
mysql.server startup script in the RPM packages from
`/etc/rc.d/init.d/mysql' to `/etc/init.d/mysql'
(which almost all current Linux distributions support for LSB compliance).
Qcache_lowmem_prunes status variable (number of queries that were
deleted from cache because of low memory).
mysqlcheck so it can deal with table names containing dashes.
bulk_insert_buffer_size」 節 参照 )
is no longer used when inserting small (less than 100) number of rows.
SELECT ... FROM merge_table WHERE indexed_column=constant_expr.
LOCALTIME and LOCALTIMESTAMP as synonyms for
NOW().
CEIL is now an alias for CEILING.
CURRENT_USER() function can be used to get a user@host
value as it was matched in the GRANT system.
「CURRENT_USER()」 節 参照 .
CHECK constraints to be compatible with SQL-99. This made
CHECK a reserved word. (Checking of CHECK constraints is
still not implemented).
CAST(... as CHAR).
LIMIT syntax:
SELECT ... LIMIT row_count OFFSET offset
mysql_change_user() will now reset the connection to the state
of a fresh connect (Ie, ROLLBACK any active transaction, close
all temporary tables, reset all user variables etc..)
CHANGE MASTER and RESET SLAVE now require that slave
threads be both already stopped; these commands will return an error
if at least one of these two threads is running.
Bugs fixed:
multi table updates
--lower-case-table-names default on Mac OS X as the default
file system (HFS+) is case insensitive.
「6.1.3 名前におけるケース依存」 節 参照 .
AUTOCOMMIT=0 mode didn't rotate binary log.
SELECT with joined tables with
ORDER BY and LIMIT clause when filesort had to be used.
In that case LIMIT was applied to filesort of one of the tables,
although it could not be.
This fix also solved problems with LEFT JOIN.
mysql_server_init() now makes a copy of all arguments. This fixes
a problem when using the embedded server in C# program.
libmysqlclient library
that allowed a malicious MySQL server to crash the client
application.
mysql_change_user() handling.
All users are strongly recommended to upgrade to version 4.0.6.
--chroot command-line option of
mysqld from working.
"..." in boolean full-text search.
OPTIMIZE TABLE to corrupt the table
under some rare circumstances.
LOCK TABLES now works together with multiple-table-update and
multiple-table-delete.
--replicate-do=xxx didn't work for UPDATE commands.
(Bug introduced in 4.0.0)
InnoDB bugs in REPLACE, AUTO_INCREMENT,
INSERT INTO ... SELECT ... were fixed. See the InnoDB changelog
in the InnoDB section of the manual.
RESET SLAVE caused a crash if the slave threads were running.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Functionality added or changed:
SHOW PROCESSLIST
command
WEEK() so that one can get
week number according to the ISO 8601 specification.
(Old code should still work).
INSERT DELAYED threads doesn't hang on Waiting for
INSERT when one sends a SIGHUP to mysqld.
AND works according to SQL-99 when it comes to
NULL handling. In practice, this only affects queries where you
do something like WHERE ... NOT (NULL AND 0).
mysqld will now resolve basedir to its full path (with
realpath()). This enables one to use relative symlinks to the
MySQL installation directory. This will however cause show
variables to report different directories on systems where there is
a symbolic link in the path.
IGNORE INDEX or USE INDEX.
to be ignored.
--use-frm option to mysqlcheck. When used with
REPAIR, it gets the table structure from the .frm file, so the
table can be repaired even if the .MYI header is corrupted.
MAX() optimization when used with JOIN and
ON expressions.
BETWEEN behavior changed ( 「6.3.1.2 比較演算子」 節 参照 ).
Now datetime_col BETWEEN timestamp AND timestamp should work
as expected.
TEMPORARY MERGE tables now.
DELETE FROM myisam_table now shrinks not only the `.MYD' file but
also the `.MYI' file.
--open-files-limit=# option to mysqld_safe
it's now passed on to mysqld.
EXPL