This appendix lists the changes from version to version in the MySQL source
code through the latest version of MySQL 4.1.
We are working actively on MySQL 4.1 and 5.0, and provide only critical
bugfixes for MySQL 4.0. We update this section as we add new features, so
that everybody can follow the development.
Note that we tend to update the manual at the same time we make changes to
MySQL. If you find a recent version of MySQL listed here that you can't find
on our download page (http://dev.mysql.com/downloads/),
it means that the version has not yet been released.
The date mentioned with a release version is the date of the last BitKeeper
ChangeSet on which the release was based, not the date when the packages
were made available. The binaries are usually made available a few days
after the date of the tagged ChangeSet, because building and testing all
packages takes some time.
The manual included in the source and binary distributions may not be fully
accurate when it comes to the release changelog entries, because the
integration of the manual happens at build time. For the most up-to-date
release changelog, please refer to the online version instead.
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.) See
Section 13.2.4, “INSERT Syntax”.
Table names and column names now are stored in
UTF8. This makes MySQL more flexible, but
might cause some problems upgrading if you have table or column names
that use characters outside of the standard 7-bit US-ASCII range. See
Section 2.11.1, “Upgrading from MySQL 4.0 to 4.1”.
Character sets can be defined per column, table, and database.
New key cache for MyISAM tables with many
tunable parameters. You can have multiple key caches, preload index into
caches for batches...
Create Table: CREATE [TEMPORARY] TABLE [IF NOT
EXISTS] table2 LIKE table1.
Server based 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.1.1. Changes in release 4.1.21 (Not yet released)
This is a bugfix release for the recent production release family.
This section documents all changes and bug fixes that have been applied
since the last official MySQL release. If you would like to receive more
fine-grained and personalized update alerts
about fixes that are relevant to the version and features you use,
please consider subscribing to MySQL Network
(a commercial MySQL offering). For more details please see
http://www.mysql.com/network/advisors.html.
Functionality added or changed:
For spatial data types, the server formerly returned these as
VARSTRING values with a binary collation.
Now the server returns spatial values as
BLOB values. (Bug#10166)
Added the --set-charset option to
mysqlbinlog to allow the
character set to be specified for processing binary log files. (Bug#18351)
For a table with an AUTO_INCREMENT
column,
SHOW CREATE TABLE now shows the next
AUTO_INCREMENT value to be generated. (Bug#19025)
The mysqldumpslow script
has been moved from client RPM packages to server RPM packages. This
corrects a problem where mysqldumpslow
could not be used with a client-only RPM install, because it depends
on
my_print_defaults which
is in the server RPM. (Bug#20216)
Bugs fixed:
For SELECT ... FOR UPDATE statements that
used DISTINCT or
GROUP BY over all key parts of a unique index (or primary
key), the optimizer unnecessarily created a temporary table, thus
losing the linkage to the underlying unique index values. This
caused a Result set not updatable
error. (The temporary table is unnecessary because under these
circumstances the distinct or grouped columns must also be unique.)
(Bug#16458)
Concatenating the results of multiple constant subselects produced
incorrect results. (Bug#16716)
The use of MIN() and
MAX() on columns with a partial index
produced incorrect results in some queries. (Bug#18206)
Use of MIN() or
MAX()
with GROUP BY on a
ucs2
column could cause a server crash. (Bug#20076)
INSERT INTO ... SELECT ... LIMIT 1 could
be slow because the LIMIT was ignored
when selecting candidate rows. (Bug#9676)
NDB Cluster: When attempting to restart
the cluster following a data import, the cluster would fail during
Phase 4 of the restart with Error 2334: Job
buffer congestion. (Bug#20774)
NDB Cluster: A node failure during a scan
could sometime cause the node to crash when restarting too quickly
following the failure. (Bug#20197)
NDB Cluster: It was possible to use port
numbers greater than 65535 for ServerPort
in the config.ini file. (Bug#19164)
The omission of leading zeros in dates could lead to erroneous results
when these were compared with the output of certain date and time
functions. (Bug#16377)
Certain queries having a WHERE clause
that included conditions on multi-part keys with more than 2 key
parts could produce incorrect results and send
[Note] Use_count: Wrong count for key at...
messages to STDERR. (Bug#16168)
An invalid comparison between keys in partial indexes over multi-byte
character fields could lead to incorrect result sets if the selected
query execution plan used a range scan by a partial index over a
UTF8 character field. This also caused incorrect results
under similar circumstances with many other character sets. (Bug#14896)
NDB Cluster: The cluster's data nodes
would fail while trying to load data when
NoOfFrangmentLogFiles was equal to 1. (Bug#19894)
NDB Cluster: A problem with error
handling when ndb_use_exact_count was
enabled could lead to incorrect values returned from queries using
COUNT(). A warning is now returned in
such cases. (Bug#19202)
NDB Cluster: LOAD
DATA LOCAL failed to ignore duplicate keys in Cluster tables.
(Bug#19496)
NDB Cluster: Repeated
CREATE - INSERT
-
DROP operations tables could in some
circumstances cause the MySQL table definition cache to become
corrupt, so that some mysqld
processes could access table information but others could not. (Bug#18595)
NDB Cluster: The
mgm
client command ALL CLUSTERLOG STATISTICS=15;
had no effect. (Bug#20336)
NDB Cluster:
TRUNCATE TABLE failed to reset the
AUTO_INCREMENT counter. (Bug#18864)
NDB Cluster: SELECT
... FOR UPDATE failed to lock the selected rows. (Bug#18184)
NDB Cluster: The failure of a data node
when preparing to commit a transaction (that is, while the node's
status was CS_PREPARE_TO_COMMIT) could
cause the failure of other cluster data nodes. (Bug#20185)
NDB Cluster: Renaming a table in such a
way as to move it to to a different database failed to move the
table's indexes. (Bug#19967)
NDB Cluster: Resources for unique indexes
on Cluster table columns were incorrectly allocated, so that only
one-fourth as many unique indexes as indicated by the value of
UniqueHashIndexes could be created. (Bug#19623)
NDB Cluster (NDBAPI): On big-endian
platforms, NdbOperation::write_attr()
did not update 32-bit fields correctly. (Bug#19537)
NDB Cluster: Some queries having a
WHERE clause of the form
c1=val1 OR c2 LIKE 'val2' were not evaluated correctly. (Bug
# 17421)
NDB Cluster: Using “stale”
mysqld
.FRM files could cause a newly-restored cluster to fail. This
situation could arise when restarting a MySQL Cluster using the
--intial option while leaving connected
mysqld processes
running. (Bug#16875)
NDB Cluster: Repeated use of the
SHOW and ALL STATUS
commands in the ndb_mgm
client could cause the mgmd
process to crash. (Bug#18591)
NDB Cluster: An issue with
ndb_mgmd prevented more
than 27
mysqld processes from connecting to a
single cluster at one time. (Bug#17150)
NDB Cluster: Data node failures could
cause excessive CPU usage by ndb_mgmd.
(Bug#13987)
NDB Cluster:
TRUNCATE
failed on tables having BLOB or
TEXT columns with the error
Lock wait timeout exceeded. (Bug#19201)
A cast problem caused incorrect results for prepared statements that
returned float values when MySQL was compiled with
gcc 4.0. (Bug#19694)
Improper character set initialization in the embedded server could
result in a server crash. (Bug#20318)
Some queries that used ORDER BY and
LIMIT performed quickly in MySQL 3.23,
but slowly in MySQL 4.x/5.x due to an optimizer problem. (Bug#4981)
Queries using an indexed column as the argument for the
MIN() and MAX()
functions following an ALTER TABLE .. DISABLE
KEYS statement returned Got error 124
from storage engine until ALTER TABLE
... ENABLE KEYS was run on the table. (Bug#20357)
A number of dependency issues in the RPM
bench and test
packages caused installation of these packages to fail. (Bug#20078)
The MD5() and SHA() functions treat their arguments as case-sensitive
strings. But when they are compared, their arguments were compared
as case-insensitive strings, which leads to two function calls with
different arguments (and thus different results) compared as being
identical. This can lead to a wrong decision made in the range
optimizer and thus to an incorrect result set. (Bug#15351)
InnoDB unlocked its data directory before
committing a transaction, potentially resulting in non-recoverable
tables if a server crash occurred before the commit. (Bug#19727)
Multiple-table DELETE statements
containing a subquery that selected from one of the tables being
modified caused a server crash. (Bug#19225)
The ARCHIVE storage engine does not
support
TRUNCATE TABLE, but the server was not
returning an appropriate error when truncation of an
ARCHIVE table was attempted. (Bug#15558)
An update that used a join of a table to itself and modified the table
on both sides of the join reported the table as crashed. (Bug#18036)
The fill_help_tables.sql file did not
load properly if the ANSI_QUOTES SQL
mode was enabled. (Bug#20542)
The fill_help_tables.sql file did not
contain a SET NAMES 'utf8' statement to
indicate its encoding. This caused problems for some settings of the
MySQL character set such as big5. (Bug#20551)
The MySQL server startup script
/etc/init.d/mysql
(created from
mysql.server) is now
marked to ensure that the system services
ypbind,
nscd,
ldap, and
NTP are started first
(if these are configured on the machine). (Bug#18810)
For a reference to a non-existent index in FORCE
INDEX, the error message referred to a column, not an index.
(Bug#17873)
In a multiple-row INSERT statement,
LAST_INSERT_ID() should return the same
value for each row. However, in some cases, the value could change
if the table being inserted into had its own
AUTO_INCREMENT column. (Bug#6880)
Invalid escape sequences in option files caused MySQL programs that
read them to abort. (Bug#15328)
Binary log lacked character set information for table name when
dropping temporary tables. (Bug#14157)
InnoDB did not increment the
handler_read_prev counter. (Bug#19542)
Slave SQL thread cleanup was not handled properly on Mac OS X when a
statement was killed, resulting in a slave crash. (Bug#16900)
mysqldump did not
respect the order of tables named with the
--tables option. (Bug#18536)
The server no longer uses a signal handler for signal 0 because it
could cause a crash on some platforms. (Bug#15869)
LOAD_FILE() returned an error if the file
did not exist, rather than NULL as it
should according to the manual. (Bug#10418)
Use of uninitialized user variables in a subquery in the
FROM clause results in bad entries in the
binary log. (Bug#19136)
IS_USED_LOCK() could return an incorrect
connection identifier. (Bug#16501)
Concurrent reading and writing of privilege structures could crash the
server. (Bug#16372)
A statement containing GROUP BY and
HAVING clauses could return incorrect
results when the HAVING clause
contained logic that returned FALSE for
every row. (Bug#14927)
MONTHNAME(STR_TO_DATE(NULL, '%m')) could
cause a server crash. (Bug#18501)
The ref optimizer could choose the
ref_or_null access method in cases where
it was not applicable. This could cause inconsistent
EXPLAIN or SELECT
results for a given statement. (Bug#16798)
ANALYZE TABLE for
TEMPORARY tables had no effect. (Bug#15225)
When myisamchk needed to
rebuild a table,
AUTO_INCREMENT information was lost. (Bug#10405)
No error message was being issued for storage engines that do not
support ALTER TABLE. Now an
ER_NOT_SUPPORTED_YET error occurs. (Bug#7643)
The binary log would create an incorrect
DROP query when creating temporary tables
during replication. (Bug#17263)
D.1.2. Changes in release 4.1.20 (24 May 2006)
This is a security fix release for the previous production release family.
This release includes the security fix described later in this section and
a few other changes to resolve build problems, relative to the last
official MySQL release (4.1.19). If you would like to receive more
fine-grained and personalized
update alerts about fixes that are
relevant to the version and features you use, please consider
subscribing to MySQL Network (a
commercial MySQL offering). For more details please see
http://www.mysql.com/network/advisors.html.
Bugs fixed:
Security fix: An
SQL-injection security hole has been found in multi-byte encoding
processing. The bug was in the server, incorrectly parsing the
string escaped with the
mysql_real_escape_string() C API
function. (CVE-2006-2753,
Bug#8378)
This vulnerability was discovered and reported by Josh Berkus
<josh@postgresql.org>
and Tom Lane
<tgl@sss.pgh.pa.us>
as part of the inter-project security collaboration of the OSDB
consortium. For more information about SQL injection, please see the
following text.
Discussion: An
SQL-injection security hole has been found in multi-byte encoding
processing. An SQL-injection security hole can include a situation
whereby when a user supplied data to be inserted into a database,
the user might inject SQL statements into the data that the server
will execute. With regards to this vulnerability, when character set
unaware-escaping is used (for example,
addslashes() in PHP), it is possible to bypass the escaping
in some multi-byte character sets (for example, SJIS, BIG5 and GBK).
As a result, a function such as addslashes()
is not able to prevent SQL-injection attacks. It is impossible to
fix this on the server side. The best solution is for applications
to use character set-aware escaping offered by a function such
mysql_real_escape_string().
However, a bug was detected in how the MySQL server parses the output
of mysql_real_escape_string(). As a
result, even when the character set-aware function
mysql_real_escape_string() was used, SQL
injection was possible. This bug has been fixed.
Workarounds: If you are
unable to upgrade MySQL to a version that includes the fix for the
bug in mysql_real_escape_string()
parsing, but run MySQL 5.0.1 or higher, you can use the
NO_BACKSLASH_ESCAPES SQL mode as a
workaround. (This mode was introduced in MySQL 5.0.1.)
NO_BACKSLASH_ESCAPES enables an SQL
standard compatibility mode, where backslash is not considered a
special character. The result will be that queries will fail.
To set this mode for the current connection, enter the following SQL
statement:
SET sql_mode='NO_BACKSLASH_ESCAPES';
You can also set the mode globally for all clients:
SET GLOBAL sql_mode='NO_BACKSLASH_ESCAPES';
This SQL mode also can be enabled automatically when the server starts
by using the command-line option
--sql-mode=NO_BACKSLASH_ESCAPES or by
setting
sql-mode=NO_BACKSLASH_ESCAPES in the
server option file (for example, my.cnf
or
my.ini, depending on your system).
The patch for
Bug#8303 broke the fix for
Bug#8378 and was undone. (In string literals with an escape
character (\) followed by a multi-byte
character that has a second byte of (\),
the literal was not interpreted correctly. The next byte now is
escaped, not the entire multi-byte character. This means it a strict
reverse of the mysql_real_escape_string()
function.)
The client libraries had not been compiled for position-indpendent
code on Solaris-SPARC and AMD x86_64 platforms. (Bug#13159,
Bug#14202,
Bug#18091)
Running myisampack
followed by
myisamchk with the
--unpack option would corrupt the
auto_increment key. (Bug#12633)
D.1.3. Changes in release 4.1.19 (29 April 2006)
This release includes the patches for recently reported security
vulnerabilites in the MySQL client-server protocol. We would like to
thank Stefano Di Paola <stefano.dipaola@wisec.it>
for finding and reporting these to us.
Functionality added or changed:
Security enhancement: Added
the global max_prepared_stmt_count
system variable to limit the total number of prepared statements in
the server. This limits the potential for denial-of-service attacks
based on running the server out of memory by preparing huge numbers
of statements. The current number of prepared statements is
available through the
prepared_stmt_count system variable. (Bug#16365)
The
MySQL-shared-compat-4.1.X-.i386.rpm
shared compatibility RPMs no longer contain libraries for MySQL 5.0
and up. It contains libraries for 3.23, 4.0, and 4.1.1. (Bug#19288)
Creating a table in an InnoDB database with a column name that matched
the name of an internal InnoDB column (including
DB_ROW_ID,
DB_TRX_ID,
DB_ROLL_PTR and
DB_MIX_ID) would cause a crash. MySQL now
returns error 1005 (cannot create table) with
errno set to -1. (Bug#18934)
InnoDB now caches a list of unflushed
files instead of scanning for unflushed files during a table flush
operation. This improves performance when
--innodb-file-per-table is set on a system
with a large number of InnoDB tables. (Bug#15653)
New charset command added to
mysql command-line
client. By typing
charset name
or
\C name
(such as
\C UTF8), the client character set can be
changed without reconnecting. (Bug#16217)
Large file support was re-enabled for the MySQL server binary for the
AIX 5.2 platform. (Bug#13571)
When using the GROUP_CONCAT() function
where the group_concat_max_len system
variable was greater than 512, the type of the result was
BLOB only if the query included an
ORDER BY clause; otherwise the result was
a
VARCHAR.
The result type of the GROUP_CONCAT()
function is now VARCHAR only if the value
of the group_concat_max_len system
variable is less than or equal to 512. Otherwise, this function
returns a BLOB. (Bug#14169)
Bugs fixed:
Security fix: A malicious
client, using specially crafted invalid login or
COM_TABLE_DUMP packets was able to read
uninitialized memory, which potentially, though unlikely in MySQL,
could have led to an information disclosure. (CVE-2006-1516,
CVE-2006-1517) Thanks to Stefano Di Paola
<stefano.dipaola@wisec.it>
for finding and reporting this bug.
NDB Cluster: A simultaneous
DROP TABLE and table update operation utilising a table scan
could trigger a node failure. (Bug#18597)
MySQL-shared-compat-4.1.15-0.i386.rpm,
MySQL-shared-compat-4.1.16-0.i386.rpm,
and
MySQL-shared-compat-4.1.18-0.i386.rpm
incorrectly depended on glibc 2.3 and
could not be installed on a glibc 2.2
system. (Bug#16539)
IA-64 RPM packages for Red Hat and SuSE Linux that were built with the
icc compiler incorrectly depended on
icc runtime libraries. (Bug#16662)
Index prefixes for utf8VARCHAR columns did not work for
UPDATE statements. (Bug#19080)
MySQL would not compile on Linux distributions that use the
tinfo library. (Bug#18912)
NDB Cluster: Backups could fail for large
clusters with many tables, where the number of tables approached
MaxNoOfTables. (Bug#17607)
For single-SELECT union constructs of the
form (SELECT ... ORDER BY
order_list1 [LIMIT
n]) ORDER BY
order_list2, the
ORDER BY lists were concatenated and the
LIMIT clause was ignored. (Bug#18767)
The IN-to-EXISTS
transformation was making a reference to a parse tree fragment that
was left out of the parse tree. This caused problems with prepared
statements. (Bug#18492)
Attempting to set the default value of an
ENUM or SET
column to
NULL caused a server crash. (Bug#19145)
Index corruption could occur in cases when
key_cache_block_size was not a multiple
of
myisam_block_size (for example, with
key_cache_block_size=1536 and
myisam_block_size=1024). (Bug#19079)
UNCOMPRESS(NULL) could cause subsequent
UNCOMPRESS() calls to return
NULL for legal non-NULL
arguments. (Bug#18643)
Conversion of a number to a CHAR UNICODE
string returned an invalid result. (Bug#18691)
A call to MIN() with a
CASE expression as its argument could
return a non-minimum value. (Bug#17896)
A LOCK TABLES statement that failed could
cause MyISAM not to update table
statistics properly, causing a subsequent
CHECK TABLE
to report table corruption. (Bug#18544)
Avoid trying to include
<asm/atomic.h> when it doesn't work in
C++ code. (Bug#13621)
Executing SELECT on a large table that
had been compressed within myisampack
could cause a crash. (Bug#17917)
NDB Cluster: In a 2-node cluster with a
node failure, restarting the node with a low value for
StartPartialTimeout could cause the
cluster to come up partitioned (“split-brain”
issue). (Bug#16447)
A similar issue could occur when the cluster was first started with a
sufficiently low value for this parameter. (Bug#18612)
NDB Cluster: On systems with multiple
network interfaces, data nodes would get “stuck”
in startup phase 2 if the interface connecting them to the
management server was working on node startup while the interface
interconnecting the data nodes experienced a temporary outage. (Bug#15695)
mysql_config returned
incorrect libraries on x86_64 systems.
(Bug#13158)
mysql_reconnect() sent a
SET NAMES statement to the server, even for pre-4.1 servers
that do not understand the statement. (Bug#18830)
During conversion from one character set to
ucs2, multi-byte characters with no
ucs2 equivalent were converted to
multiple characters, rather than to 0x003F
QUESTION MARK. (Bug#15375)
The mysql_close() C API function leaked
handles for share-memory connections on Windows. (Bug#15846)
The euro sign (€) was not stored
correctly in columns using the
latin1_german1_ci or
latin1_general_ci collation. (Bug#18321)
The server was always built as though
--with-extra-charsets=complex had been
specified. (Bug#12076)
SELECT ... WHERE
column
LIKE 'A%' when column
had a key and used the latin2_czech_cs
collation. (Bug#17374)
A query using WHERE (column_1,
column_2) IN ((value_1,
value_2)[, (..., ...), ...])
would return incorrect results. (Bug#16248)
The -lmtmalloc library was removed from
the output of mysql_config
on Solaris, as it caused problems when building
DBD::mysql
(and possibly other applications) on that platform that tried to use
dlopen() to access the client library. (Bug#18322)
When running a query that contained a
GROUP_CONCAT( SELECT GROUP_CONCAT(...) ), the result was
NULL except in the
ROLLUP part of the result, if there was
one. (Bug#15560)
CASTdouble
AS SIGNED INT) for large double
values outside the signed integer range truncates the result to be
within range, but the result sometimes had the wrong sign. (Bug#15098)
SET value definitions containing commas
were not rejected. Now a definition such as
SET('a,b','c,d') results in an error. (Bug#15316)
MyISAM: Keys for which the first part of
the key was a CHAR or
VARCHAR column using the UTF-8 character
set and longer than 254 bytes could become corrupted. (Bug#17705)
NDB Cluster: A timeout in the handling of
an ABORT condition with more that 32
operations could yield a node failure. (Bug#18414)
NDB Cluster: A node restart immediately
following a CREATE TABLE would fail.
Important: This fix
supports 2-node Clusters only. (Bug#18385)
NDB Cluster: In event of a node failure
during a rollback, a “false” lock could
be established on the backup for that node, which lock could not be
removed without restarting the node. (Bug#18352)
NDB Cluster: The cluster created a
crashed replica of a table having an ordered index — or when logging
was not enabled, of a table having a table or unique index — leading
to a crash of the cluster following 8 successibe restarts. (Bug#18298)
NDB Cluster: When replacing a failed
master node, the replacement node could cause the cluster to crash
from a buffer overflow if it had an excessively large amount of data
to write to the cluster log. (Bug#18118)
NDB Cluster: Restarting nodes were
allowed to start and join the cluster too early. (Bug#16772)
If InnoDB encountered a
HA_ERR_LOCK_TABLE_FULL error and rolled
back a transaction, the transaction was still written to the binary
log. (Bug#18283)
Connecting to a server with a UCS2 default character set with a client
using a non-UCS2 character set crashed the server. (Bug#18004)
Character set conversion of string constants for
UNION of constant and table column was
not done when it was safe to do so. (Bug#15949)
Use of TRUNCATE TABLE for a
TEMPORARY table on a master server was
propagated to slaves properly, but slaves did not decrement the
Slave_open_temp_tables counter properly. (Bug#17137)
SELECT COUNT(*) for a
MyISAM table could return different
results depending on whether an index was used. (Bug#14980)
Large file support did not work in AIX server binaries. (Bug#10776)
Security Improvement: GRANTs to users with wildcards in their host
information could be erroneously applied to similar users with the
same username and similar wildcards. For example, a privilege
granted to foo@% are also applied to
user foo@192.%. (Bug#14385)
NDB Cluster: Inserting and deleting
BLOB column values while a backup was in
process could cause the loss of an
ndbd
node. (Bug#14028)
Setting the myisam_repair_threads system
variable to a value larger than 1 could cause corruption of large
MyISAM tables. (Bug#11527)
Security improvement: In grant table comparisons, improper use of a
latin1 collation caused some hostname matches to be true that
should have been false. Thanks to Deomid Ryabkov for finding this
bug and proposing a solution. (Bug#15756)
NDB Cluster:
ndb_delete_all would run
out of memory on tables containing BLOB
columns. (Bug#16693)
mysqldump tried to dump
data from a view. (In MySQL 4.1, this applies when connecting to a
server from MySQL 5.0 or higher.) (Bug#16389)
NDB Cluster: An
UPDATE
with an inner join failed to match any records if both tables in the
join did not have a primary key. (Bug#17257)
NDB Cluster: A
DELETE
with a join in the WHERE clause failed to
retrieve any records if both tables in the join did not have a
primary key. (Bug#17249)
NDB Cluster: In some cases,
LOAD DATA INFILE did not load all data into
NDB tables. (Bug#17081)
NDB Cluster: The
REDO
log would become corrupted (and thus unreadable) in some
circumstances, due to a failure in the query handler. (Bug#17295)
NDB Cluster: No error message was
generated for setting NoOfFragmentLogFiles
too low. (Bug#13966)
NDB Cluster: No error message was
generated for setting MaxNoOfAttributes
too low. (Bug#13965)
Binary distributions for Solaris contained files with group ownership
set to the non-existing wheel
group. Now the bin group is used. (Bug#15562)
Killing a long-running query containing a subquery could cause a
server crash. (Bug#14851)
Repeated invocation of my_init() and
my_end() caused corruption of character
set data and connection failure. (Bug#6536)
A FULLTEXT query in a prepared statement
could result in unexpected behavior. (Bug#14496)
A FULLTEXT query in a
UNION could result in unexpected
behavior. (Bug#16893)
Server crash when dropping InnoDB constraints named
TABLENAME_ibfk_0.
(Bug#16387)
Corrected race condition when dropping the adaptive hash index for a
B-tree page in InnoDB. (Bug#16582)
LOAD DATA FROM MASTER produced invalid
warnings and Packet out of order
errors when the database already existed on the slave. (Bug#15302)
A key on a MEMORY table would sometimes
fail to match a row. (Bug#12796)
MYSQL_STMT objects were not preserved
following a connection reset. Attempting to operate on them
afterwards caused the server to crash. (Bug#12744)
D.1.4. Changes in release 4.1.18 (27 January 2006)
Functionality added or changed:
NDB Cluster: More descriptive warnings
are now issued when inappropriate logging parameters are set in
config.ini. (Formerly, the warning
issued was simply Could not add logfile
destination .) (Bug#11331)
libmysqlclient now uses versioned symbols
with GNU ld. (Bug#3074)
Bugs fixed:
The length of a VARCHAR() column that
used the utf8 character set would
increase each time the table was re-created in a stored procedure or
prepared statement, eventually causing the
CREATE TABLE statement to fail. (Bug#13134)
RPM packages had an incorrect zlib
dependency. (Bug#15223)
The --replicate-do and
--replicate-ignore options were not being
enforced on multiple-table statements. (Bug#15699,
Bug#16487)
Running out of diskspace in the location specified by the
tmpdir option resulted in incorrect error
message. (Bug#14634)
Test suite func_math test returned
warnings when server not compiled with InnoDB support. (Bug#15429)
The MBROverlaps GIS function returned
incorrect results. (Bug#14320)
A CREATE TABLE ... SELECT ... on an
equation involving DOUBLE values could
result in the table being created with columns too small to hold the
equation result. (Bug#9855)
UPDATE statement crashed multi-byte
character set FULLTEXT index if update
value was almost identical to initial value only differing in some
spaces being changed to . (Bug#16489)
Single table UPDATE statements without
ORDER BY clauses which updated the same
indexed column that was being filtered on were optimized with a full
index scan instead of a more appropriate index range scan. (Bug#15935)
A prepared statement created from a SELECT ...
LIKE query (such as PREPARE stmt1 FROM
'SELECT col_1 FROM tedd_test WHERE col_1 LIKE ?';) would
begin to produce erratic results after being executed repeatedly
numerous (thousands) of times. (Bug#12734)
D.1.5. Changes in release 4.1.17 (Not released)
Functionality added or changed:
In the latin5_turkish_ci collation, the
order of the characters A WITH CIRCUMFLEX,
I WITH CIRCUMLEX, and
U WITH CIRCUMFLEX was changed. If you have used these
characters in any indexed columns, you should rebuild those indexes.
(Bug#13421)
Support files for compiling with Visual Studio 6 have been removed. (Bug#15094)
Internal sha1_result function renamed to
mysql_sha1_result to prevent conflicts
with other projects. (Bug#13944)
Bugs fixed:
CAST(... AS TIME) operations returned
different results when using versus not using prepared-statement
protocol. (Bug#15805)
Performing a RENAME TABLE on an InnoDB
table when the server is started with the
--innodb-file-per-table and the data
directory is a symlink caused a server crash. (Bug#15991)
Characters in the gb2312 and
euckr character sets which did not have
Unicode mappings were truncated. (Bug#15377)
Piping the fill_help_tables.sql file
into
mysqld resulted in a
syntax error. (Bug#15965)
NDBCluster: Upon the completion of a scan
where a key request remained outstanding on the primary replica and
a starting node died, the scan did not terminate. This caused
incompleted error handling of the failed node. (Bug#15908)
Using CAST() to convert values with long
fractional and/or exponent parts to TIME returned wrong results. (Bug#12440)
An INSERT ... SELECT statement between
tables in a MERGE set can return errors
when statement involves insert into child table from merge table or
vice-versa. (Bug#5390)
Certain permission management statements could create a
NULL hostname for a user, resulting in a
server crash. (Bug#15598)
For InnoDB tables, using a column prefix
for a utf8 column in a primary key
caused
Cannot find record errors when attempting
to locate records. (Bug#14056)
Certain CREATE TABLE ... AS ...
statements involving ENUM columns could
cause server crash. (Bug#12913)
Using an aggregate function as the argument for a HAVING clause would
result in the aggregate function always returning
FALSE. (Bug#14274)
The COALESCE() function truncated data in
a
TINYTEXT column. (Bug#15581)
InnoDB: Comparison of indexed
VARCHAR CHARACTER SET ucs2 COLLATE ucs2_bin
columns using LIKE could fail. (Bug#14583)
Issuing a DROP USER command could cause
some users to encounter a
hostname
is not allowed to connect to this MySQL server error. (Bug#15775)
Access Denied error could be erroneously
returned with specific grant combinations under high load. (Bug#7209)
Symbolic links did not function properly on Windows platforms. (Bug#14960,
Bug#14310)
BDB: A DELETE,
INSERT, or UPDATE
of a
BDB table could cause the server to crash
where the query contained a subquery using an index read. (Bug#15536)
DELETE could report full-text index
corruption (Invalid key for table ...)
if the index was built with repair-by-sort, the data in the
full-text index used UCA collation, and some word appeared in the
data terminated by a 0xC2A0 character as well as by other non-letter
characters. (Bug#11336)
A race condition when creating temporary files caused a deadlock on
Windows with threads in Opening tables
or Waiting for table
states. (Bug#12071)
InnoDB: If
FOREIGN_KEY_CHECKS was 0,
InnoDB allowed inconsistent foreign keys
to be created. (Bug#13778)
NDB Cluster: A memory leak occurred when
performing ordered index scans using indexes a columns larger than
32 bytes, which would eventually lead to the forced shutdown of all
mysqld server processes used with the cluster. (Bug#13078)
NDB Cluster: Under some circumstances, it
was possible for a restarting node to undergo a forced shutdown. (Bug#15632)
NDB Cluster: If an abort by the
Transaction Coordinator timed out, the abort condition was
incorrectly handled, causing the transacviton record to be released
prematurely. (Bug#15685)
NDB Cluster: A node which failed during
cluster startup was sometimes not removed from the internal list of
active nodes. (Bug#15587)
NDB Cluster: There was a small window for
a node failure to occur during a backup without an error being
reported. (Bug#15425)
Multiple-table update operations were counting updates and not updated
rows. As a result, if a row had several updates it was counted
several times for the “rows matched”
value but updated only once. (Bug#15028)
SELECT queries that began with an opening
parenthesis were not being placed in the query cache. (Bug#14652)
D.1.6. Changes in release 4.1.16 (29 November 2005)
Functionality added or changed:
The CHAR() function now takes an optional
USING charset
clause that may be used to produce a result in a specific character
set rather than in the connection character set.
MySQL 4.1 now supports character set conversion for seven additional
cp950 characters into the
big5 character set:
0xF9D6, 0xF9D7,
0xF9D8, 0xF9D9,
0xF9DA, 0xF9DB,
and
0xF9DC.
Note: If you move data
containing these additional characters to an older MySQL
installation which does not support them, you may encounter errors.
(Bug#12476)
NDBCluster: The
perror
utility included with the MySQL-Server
RPM now provides support for the --ndb
option, and so can be used to obtain error message text for MySQL
Cluster error codes. (Bug#13740)
When executing single-table UPDATE or
DELETE queries containing an
ORDER BY ... LIMIT N
clause, but not having any WHERE
clause, MySQL can now take advantage of an index to read the first
N rows in the ordering
specified in the query. If an index is used, only the first
N records will be read, as
opposed to scanning the entire table. (Bug#12915)
The MySQL-server RPM now explicitly
assigns the mysql system user to the
mysql user group during the
postinstallation process. This corrects an issue with upgrading the
server on some Linux distributions whereby a previously existing
mysql user was not changed to the mysql
group, resulting in wrong groups for files created following the
installation. (Bug#12823)
When a date column is set NOT NULL and
contains 0000-00-00, it will be updated
for UPDATE statements that contains
columnname
IS NULL in the WHERE clause. (Bug#14186)
Bugs fixed:
NDB Cluster:
REPLACE
failed when attempting to update a primary key value in a Cluster
table. (Bug#14007)
When the DATE_FORMAT() function appeared
in both the SELECT and
ORDER BY clauses of a query but with arguments that differ by
case (i.e. %m and %M), incorrect sorting may have occurred. (Bug#14016)
Make failed when attempting to build MySQL in different directory than
source. (Bug#11827)
PROCEDURE ANALYSE() could suggest a data
type with a negative display width. (Bug#10716)
InnoDB: During replication, There was a
failure to record events in the binary log that still occurred even
in the event of a ROLLBACK. For
example, this sequence of commands:
BEGIN;
CREATE TEMPORARY TABLE t1 (a INT) ENGINE=INNODB;
ROLLBACK;
INSERT INTO t1 VALUES (1);
would succeed on the replication master as expected. However, the
INSERT would fail on the slave because the
ROLLBACK would (erroneously) cause the
CREATE TEMPORARY TABLE statement not to
be written to the binlog. (Bug#7947)
NDB Cluster: Creating a table with packed
keys failed silently. NDB now supports
the
PACK_KEYS option to
CREATE TABLE correctly. (Bug#14514)
Non-latin1 object names were written with
wrong character set to grant tables. (Bug#14406)
Issuing STOP SLAVE after having acquired
a global read lock with FLUSH TABLES WITH READ
LOCK caused a deadlock. Now STOP SLAVE
is generates an error in such circumstances. (Bug#10942)
Portability fixes to support OpenSSL 0.9.8a. (Bug#14221)
Perform character set conversion of constant values whenever possible
without data loss. (Bug#10446)
A UNION of DECIMAL
columns could produce incorrect results. (Bug#14216)
InnoDB: Pad UTF-8
VARCHAR columns with
0x20. Pad UCS2 CHAR
columns with 0x0020. (Bug#10511)
Full-text indexing/searching failed for words that end with more than
one apostrophe. (Bug#5686)
Selecting from a table in both an outer query and a subquery could
cause a server crash. (Bug#14482)
Creating a table containing an ENUM or
SET column from within a stored procedure
or prepared statement caused a server crash later when executing the
procedure or statement. (Bug#14410)
mysql_fix_privilege_tables.sql contained
an erroneous comment that resulted in an error when the file
contents were processed. (Bug#14469)
On Windows, the server could crash during shutdown if both replication
threads and normal client connection threads were active. (Re-fix of
Bug#11796)
A LIMIT-related optimization failed to
take into account that MyISAM table
indexes can be disabled, causing Error 124 when it tried to use such
an index. (Bug#14616)
For a table that had been opened with HANDLER
OPEN, issuing OPTIMIZE TABLE,
ALTER TABLE, or
REPAIR TABLE caused a server crash. (Bug#14397)
CREATE TABLE
tbl_name
(...) SELECT ... could crash the server and write invalid data
into the .frm file if the
CREATE TABLE and
SELECT
both contained a column with the same name. Also, if a default value
is specified in the column definition, it is now actually used. (Bug#14480)
For MyISAM tables, incorrect query
results or incorrect updates could occur under these conditions:
There is a multiple-column index that includes a
BLOB column that is not the last column
in the index, and the statement performs a lookup on the index using
key column values that have NULL for
the BLOB column and that provide values
for all columns up to the BLOB column
and at least the next column in the index. (Bug#13814)
Deletes from a CSV table could cause
table corruption. (Bug#14672)
An update of a CSV table could cause a
server crash. (Bug#13894)
mysqld_safe did not
correctly start the
-max version of the server (if it was
present) if the --ledir option was
given. (Bug#13774)
The endian byte in for spatial values in WKB format was not
consistently respected. (Bug#12839)
An expression in an ORDER BY clause
failed with Unknown column 'col_name'
in 'order clause' if the expression referred to a column
alias. (Bug#11694)
Statements of the form CREATE TABLE ... SELECT
... that created a column with a multi-byte character set
could incorrectly calculate the maximum length of the column,
resulting in a Specified key was too long
error. (Bug#14139)
Use of col_name
= VALUES(col_name)
in the
ON DUPLICATE KEY UPDATE clause of an
INSERT statement failed with an
Column 'col_name'
in field list is ambiguous error. (Bug#13392)
On Windows, the server was not ignoring hidden or system directories
that Windows may have created in the data directory, and would treat
them as available databases. (Bug#4375)
LIKE operations did not work reliably for
the cp1250 character set. (Bug#13347)
Maximum values were handled incorrectly for command-line options of
type GET_LL. (Bug#12925)
Use of WITH ROLLUP PROCEDURE ANALYSE()
could hang the server. (Bug#14138)
TIMEDIFF(),
ADDTIME(), and STR_TO_DATE()
were not reporting that they could return NULL,
so functions that invoked them might misinterpret their results. (Bug#14009)
The example configuration files supplied with MySQL distributions
listed the thread_cache_size
variable as thread_cache. (Bug#13811)
LOAD DATA INFILE would not accept the
same character for both the ESCAPED BY
and the
ENCLOSED BY clauses. (Bug#11203)
NDB Cluster: Repeated transactions using
unique index lookups could cause a memory leak leading to error 288,
Out of index operations in transaction coordinator. (Bug#14199)
SELECT DISTINCT CHAR(col_name)
returned incorrect results after SET NAMES
utf8. (Bug#13233)
Character set conversion was not being done for
FIND_IN_SET(). (Bug#13751)
The default value of query_prealloc_size
was set to 8192, lower than its minimum of 16384. The minimum has been
lowered to 8192. (Bug#13334)
The server did not take character set into account in checking the
width of the mysql.user.Password
column. As a result, it could incorrectly generate long password
hashes even if the column was not long enough to hold them. (Bug#13064)
CAST(1E+300 TO SIGNED INT) produced an
incorrect result on little-endian machines. (Bug#13344)
mysqladmin and
mysqldump
would hang on SCO OpenServer. (Bug#13238)
Specifying --default-character-set=cp-932
for
mysqld would cause SQL
scripts containing comments written using that character set to fail
with a syntax error. (Bug#13487)
Given a column col_name
defined as
NOT NULL, a SELECT
... FROM ... WHERE col_name
IS NULL
query following SHOW TABLE STATUS would
erroneously return a non-empty result. (Bug#13535)
Corrected a memory-copying problem for big5
values when using icc
compiler on Linux IA-64 systems. (Bug#10836)
On BSD systems, the system crypt() call
could return an error for some salt values. The error was not
handled, resulting in a server crash. (Bug#13619)
Character set file parsing during
mysql_real_connect() read past the end of
a memory buffer. (Bug#6413)
The --interactive-timeout and
--slave-net-timeout options for
mysqld were not being
obeyed on Mac OS X and other BSD-based platforms. (Bug#8731)
Queries of the form (SELECT ...) ORDER BY ...
were being treated as a
UNION. This improperly resulted in only
distinct values being returned (because
UNION by default eliminates duplicate
results). Also, references to column aliases in
ORDER BY clauses following parenthesized
SELECT statements were not resolved
properly. (Bug#7672)
Multiple update queries using any type of subquery would be ignored by
a replication slave when a condition such as
--replicate-ignore-table like condition
was used. (Bug#13236)
An UPDATE query using a join would be
executed incorrectly on a replication slave. (Bug#12618)
NDBCluster: Placing multiple
[TCP DEFAULT] sections in the cluster
config.ini file crashed
ndb_mgmd. (The process
now exits gracefully with an appropriate error message.) (Bug#13611)
Multiple race conditions existed in OpenSSL, particularly noticeable
on Solaris. (Bug#9270)
With --log-slave-updatesExec_master_log_pos of SQL thread lagged
IO (Bug#13023)
PURGE MASTER LOGS statement that used
subquery for date crashed server. (Bug#10308)
D.1.7. Changes in release 4.1.15 (13 October 2005)
Functionality added or changed:
The limit of 255 characters on the input buffer for
mysql on Windows has been
lifted. The exact limit depends on what the system allows, but can be up
to 64K characters. A typical limit is 16K characters. (Bug#12929)
Added the myisam_stats_method, which
controls whether NULL values in indexes are
considered the same or different when collecting statistics for
MyISAM tables. This influences the query
optimizer as described in
Section 7.4.7, “MyISAM Index Statistics
Collection”. (Bug#12232)
Better detection of connection timeout for replication servers on
Windows allows elimination of extraneous Lost
connection errors in the error log. (Bug#5588)
When using IF NOT EXISTS with
CREATE DATABASE or
CREATE TABLE, a warning now is generated if the database or
table already exists. (Bug#6008):
A new command line argument was added to
mysqld to ignore client
character set information sent during handshake, and use server side
settings instead, to reproduce 4.0 behavior (Bug#9948):
mysqld --skip-character-set-client-handshake
Bugs fixed:
A prepared statement failed with Illegal mix of
collations if the client character set was
utf8 and the statement used a table that
had a character set of latin1. (Bug#12371)
If special characters such as '_' ,
'%', or the escape character were
included within the prefix of a column index,
LIKE
pattern matching on the indexed column did not return the correct
result. (Bug#13046,
Bug#13919)
NDBCluster: Updating a text-type column
during a cluster backup could cause the
ndbd process to crash,
due to the incorrect use of charset-normalized reads for. This could
also lead to “wrong” data in the backup
if such a column was updated during the backup; for example,
supposing that the column used latin_ci,
then “aAa”
might be stored in the backup as “AAA”.
(Bug#12950)
NDBCluster: When performing a delete of a
great many (tens of thousands of) rows at once from a Cluster table,
an improperly dereferenced pointer could cause the
mysqld process to crash.
(Bug#9282)
Server could over-allocate memory when performing a
FULLTEXT search for stopwords only. (Bug#13