Table of Contents
InnoDBThis appendix lists the changes from version to version in the MySQL source code through the latest version of MySQL 4.1.
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
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.
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Version 4.1 of the MySQL server includes many enhancements and new features. Binaries for this version are available for download at http://dev.mysql.com/downloads/mysql-4.1.html.
The SUBSTRING() function can now take a
negative value for the pos (position)
argument. See Section 12.3, “String Functions�.
Subqueries and derived tables (unnamed views). See Section 13.2.8, “Subquery Syntax�.
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�.
A newly designed GROUP_CONCAT() aggregate
function. See
Section 12.10, “Functions and Modifiers for Use with GROUP BY Clauses�.
Extensive Unicode (UTF8) support.
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...
BTREE index on HEAP
tables.
Support for OpenGIS spatial types (geographical data). See Chapter 16, Spatial Extensions.
SHOW WARNINGS shows warnings for the last
command. See Section 13.5.4.21, “SHOW WARNINGS Syntax�.
Faster binary protocol with prepared statements and parameter binding. See Section 17.2.4, “C API Prepared Statements�.
You can now issue multiple statements with a single C API call and then read the results in one go. See Section 17.2.9, “C API Handling of Multiple Statement Execution�.
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.
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
This is a bugfix release for the MySQL 4.1 release family.
Functionality added or changed:
Incompatible change:
Previously, the DATE_FORMAT() function
returned a binary string. Now it returns a string with a
character set and collation given by
character_set_connection and
collation_connection so that it can return
month and weekday names containing non-ASCII characters. (Bug#22646)
Incompatible change: The
prepared_stmt_count system variable has
been converted to the Prepared_stmt_count
global status variable (viewable with the SHOW GLOBAL
STATUS statement). (Bug#23159)
mysqldump --single-transaction now uses
START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT
*/ rather than BEGIN to start a
transaction, so that a consistent snapshot will be used on
those servers that support it. (Bug#19660)
The --memlock option relies on system calls
that are unreliable on some operating systems. If a crash
occurs, the server now checks whether
--memlock was specified and if so issues some
information about possible workarounds. (Bug#22860)
Bugs fixed:
No warning was issued for use of the DATA
DIRECTORY or INDEX DIRECTORY
table options on a platform that does not support them. (Bug#17498)
Hebrew-to-Unicode conversion failed for some characters. Definitions for the following Hebrew characters (as specified by the ISO/IEC 8859-8:1999) were added: LEFT-TO-RIGHT MARK (LRM), RIGHT-TO-LEFT MARK (RLM) (Bug#24037)
Certain joins using Range checked for each
record in the query execution plan could cause the
server to crash. (Bug#24776)
If there was insufficient memory available to mysqld, this could sometimes cause the server to hang during startup. (Bug#24751)
Optimizations that are legal only for subqueries without
tables and WHERE conditions were applied
for any subquery without tables. (Bug#24670)
NDB Cluster: In some circumstances,
shutting down the cluster could cause connected
mysqld processes to crash. (Bug#25668)
mysqltest incorrectly tried to retrieve result sets for some queries where no result set was available. (Bug#19410)
mysqltest crashed with a stack overflow. (Bug#24498)
The server was built even when configure
was run with the --without-server option.
(Bug#23973)
A table created with the ROW_FORMAT = FIXED
table option lost the option if an index was added or dropped
with CREATE INDEX or DROP
INDEX. (Bug#23404)
The BUILD/check-cpu script did not recognize Celeron processors. (Bug#20061)
InnoDB exhibited thread thrashing with more
than 50 concurrent connections under an update-intensive
workload. (Bug#22868)
InnoDB showed substandard performance with
multiple queries running concurrently. (Bug#15815)
mysql_fix_privilege_tables did not handle a password containing embedded space or apostrophe characters. (Bug#17700)
Changing the value of MI_KEY_BLOCK_LENGTH
in myisam.h and recompiling MySQL
resulted in a myisamchk that saw existing
MyISAM tables as corrupt. (Bug#22119)
SET lc_time_names =
allowed only exact
literal values, not expression values. (Bug#22647)
value
Changes to the lc_time_names system
variable were not replicated. (Bug#22645)
mysqldump --order-by-primary failed if the primary key name was an identifier that required quoting. (Bug#13926)
Re-execution of CREATE DATABASE,
CREATE TABLE, and ALTER
TABLE statements as prepared statements caused
incorrect results or crashes. (Bug#22060)
The internal functions for table preparation, creation, and alteration were not re-execution friendly, causing problems in code that: repeatedly altered a table; repeatedly created and dropped a table; opened and closed a cursor on a table, altered the table, and then reopened the cursor. (Bug#4968, Bug#6895, Bug#19182, Bug#19733)
A deadlock could occur, with the server hanging on
Closing tables, with a sufficient number of
concurrent INSERT DELAYED, FLUSH
TABLES, and ALTER TABLE
operations. (Bug#23312)
Referencing an ambiguous column alias in an expression in the
ORDER BY clause of a query caused the
server to crash. (Bug#25427)
User-defined variables could consume excess memory, leading to
a crash caused by the exhaustion of resources available to the
MEMORY storage engine, due to the fact that
this engine is used by MySQL for variable storage and
intermediate results of GROUP BY queries.
Where SET had been used, such a condition
could instead give rise to the misleading error message
You may only use constant expressions with
SET, rather than Out of memory (Needed
NNNNNN bytes). (Bug#23443)
InnoDB: During a restart of the MySQL
Server that followed the creation of a temporary table using
the InnoDB storage engine, MySQL failed to
clean up in such a way that InnoDB still
attempted to find the files associated with such tables. (Bug#20867)
A compressed MyISAM table that became
corrupted could crash myisamchk and
possibly the MySQL Server. (Bug#23139)
A crash of the MySQL Server could occur when unpacking a
BLOB column from a row in a corrupted
MyISAM table. This could happen when trying to repair a table
using either REPAIR TABLE or
myisamchk; it could also happen when trying
to access such a “broken� row using statements
like SELECT if the table was not marked as
crashed. (Bug#22053)
Trailing spaces were not removed from Unicode
CHAR column values when used in indexes.
This resulted in excessive usage of storage space, and could
affect the results of some ORDER BY queries
that made use of such indexes.
Note: When upgrading, it is
necessary to re-create any existing indexes on Unicode
CHAR columns in order to take advantage of
the fix. This can be done by using a REPAIR
TABLE statement on each affected table.
The stack size for NetWare binaries was increased to 128KB to prevent problems caused by insufficient stack size. (Bug#23504)
ALTER ENABLE KEYS or ALTER TABLE
DISABLE KEYS combined with another ALTER
TABLE option other than RENAME TO
did nothing. In addition, if ALTER TABLE was used on a table
having disabled keys, the keys of the resulting table were
enabled. (Bug#24395)
Queries using a column alias in an expression as part of an
ORDER BY clause failed, an example of such
a query being SELECT mycol + 1 AS mynum FROM mytable
ORDER BY 30 - mynum. (Bug#22457)
STR_TO_DATE() returned
NULL if the format string contained a space
following a non-format character. (Bug#22029)
Selecting into variables sometimes returned incorrect wrong results. (Bug#20836)
A server crash occurred when using LOAD
DATA to load a table containing a NOT
NULL spatial column, when the statement did not load
the spatial column. Now a NULL supplied to NOT NULL
column error occurs. (Bug#22372)
The --extern option for
mysql-test-run.pl did not function
correctly. (Bug#24354)
ALTER TABLE statements that performed both
RENAME TO and {ENABLE|DISABLE}
KEYS operations caused a server crash. (Bug#24089)
There was a race condition in the InnoDB
fil_flush_file_spaces() function. (Bug#24089)
Some small double precision numbers (such as
1.00000001e-300) that should have been
accepted were truncated to zero. (Bug#22129)
LAST_DAY('0000-00-00') could cause a server
crash. (Bug#23653)
Through the C API, the member strings in
MYSQL_FIELD for a query that contains
expressions may return incorrect results. (Bug#21635)
IN() can return NULL,
but did not signal that to the query processor, causing
incorrect results for IS NULL operations.
(Bug#17047)
The server could send incorrect column count information to the client for queries that produce a larger number of columns than can fit in a two-byte number. (Bug#19216)
SQL statements close to the size of
max_allowed_packet could produce binary log
events larger than max_allowed_packet that
could not be read by slave servers. (Bug#19402)
If elements in a non-top-level IN subquery
were accessed by an index and the subquery result set included
a NULL value, the quantified predicate that
contained the subquery was evaluated to
NULL when it should return a
non-NULL value. (Bug#23478)
Metadata for columns calculated from scalar subqueries was limited to integer, double, or string, even if the actual type of the column was different. (Bug#11032)
For ODBC compatibility, MySQL supports use of WHERE
for
col_name IS NULLDATE or DATETIME columns
that are NOT NULL, to allow column values
of '0000-00-00' or '0000-00-00
00:00:00' to be selected. However, this was not
working for WHERE clauses in
DELETE statements. (Bug#23412)
mysql did not check for errors when fetching data during result set printing. (Bug#22913)
Adding a day, month, or year interval to a
DATE value produced a
DATE, but adding a week interval produced a
DATETIME value. Now all produce a
DATE value. (Bug#21811)
For not-yet-authenticated connections, the
Time column in SHOW
PROCESSLIST was a random value rather than
NULL. (Bug#23379)
The Handler_rollback status variable
sometimes was incremented when no rollback had taken place.
(Bug#22728)
Lack of validation for input and output
TIME values resulted in several problems:
SEC_TO_TIME() within subqueries incorrectly
clipped large values; SEC_TO_TIME() treated
BIGINT UNSIGNED values as signed; only
truncation warnings were produced when both truncation and
out-of-range TIME values occurred. (Bug#11655, Bug#20927)
Range searches on columns with an index prefix could miss records. (Bug#20732)
Transient errors in replication from master to slave may
trigger multiple Got fatal error 1236: 'binlog
truncated in the middle of event' errors on the
slave. (Bug#4053)
If COMPRESS() returned
NULL, subsequent invocations of
COMPRESS() within a result set or within a
trigger also returned NULL. (Bug#23254)
mysql would lose its connection to the server if its standard output was not writable. (Bug#17583)
mysql-test-run did not work correctly for RPM-based installations. (Bug#17194)
The return value from my_seek() was
ignored. (Bug#22828)
MySQL would fail to build on the Alpha platform. (Bug#23256)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
This is a bugfix release for the MySQL 4.1 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:
If the user specified the server options
--max-connections=
or
N--table-open-cache=,
a warning would be given in some cases that some values were
recalculated, with the result that
M--table-open-cache could be assigned greater
value.
It should be noted that, in such cases, both the warning and
the increase in the --table-open-cache value
were completely harmless. Note also that it is not possible
for the MySQL Server to predict or to control limitations on
the maximum number of open files, since this is determined by
the operating system.
The recalculation code has now been fixed to ensure that the
value of --table-open-cache is no longer
increased automatically, and that a warning is now given only
if some values had to be decreased due to operating system
limits.
The mysqld manpage has been reclassified from volume 1 to volume 8. (Bug#21220)
MySQL now can do stack dumps on x86_64 and
i386/NPTL systems. (Bug#21250)
The LOAD DATA FROM MASTER and LOAD
TABLE FROM MASTER statements are deprecated. See
Section 13.6.2.2, “LOAD DATA FROM MASTER Syntax�, for recommended
alternatives. (Bug#18822, Bug#9125, Bug#12187, Bug#14399,
Bug#15025, Bug#20596)
A warning now is issued if the client attempts to set the
SQL_LOG_OFF variable without the
SUPER privilege. (Bug#16180)
Bugs fixed:
Deleting entries from a large MyISAM index
could cause index corruption when it needed to shrink. Deletes
from an index can happen when a record is deleted, when a key
changes and must be moved, and when a key must be un-inserted
because of a duplicate key. This can also happen in
REPAIR TABLE when a duplicate key is found
and in myisamchk when sorting the records
by an index. (Bug#22384)
Setting myisam_repair_threads caused any
repair operation on a MyISAM table to fail
to update the cardinality of indexes, instead making them
always equal to 1. (Bug#18874)
Within a prepared statement, SELECT (COUNT(*) =
1) (or similar use of other aggregate functions) did
not return the correct result for statement re-execution. (Bug#21354)
DELETE IGNORE could hang for foreign key
parent deletes. (Bug#18819)
Redundant binary log LAST_INSERT_ID events
could be generated;
LAST_INSERT_ID(
didn't return the value of expr)expr;
LAST_INSERT_ID() could return the value
generated by the current statement if the call happens after
value generation, as in:
CREATE TABLE t1 (i INT AUTO_INCREMENT PRIMARY KEY, j INT); INSERT INTO t1 VALUES (NULL, 0), (NULL, LAST_INSERT_ID());
FROM_UNIXTIME() did not accept arguments up
to POWER(2,31)-1, which it had previously.
(Bug#9191)
A literal string in a GROUP BY clause could
be interpreted as a column name. (Bug#14019)
WITH ROLLUP could group unequal values.
(Bug#20825)
LIKE searches failed for indexed
utf8 character columns. (Bug#20471)
The optimizer sometimes mishandled R-tree indexes for
GEOMETRY data types, resulting in a server
crash. (Bug#21888)
Entries in the slow query log could have an incorrect
Rows_examined value. (Bug#12240)
Insufficient memory
(myisam_sort_buffer_size) could cause a
server crash for several operations on
MyISAM tables: repair table, create index
by sort, repair by sort, parallel repair, bulk insert. (Bug#23175)
REPAIR TABLE ... USE_FRM could cause a
server crash or hang when used for a MyISAM
table in a database other than the default database. (Bug#22562)
OPTIMIZE TABLE with
myisam_repair_threads > 1 could result
in MyISAM table corruption. (Bug#8283)
The result for CAST() when casting a value
to UNSIGNED was limited to the maximum
signed BIGINT value (9223372036854775808),
not the maximum unsigned value (18446744073709551615). (Bug#8663)
For multiple-table UPDATE statements,
storage engines were not notified of duplicate-key errors.
(Bug#21381)
Successive invocations of a COUNT(*) query
containing a join on two MyISAM tables and
a WHERE clause of the form WHERE
( yielded different results. (Bug#21019)
table1.column1
=
table2.column2)
OR
table2.column2
IS NULL
Using ALTER TABLE to add an
ENUM column with an enumeration value
containing 0xFF caused the name of the
first table column to be lost. (Bug#20922)
PROCEDURE ANALYSE() returned incorrect
values of M
FLOAT( and
M,
D)DOUBLE(. (Bug#20305)
M,
D)
A query that used GROUP BY and an
ALL or ANY quantified
subquery in a HAVING clause could trigger
an assertion failure. (Bug#21853)
For an ENUM column that used the
ucs2 character set, using ALTER
TABLE to modify the column definition caused the
default value to be lost. (Bug#20108)
Creating a TEMPORARY table with the same
name as an existing table that was locked by another client
could result in a lock conflict for DROP TEMPORARY
TABLE because the server unnecessarily tried to
acquire a name lock. (Bug#21096)
Incorporated some portability fixes into the definition of
__attribute__ in
my_global.h. (Bug#2717)
In the package of pre-built time zone tables that is available
for download at
http://dev.mysql.com/downloads/timezones.html, the tables
now explicitly use the utf8 character set
so that they work the same way regardless of the system
character set value. (Bug#21208)
The build process incorrectly tried to overwrite
sql/lex_hash.h. This caused the build to
fail when using a shadow link tree pointing to original
sources that were owned by another account. (Bug#18888)
Execution of a prepared statement that uses an
IN subquery with aggregate functions in the
HAVING clause could cause a server crash.
(Bug#22085)
Selecting from a MERGE table could result
in a server crash if the underlying tables had fewer indexes
than the MERGE table itself. (Bug#21617,
Bug#22937)
SUBSTR() results sometimes were stored
improperly into a temporary table when multi-byte character
sets were used. (Bug#20204)
Parallel builds occasionally failed on Solaris. (Bug#16282)
The source distribution failed to compile when configured with
the --without-geometry option. (Bug#12991)
The server returns a more informative error message when it
attempts to open a MERGE table that has
been defined to use non-MyISAM tables. (Bug#10974)
On Mac OS X, zero-byte read() or
write() calls to an SMB-mounted filesystem
could return a non-standard return value, leading to data
corruption. Now such calls are avoided. (Bug#12620)
For INSERT ... ON DUPLICATE KEY UPDATE, use
of
VALUES(
within the col_name)UPDATE clause sometimes was
handled incorrectly. (Bug#21555)
Table aliases in multiple-table DELETE
statements sometimes were not resolved. (Bug#21392)
EXPORT_SET() did not accept arguments with
coercible character sets. (Bug#21531)
The --collation-server server option was
being ignored. With the fix for this problem, if you choose a
non-default character set with
--character-set-server, you should also use
--collation-server to specify the collation.
(Bug#15276)
A subquery that uses an index for both the
WHERE and ORDER BY
clauses produced an empty result. (Bug#21180)
Queries containing a subquery that used aggregate functions could return incorrect results. (Bug#16792)
The MD5(), SHA1(), and
ENCRYPT() functions should return a binary
string, but the result sometimes was converted to the
character set of the argument. MAKE_SET()
and EXPORT_SET() now use the correct
character set for their default separators, resulting in
consistent result strings which can be coerced according to
normal character set rules. (Bug#20536)
For a MyISAM table with a
FULLTEXT index, compression with
myisampack or a check with
myisamchk after compression resulted in
table corruption. (Bug#19702)
The optimizer could produce an incorrect result after
AND with collations such as
latin1_german2_ci,
utf8_czech_ci, and
utf8_lithianian_ci. (Bug#9509)
character_set_results can be
NULL to signify “no
conversion,� but some code did not check for
NULL, resulting in a server crash. (Bug#21913)
The myisam_stats_method variable was
mishandled when set from an option file or on the command
line. (Bug#21054)
libmysqld produced some warnings to
stderr which could not be silenced. These
warnings now are suppressed. (Bug#13717)
If a column definition contained a character set declaration,
but a DEFAULT value began with an
introducer, the introducer character set was used as the
column character set. (Bug#20695)
Some Linux-x86_64-icc packages (of previous releases) mistakenly contained 32-bit binaries. Only ICC builds are affected, not gcc builds. Solaris and FreeBSD x86_64 builds are not affected. (Bug#22238)
For TIME_FORMAT(), the
%H and %k format
specifiers can return values larger than two digits (if the
hour is greater than 99), but for some query results that
contained three-character hours, column values were truncated.
(Bug#19844)
For table-format output, mysql did not always calculate columns widths correctly for columns containing multi-byte characters in the column name or contents. (Bug#17939)
Views could not be updated within a stored function or trigger. (Bug#17591)
Usernames have a maximum length of 16 characters (even if they contain multi-byte characters), but were being truncated to 16 bytes. (Bug#20393)
Database and table names have a maximum length of 64 characters (even if they contain multi-byte characters), but were being truncated to 64 bytes. (Bug#21432)
When using tables created under MySQL 4.1 with a 5.0 server,
if the tables contained VARCHAR columns,
for some queries the metadata sent to the client could have an
empty column name. (Bug#14897)
On 64-bit systems, use of the cp1250
character set with a primary key column in a
LIKE clause caused a server crash for
patterns having letters in the range 128..255. (Bug#19741)
A subquery in the WHERE clause of the outer
query and using IN and GROUP
BY returned an incorrect result. (Bug#16255)
COUNT(*) queries with ORDER
BY and LIMIT could return the
wrong result. (Bug#21787)
Note: This problem was
introduced by the fix for Bug#9676, which limited the rows
stored in a temporary table to the LIMIT
clause. This optimization is not applicable to non-group
queries with aggregate functions. The current fix disables the
optimization in such cases.
Running SHOW MASTER LOGS at the same time
as binary log files were being switched would cause
mysqld to hang. (Bug#21965)
Adding ORDER BY to a SELECT
DISTINCT( query
could produce incorrect results. (Bug#21456)
expr)
For InnoDB tables, the server could crash
when executing NOT IN () subqueries. (Bug#21077)
mysqld --flush failed to flush
MyISAM table changes to disk following an
UPDATE statement for which no updated
column had an index. (Bug#20060)
The --with-collation option was not honored
for client connections. (Bug#7192)
NDB Cluster: The
ndb_size.pl script did not account for
TEXT and BLOB column
values correctly. (Bug#21204)
NDB Cluster: Attempting to create an
NDB table on a MySQL with an existing
non-Cluster table with the same name in the same database
could result in data loss or corruption. MySQL now issues a
warning when a SHOW TABLES or other
statement causing table discovery finds such a table. (Bug#21378)
NDB Cluster (NDB API): Attempting to read a
nonexistent tuple using Commit mode for
NdbTransaction::execute() caused node
failures. (Bug#22672)
NDB Cluster: Restoring a cluster failed if
there were any tables with 128 or more columns. (Bug#23502)
NDB Cluster: INSERT ... ON
DUPLICATE KEY UPDATE on an NDB
table could lead to deadlocks and memory leaks. (Bug#23200)
NDB Cluster: If a node restart could not be
performed from the REDO log, no node takeover took place. This
could cause partitions to be left empty during a system
restart. (Bug#22893)
NDB Cluster: Multiple node restarts in
rapid succession could cause a system restart to fail (Bug#22892), or induce a race condition (Bug#23210).
NDB Cluster: The node recovery algorithm
was missing a version check for tables in the
ALTER_TABLE_COMMITTED state (as opposed to
the TABLE_ADD_COMMITTED state, which has
the version check). This could cause inconsistent schemas
across nodes following node recovery. (Bug#21756)
NDB Cluster: The output for the
--help option used with
NDB executable programs
(ndbd, ndb_mgm,
ndb_restore, ndb_config,
and so on) referred to the Ndb.cfg file,
instead of my.cnf. (Bug#21585)
NDB Cluster: The ndb_mgm
management client did not set the exit status on errors,
always returning 0 instead. (Bug#21530)
NDB Cluster: Cluster logs were not rotated
following the first rotation cycle. (Bug#21345)
NDB Cluster: When inserting a row into an
NDB table with a duplicate value for a
non-primary unique key, the error issued would reference the
wrong key. (Bug#21072)
NDB Cluster: Under some circumstances,
local checkpointing would hang, keeping any unstarted nodes
from being started. (Bug#20895)
NDB Cluster: In some cases where
SELECT COUNT(*) from an
NDB table should have yielded an error,
MAX_INT was returned instead. (Bug#19914)
NDB Cluster: ndb_restore
did not always make clear that it had recovered successfully
from temporary errors while restoring a cluster backup. (Bug#19651)
NDB Cluster: A problem with takeover during
a system restart caused ordered indexes to be rebuilt
incorrectly. (Bug#15303)
NDB Cluster: The ndb_mgm
program was included in both the
MySQL-ndb-tools and
MySQL-ndb-management RPM packages,
resulting in a conflict if both were installed. Now
ndb_mgm is included only in
MySQL-ndb-tools. (Bug#21058)
NDB Cluster: ndb_size.pl
and ndb_error_reporter were missing from
RPM packages. (Bug#20426)
NDB Cluster: Setting
TransactionDeadlockDetectionTimeout to a
value greater than 12000 would cause scans to deadlock, time
out, fail to release scan records, until the cluster ran out
of scan records and stopped processing. (Bug#21800)
NDB Cluster: The server provided a
non-descriptive error message when encountering a fatally
corrupted REDO log. (Bug#21615)
NDB Cluster: A partial rollback could lead
to node restart failures. (Bug#21536)
NDB Cluster: The failure of a unique index
read due to an invalid schema version could be handled
incorrectly in some cases, leading to unpredictable results.
(Bug#21384)
NDB Cluster: In a cluster with more than 2
replicas, a manual restart of one of the data nodes could fail
and cause the other nodes in its nodegroup to shut down. (Bug#21213)
NDB Cluster: When the redo buffer ran out
of space, a Pointer too large error was
raised and the cluster could become unusable until restarted
with --initial. (Bug#20892)
NDB Cluster: In some situations with a high
disk-load, writing of the redo log could hang, causing a crash
with the error message GCP STOP
detected. (Bug#20904)
NDB Cluster: ndb_size.pl
and ndb_error_reporter were missing from
RPM packages. (Bug#20426)
NDB Cluster: The server failed with a
non-descriptive error message when out of data memory. (Bug#18475)
NDB Cluster: SELECT ... FOR
UPDATE failed to lock the selected rows. (Bug#18184)
NDB Cluster: Some queries involving joins
on very large NDB tables could crash the
MySQL server. (Bug#21059)
Character set collation was ignored in GROUP
BY clauses. (Bug#20709)
A query using WHERE did not
return consistent results on successive invocations. The
column
= constant OR
column IS NULLcolumn in each part of the
WHERE clause could be either the same
column, or two different columns, for the effect to be
observed. (Bug#21019)
A query using WHERE NOT
( yielded a
different result from the same query using the same
column < ANY
(subquery))column and
subquery with WHERE
(. (Bug#20975)
column > ANY
(subquery))
Using the extended syntax for TRIM()
— that is, TRIM(... FROM ...) —
caused erroneous output from EXPLAIN
EXTENDED statements. (Bug#17526)
DELETE with WHERE
condition on a BTREE-indexed column for a
MEMORY table deleted only the first matched
row. (Bug#9719)
For cross-database multiple-table UPDATE
statements, a user with all privileges for the default
database could update tables in another database for which the
user did not have UPDATE privileges. (Bug#7391)
mysql_install_db incorrectly had a blank first line. (Bug#20721)
Under heavy load (executing more than 1024 simultaneous complex queries), a problem in the code that handles internal temporary tables could lead to writing beyond allocated space and memory corruption. (Bug#21206)
Multiple invocations of the REVERSE()
function could return different results. (Bug#18243)
Conversion of TIMESTAMP values between UTC
and the local time zone resulted in some values having the
year 2069 rather than 1969. (Bug#16327)
Under certain circumstances,
AVG(
returned a value but
key_val)MAX(
returned an empty set due to incorrect application of
key_val)MIN()/MAX() optimization. (Bug#20954)
Using aggregate functions in subqueries yielded incorrect
results under certain circumstances due to incorrect
application of MIN()/MAX() optimization.
(Bug#20792)
Using > ALL with subqueries that return
no rows yielded incorrect results under certain circumstances
due to incorrect application of MIN()/MAX()
optimization. (Bug#18503)
Using ANY with “non-table�
subqueries such as SELECT 1 yielded
incorrect results under certain circumstances due to incorrect
application of MIN()/MAX() optimization.
(Bug#16302)
The use of WHERE in col_name
IS NULLSELECT statements
reset the value of LAST_INSERT_ID() to
zero. (Bug#14553)
Use of the join cache in favor of an index for ORDER
BY operations could cause incorrect result sorting.
(Bug#17212)
libmysqld returned TEXT
columns to the client as number of bytes, not number of
characters (which can be different for multi-byte character
sets). (Bug#19983)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
This is a bugfix release for the MySQL 4.1 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)
A new system variable, lc_time_names,
specifies the locale that controls the language used to
display day and month names and abbreviations. This variable
affects the output from the DATE_FORMAT(),
DAYNAME() and
MONTHNAME() functions. See
Section 5.10.9, “MySQL Server Locale Support�.
Bugs fixed:
Security fix: On Linux, and possibly other platforms using case-sensitive filesystems, it was possible for a user granted rights on a database to create or access a database whose name differed only from that of the first by the case of one or more letters. (CVE-2006-4226, Bug#17647)
Security fix: If a user has
access to MyISAM table
t, that user can create a
MERGE table m
that accesses t. However, if the
user's privileges on t are
subsequently revoked, the user can continue to access
t by doing so through
m. If this behavior is undesirable,
you can start the server with the new
--skip-merge option to disable the
MERGE storage engine. (Bug#15195)
Security fix: Invalid
arguments to DATE_FORMAT() caused a server
crash.
(CVE-2006-3469,
Bug#20729) Thanks to Jean-David Maillefer for discovering and
reporting this problem to the Debian project and to Christian
Hammers from the Debian Team for notifying us of it.
Closing of temporary tables failed if binary logging was not enabled. (Bug#20919)
Repeated DROP TABLE statements in a stored
procedure could sometimes cause the server to crash. (Bug#19399)
DATE_ADD() and
DATE_SUB() returned NULL
when the result date was on the day
'9999-12-31'. (Bug#12356)
For a DATE parameter sent via a
MYSQL_TIME data structure,
mysql_stmt_execute() zeroed the hour,
minute, and second members of the structure rather than
treating them as read-only. (Bug#20152)
The DATA DIRECTORY table option did not
work for TEMPORARY tables. (Bug#8706)
The mysql client did not ignore
client-specific commands (such as use or
help) that occurred as the first word on a
line within multiple-line /* ... */
comments. (Bug#20432)
The mysql client did not understand
help commands that had spaces at the end.
(Bug#20328)
Failure to account for a NULL table pointer
on big-endian machines could cause a server crash during type
conversion. (Bug#21135)
Some memory leaks in the libmysqld embedded
server were corrected. (Bug#16017)
When mysqldump disabled keys and locked a
MyISAM table, the lock operation happened
second. If another client performed a query on the table in
the interim, it could take a long time due to indexes not
being used. Now the lock operation happens first. (Bug#15977)
The length of the pattern string prefix for
LIKE operations was calculated incorrectly
for multi-byte character sets. As a result, the the scanned
range was wider than necessary if the prefix contained any
multi-byte characters. (Bug#16674, Bug#18359)
For very complex SELECT statements could
create temporary tables that were too big, but for which the
temporary files did not get removed, causing subsequent
queries to fail. (Bug#11824)
Using SELECT and a table join while running
a concurrent INSERT operation would join
incorrect rows. (Bug#14400)
Using SELECT on a corrupt
MyISAM table using the dynamic record
format could cause a server crash. (Bug#19835)
Checking a MyISAM table (using
CHECK TABLE) having a spatial index and
only one row would wrongly indicate that the table was
corrupted. (Bug#17877)
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: A Cluster whose storage nodes
were installed from the
MySQL-ndb-storage-
RPMs could not perform *CREATE or
ALTER operations that made use of
non-default character sets or collations. (Bug#14918)
NDB Cluster: The repeated creating and
dropping of a table would eventually lead to
NDB Error 826, Too many tables
and attributes ... Insufficient space. (Bug#20847)
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: 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)
SHOW CREATE TABLE did not display the
AUTO_INCREMENT column attribute if the SQL
mode was MYSQL323 or
MYSQL40. This also affected
mysqldump, which uses SHOW CREATE
TABLE to get table definitions. (Bug#14515)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
This is a security fix release for the MySQL 4.1 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 dropping of a temporary table whose name contained a
backtick ('`') character was not correctly
written to the binary log, which also caused it not to be
replicated correctly. (Bug#19188)
The client libraries had not been compiled for position-independent 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)
RPM packages had spurious dependencies on Perl modules and other programs. (Bug#13634)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
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.
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)
X-.i386.rpm
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 or
name\C (such as
name\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 utf8
VARCHAR 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 , when column
LIKE 'A%'column
had a key and used the latin2_czech_cs
collation, caused the wrong number of rows to be returned.
(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)
CAST( for large double AS SIGNED
INT)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
.
(Bug#16387)
TABLENAME_ibfk_0
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)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Functionality added or changed:
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)
STR_TO_DATE(1,NULL) caused a server crash.
(CVE-2006-3081,
Bug#15828)
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)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
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 option 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
error. (Bug#15775)
hostname is not allowed to
connect to this MySQL server
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)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Functionality added or changed:
The CHAR() function now takes an optional
USING
clause that may be used to produce a result in a specific
character set rather than in the connection character set.
charset
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 clause,
but not having any NWHERE 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
in the WHERE clause. (Bug#14186)
columnname IS
NULL
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)
Closed a memory leak in the SSL code. (Bug#14780)
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 could crash the server and write
invalid data into the tbl_name
(...) SELECT ....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
' if the expression referred to a column
alias. (Bug#11694)
col_name' in 'order
clause'
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 in the
col_name =
VALUES(col_name)ON DUPLICATE KEY UPDATE clause of an
INSERT statement failed with an
Column ' error. (Bug#13392)
col_name' in field
list is ambiguous
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( returned
incorrect results after col_name)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
query following col_name IS NULLSHOW 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-updates
Exec_master_log_pos of SQL thread lagged IO
(Bug#13023)
PURGE MASTER LOGS statement that used
subquery for date crashed server. (Bug#10308)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
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#13582)
UNION of two DECIMAL
columns returned wrong field type. (Bug#13372)
CHECKSUM TABLE locked
InnoDB tables and did not use a consistent
read. (Bug#12669)
SHOW CREATE TABLE did not display any
FOREIGN KEY clauses if a temporary file
could not be created. Now SHOW CREATE TABLE
displays an error message in an SQL comment if this occurs.
(Bug#13002)
Display of the AUTO_INCREMENT attribute by
SHOW CREATE TABLE was not controlled by the
NO_FIELD_OPTIONS SQL mode as it should have
been. (Bug#7977)
For VARCHAR columns with the
ucs2 character set,
InnoDB trimmed trailing
0x20 bytes rather than
0x0020 words, resulting in incorrect index
lookups later. (Bug#12178)
MySQL programs in binary distributions for Solaris 8/9/10 x86 systems would not run on Pentium III machines. (Bug#6772)
NDB Cluster: Multiple
ndb_mgmd processes in a cluster would not
know each other's IP addresses. (Bug#12037)
NDB Cluster: With two
mgmd processes in a cluster,
ndb_mgm output for SHOW
would display the same IP address for both processes, even
when they were on different hosts. (Bug#11595)
The --replicate-rewrite-db and
--replicate-do-table options did not work for
statements in which tables were aliased to names other than
those listed by the options. (Bug#11139)
After running configure with the
--with-embedded-privilege-control option, the
embedded server failed to build. (Bug#13501)
Queries against a MERGE table that has a
composite index could produce incorrect results. (Bug#9112)
Comparisons involving row constructors containing constants could cause a server crash. (Bug#13356)
MySQL would pass an incorrect key length to storage engines
for MIN(). This could cause warnings such
as InnoDB: Warning: using a partial-field key prefix
in search. in the .err log.
(Bug#13218, same as Bug#11039 in MySQL 5.0.7)
NDB Cluster: LOAD DATA
INFILE with a large data file failed. (Bug#10694)
NDB Cluster: Adding an index to a table
with a large number of columns (more then 100) crashed the
storage node. (Bug#13316)
Aggregate functions sometimes incorrectly were allowed in the
WHERE clause of UPDATE
and DELETE statements. (Bug#13180)
MIN() and MAX()
sometimes returned a non-NULL value for an
empty row set (for example, SELECT MAX(1) FROM
empty_table). (Bug#12882)
LOAD DATA INFILE did not respect the
NO_AUTO_VALUE_ON_ZERO SQL mode setting.
(Bug#12053)
Use of a user-defined function within the
HAVING clause of a query resulted in an
Unknown column error. (Bug#11553)
The data type for DECIMAL columns was not
respected when updating the column from another column. For
example, updating a DECIMAL(10,1) column
with the value from a DECIMAL(10,5) column
resulted in a DECIMAL(10,5) value being
stored. Similarly, altering a column with a
DECIMAL(10,5) datatype to a
DECIMAL(10,1) data type did not properly
convert data values. (Bug#7598)
NDB: A cluster shutdown following the crash
of a data node would fail to terminate the remaining node
processes, even though ndb_mgm showed the
shutdown request as having been completed. (Bug#10938, Bug#9996, Bug#11623)
For queries with DISTINCT and WITH
ROLLUP, the DISTINCT should be
applied after the rollup operation, but was not always. (Bug#12887)
The counters for the Key_read_requests,
Key_reads,
Key_write_requests, and
Key_writes status variables were changed
from unsigned long to unsigned
longlong to accommodate larger values before the
variables roll over and restart from 0. (Bug#12920)
A column that can be NULL was not handled
properly for WITH ROLLUP in a subquery or
view. (Bug#12885)
Shared-memory connections were not working on Windows. (Bug#12723)
A concurrency problem for CREATE ... SELECT
could cause a server crash. (Bug#12845)
Performing an IS NULL check on the
MIN() or MAX() of an
indexed column in a complex query could produce incorrect
results. (Bug#12695)
The NDB START BACKUP command could be
interrupted by a SHOW command. (Bug#13054)
The LIKE ... ESCAPE syntax produced invalid
results when escape character was larger than one byte. (Bug#12611)
A client connection thread cleanup problem caused the server to crash when closing the connection if the binary log was enabled. (Bug#12517)
CHECKSUM TABLE command returned incorrect
results for tables with deleted rows. After upgrading, users
who used stored checksum information to detect table changes
should rebuild their checksum data. (Bug#12296)
The value of character_set_results could be
set to NULL, but returned the string
"NULL" when retrieved. (Bug#12363)
GROUP_CONCAT() ignored an empty string if
it was the first value to occur in the result. (Bug#12863)
Outer join elimination was erroneously applied for some
queries that used a NOT BETWEEN condition,
an
IN(
condition, or an value_list)IF() condition. (Bug#12101, Bug#12102)
Reverted a change introduced in MySQL 4.1.13 to fix a problem
of SHOW FIELDS truncating the
TYPE column to 40 characters. This fix was
reverted for MySQL 4.1 because it broke existing applications.
The fix will be made to MySQL 5.0 instead (5.0.13). (Bug#7142, Bug#12817)
On HP-UX 11.x (PA-RISC), the -L option caused
mysqlimport to crash. (Bug#12958)
After changing the character set with SET CHARACTER
SET, the result of the
GROUP_CONCAT() function was not converted
to the proper character set. (Bug#12829)
myisampack did not properly pack
BLOB values larger than
224 bytes. (Bug#4214)
The server crashed when one thread resized the query cache while another thread was using it. (Bug#12848)
mysqld_multi now quotes arguments on command lines that it constructs to avoid problems with arguments that contain shell metacharacters. (Bug#11280)
When any --replicate-wild-* option is used,
the slave ignores SET ONE_SHOT TIME_ZONE
statements as belonging to a non-replicated table. (Bug#12542)
Deadlock occurred when several account management statements
were run (particularly between FLUSH
PRIVILEGES/SET PASSWORD and
GRANT/REVOKE
statements). (Bug#12423)
On Windows, the server was preventing tables from being
created if the table name was a prefix of a forbidden name.
For example, nul is a forbidden name
because it's the same as a Windows device name, but a table
with the name of n or nu
was being forbidden as well. (Bug#12325)
InnoDB was too permissive with
LOCK TABLE ... READ LOCAL and allowed new
inserts into the table. Now READ LOCAL is
equivalent to READ for
InnoDB. This will cause slightly more
locking in mysqldump, but makes
InnoDB table dumps consistent with
MyISAM table dumps. (Bug#12410)
The have_innodb read-only system variable
could not be selected with SELECT
@@have_innodb. (Bug#9613)
A UNION of long utf8
VARCHAR columns was sometimes returned as a
column with a LONGTEXT data type rather
than VARCHAR. This could prevent such
queries from working at all if selected into a
MEMORY table because the
MEMORY storage engine does not support the
TEXT data types. (Bug#12537)
NDB Cluster: Corrected the parsing of the
CLUSTERLOG command by
ndb_mgm to allow multiple items. (Bug#12833)
NDB Cluster: Improved error messages
related to filesystem issues. (Bug#11218)
NDB Cluster: When a schema was detected to
be corrupt, ndb neglected to close it,
resulting in a “file already open� error if the
schema was opened again later. written. (Bug#12027)
NDB Cluster: When it could not copy a
fragment, ndbd exited without printing a
message about the condition to the error log. Now the message
is written. (Bug#12900)
NDB Cluster: When a disk full condition
occurred, ndbd exited without printing a
message about the condition to the error log. Now the message
is written. (Bug#12716)
If a client has opened an InnoDB table for
which the .ibd file is missing,
InnoDB would not honor a DROP
TABLE statement for the table. (Bug#12852)
SELECT GROUP_CONCAT(...) FROM DUAL in a
subquery could cause the client to hang. (Bug#12861)
NDB Cluster: Bad values in
config.ini caused
ndb_mdmd to crash. (Bug#12043)
TRUNCATE TABLE did not work with
TEMPORARY InnoDB tables.
(Bug#11816)
ALTER TABLE did not move the
table to default database unless the new name was qualified
with the database name. (Bug#11493)
db_name.t
RENAME t
Spatial index corruption could occur during updates. (Bug#9645)
If a DROP DATABASE fails on a master server
due to the presence of a non-database file in the database
directory, the master have the database tables deleted, but
not the slaves. To deal with failed database drops, we now
write DROP TABLE statements to the binary
log for the tables so that they are dropped on slaves. (Bug#4680)
DELETE or UPDATE for an
indexed MyISAM table could fail. This was
due to a change in end-space comparison behavior from 4.0 to
4.1. (Bug#12565)
The ARCHIVE storage engine does not support
deletes, but it was possible to delete by using
DELETE or TRUNCATE TABLE
with a FEDERATED table that points to an
ARCHIVE table. (Bug#12836)
Queries that created implicit temporary tables could return incorrect data types for some columns. (Bug#11718)
An optimizer estimate of zero rows for a non-empty
InnoDB table used in a left or right join
could cause incomplete rollback for the table. (Bug#12779)
A SELECT DISTINCT query with a constant
value for one of the columns would return only a single row.
(Bug#12625)
Users created using an IP address or other alias rather than a
hostname listed in /etc/hosts could not
set their own passwords. (Bug#12302)
NDB Cluster: An ALTER
TABLE command caused loss of data stored prior to
the issuing of the command. (Bug#12118)
MEMORY tables using
B-Tree index on 64-bit platforms could
produce false table is full errors. (Bug#12460)
MySQL failed to compile when
--with-ndb-ccflags was specified. (Bug#11538)
On Windows when the
--innodb_buffer_pool_awe_mem_mb option has
been given, the server detects whether AWE support is
available and has been compiled into the server, and displays
an appropriate error message if not. (Bug#6581)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Functionality added or changed:
SHOW CHARACTER SET and
INFORMATION_SCHEMA now properly report the
Latin1 character set as
cp1252. (Bug#11216)
MySQL Cluster: A new -P
option is available for use with the
ndb_mgmd client. When called with this
option, ndb_mgmd prints all configuration
data to stdout, then exits.
The output of perror --help now displays
the --ndb option. (Bug#11999)
NDB: Improved handling of the configuration
variables NoOfPagesToDiskDuringRestartACC,
NoOfPagesToDiskAfterRestartACC,
NoOfPagesToDiskDuringRestartTUP, and
NoOfPagesToDiskAfterRestartTUP should
result in noticeably faster startup times for MySQL Cluster.
(Bug#12149)
Added support of where clause for queries with FROM
DUAL. (Bug#11745)
Added an optimization that avoids key access with
NULL keys for the ref
method when used in outer joins. (Bug#12144)
Added new query cache test for the embedded server to the test suite, there are now specific tests for the embedded and non-embedded servers. (Bug#9508)
Bugs fixed:
If a thread (connection) has tables locked, the query cache is switched off for that thread. This prevents invalid results where the locking thread inserts values between a second thread connecting and selecting from the table. (Bug#12385)
Prepared statement parameters could cause errors in the binary
log if the character set was cp932. (Bug#11338)
Queries with subqueries that contain outer joins could return wrong results. (Bug#11479)
Slave I/O threads were considered to be in the running state
when launched (rather than after successfully connecting to
the master server), resulting in incorrect SHOW SLAVE
STATUS output. (Bug#10780)
On Windows, the server could crash during shutdown if both replication threads and normal client connection threads were active. (Bug#11796)
Some subqueries of the form SELECT ... WHERE ROW(...)
IN ( were being
handled incorrectly. (Bug#11867)
subquery)
The mysql_info() C API function could
return incorrect data when executed as part of a
multi-statement that included a mix of statements that do and
do not return information. (Bug#11688)
Renamed the rest() macro in
my_list.h to
list_rest() to avoid name clashes with user
code. (Bug#12327)
myisampack failed to delete
.TMD temporary files when run with
-T option. (Bug#12235)
Concatenating
USER()/DATEBASE() with a
column produces invalid results. (Bug#12351)
For PKG installs on Mac OS X, the preinstallation and postinstallation scripts were being run only for new installations and not for upgrade installations, resulting in an incomplete installation process. (Bug#11380)
User variables were not automatically cast for comparisons, causing queries to fail if the column and connection character sets differed. Now when mixing strings with different character sets but the same coercibility, allow conversion if one character set is a superset of the other. (Bug#10892)
Pathame values for options such as ---basedir
or --datadir didn't work on Japanese Windows
machines for directory names containing multi-byte characters
having a second byte of 0x5C
(‘\’). (Bug#5439)
Mishandling of comparison for rows containing
NULL values against rows produced by an
IN subquery could cause a server crash.
(Bug#12392)
INSERT ... SELECT ... ON DUPLICATE KEY
UPDATE could fail with an erroneous “Column
'col_name' specified twice�
error. (Bug#10109)
myisam.test failed when server compiled
using --without-geometry option. (Bug#11083)
Creation of the mysql group account failed
during the RPM installation. (Bug#12348)
FLUSH TABLES WITH READ LOCK combined with
LOCK TABLE .. WRITE caused deadlock. (Bug#9459)
GROUP_CONCAT ignores the
DISTINCT modifier when used in a query
joining multiple tables where one of the tables has a single
row. (Bug#12095)
UNION query with
FULLTEXT could cause server crash. (Bug#11869)
Performing
DATE(LEFT(
on a column,8))DATE column produces incorrect
results. (Bug#12266)
max_connections_per_hour setting was being
capped by unrelated max_user_connections
setting. (Bug#9947)
big5 strings were not being stored in
FULLTEXT index. (Bug#12075)
Updated dependency list for RPM builds to include missing
dependencies such as useradd and
groupadd. (Bug#12233)
Multiplying ABS() output by a negative
number would return incorrect results. (Bug#11402)
SELECT @@local... returned
@@session... in the column header. (Bug#10724)
Character data truncated when GBK characters
0xA3A0 and 0xA1 are
present. (Bug#11987)
Comparisons like SELECT "A\\" LIKE "A\\";
fail when using SET NAMES utf8;. (Bug#11754)
Attempting to repair a table having a fulltext index on a
column containing words whose length exceeded 21 characters
and where myisam_repair_threads was greater
than 1 would crash the server. (Bug#11684)
Two threads could potentially initialize different characters sets and overwrite each other. (Bug#12109)
NDB: Attempting to create or drop tables
during a backup would cause the cluster to shut down. (Bug#11942)
NDB_MGMD was leaking file descriptors. (Bug#11898)
NDB ignored the Hostname option in the
NDBD DEFAULT section of the NDB
configuration file. (Bug#12028)
The temporary tables created by an ALTER
TABLE on a cluster table were visible to all MySQL
servers. (Bug#12055)
For prepared statements, the SQL parser did not disallow
‘?’ parameter markers
immediately adjacent to other tokens, which could result in
malformed statements in the binary log. (For example,
SELECT * FROM t WHERE? = 1 could become
SELECT * FROM t WHERE0 = 1.) (Bug#11299)
GROUP_CONCAT() sometimes returned a result
with a different collation from that of its arguments. (Bug#10201)
When two threads compete for the same table, a deadlock could
occur if one thread has also a lock on another table through
LOCK TABLES and the thread is attempting to
remove the table in some manner and the other thread want
locks on both tables. (Bug#10600)
Incorrect error message displayed if user attempted to create
a table in a non-existing database using CREATE
syntax. (Bug#10407)
database_name.table_name
The LPAD() and RPAD()
functions returned the wrong length to
mysql_fetch_fields(). (Bug#11311)
The C API function mysql_statement_reset()
did not clear error information. (Bug#11183)
Multiple-table UPDATE queries using
CONVERT_TZ() would fail with an error. (Bug#9979)
mysql_fetch_fields() returned incorrect
length information for MEDIUM and
LONG TEXT and
BLOB columns. (Bug#9735)
LIKE pattern matching using prefix index didn't return correct result. (Bug#11650)
The MySQL server had issues with certain combinations of basedir and datadir. (Bug#7249)
mysql_next_result() returns incorrect value
if final query in a batch fails. (Bug#12001)
SHOW BINARY LOGS displayed a file size of 0
for all log files but the current one if the files were not
located in the data directory. (Bug#12004)
Server-side prepared statements failed for columns with a
character set of ucs2. (Bug#9442)
References to system variables in an SQL statement prepared
with PREPARE were evaluated during
EXECUTE to their values at prepare time,
not to their values at execution time. (Bug#9359)
For server shutdown on Windows, error messages of the form
Forcing close of thread were being
written to the error log. Now connections are closed more
gracefully without generating error messages. (Bug#7403)
n
user: 'name'
Corrected a problem with the optimizer incorrectly adding
NOT NULL constraints, producing in
incorrect results for complex queries. (Bug#11482)
Corrected an optimizer problem with NOT
NULL constraints within a subquery in an
UPDATE statement that resulted in a server
crash. (Bug#11868)
Creating a table with a SET or
ENUM column with the DEFAULT
0 clause caused a server crash if the table's
character set was utf8. (Bug#11819)
In SQL prepared statements, comparisons could fail for values
not equally space-padded. For example, SELECT 'a' =
'a '; returns 1, but PREPARE s FROM
'SELECT ?=?'; SET @a = 'a', @b = 'a '; PREPARE s FROM
'SELECT ?=?'; EXECUTE s USING @a, @b; incorrectly
returned 0. (Bug#9379)
InnoDB: Do not flush after each write, not
even before setting up the doublewrite buffer. Flushing can be
extremely slow on some systems. (Bug#12125)
ISO-8601 formatted dates were not being
parsed correctly. (Bug#7308)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Functionality added or changed:
Security improvement: Applied a patch that addresses a
zlib data vulnerability that could result
in a buffer overflow and code execution.
(CVE-2005-2096)
(Bug#11844). Shortly after MySQL 4.1.13 was released, a
second potential zlib security flaw was discovered and fixed -
the issue is tracked by the Mitre CVE ID
(CVE-2005-1849).
A patch for this flaw was applied on top of the 4.1.13 sources
and published as 4.1.13a. The affected binaries have been
rebuilt.
Security improvement: Applied a patch to fix a UDF library-loading vulnerability that could result in a buffer overflow and code execution. (http://www.appsecinc.com/resources/alerts/mysql/2005-002.html)
Warning: Incompatible change:
Previously, conversion of DATETIME values
to numeric form by adding zero produced a result in
YYYYMMDDHHMMSS format. The result of
DATETIME+0 is now in
YYYYMMDDHHMMSS.000000 format. (Bug#12268)
Added the --add-drop-database option to
mysqldump. (Bug#3716)
Added mysql_set_character_set() C API
function for setting the default character set of the current
connection. This allows clients to affect the character set
used by mysql_real_escape_string(). (Bug#8317)
MEMORY tables now support indexes of up to
500 bytes. See Section 14.4, “The MEMORY (HEAP) Storage Engine�. (Bug#10566)
System variables are now treated as having
SYSVAR (system constant) coercibility. For
example, @@version is now treated like
VERSION() and
@@character_set_client is now treated like
CHARSET( USER() ). See
Section 10.5.4, “Some Special Cases Where the Collation Determination Is Tricky�. (Bug#10904)
The statements CREATE TABLE,
TRUNCATE TABLE, DROP
DATABASE, and CREATE DATABASE
cause an implicit commit. (Bug#6883)
Added the --log-slow-admin-statements server
option to request logging of slow administrative statements
such as OPTIMIZE TABLE, ANALYZE
TABLE, and ALTER TABLE to the
slow query log. These statements were logged in MySQL 4.0, but
not in 4.1. (Bug#9141)
SHOW BINARY LOGS now displays a
File_size column that indicates the size of
each file.
You can again refer to other tables in the ON
DUPLICATE KEY UPDATE part of an INSERT ...
SELECT statement as long as there is no
GROUP BY in the SELECT
part. One side effect of this is that you may have to qualify
non-unique column names in the values part of ON
DUPLICATE KEY UPDATE. (Bug#9728, Bug#8147)
The table, type, and
rows columns of EXPLAIN
output can now be NULL. This is required
for using EXPLAIN on
SELECT queries that use no tables, such as
EXPLAIN SELECT 1). (Bug#9899)
Expanded on information provided in general log and slow query log for prepared statements. (Bug#8367, Bug#9334)
InnoDB: When creating or extending an
InnoDB data file, allocate at most one megabyte at a time for
initializing the file. Previously, InnoDB used to allocate and
initialize 1 or 8 megabytes of memory, even if a few
16-kilobyte pages were to be written. This fix improves the
performance of CREATE TABLE in
innodb_file_per_table mode.
Bugs fixed:
Security fix: On Windows systems, a user with any of the following privileges
REFERENCES
CREATE TEMPORARY TABLES
GRANT OPTION
CREATE
SELECT
on *.* could crash
mysqld by issuing a USE
LPT1; or USE PRN; command. In
addition, any of the commands USE NUL;,
USE CON;, USE COM1;, or
USE AUX; would report success even though
the database was not in fact changed. (Bug#9148,
CVE-2005-0799
When applying the group_concat_max_len
limit, GROUP_CONCAT() could truncate
multi-byte characters in the middle. (Bug#23451)
A CREATE TABLE
statement would crash the server when no
database was selected. (Bug#11028)
db_name.tbl_name
LIKE ...
IP addresses not shown in ndb_mgm SHOW
command on second ndb_mgmd (or on ndb_mgmd restart). (Bug#11596)
SHOW FIELDS truncated the
TYPE column to 40 characters. (Bug#7142,
Bug#12817) (Note: This fix was reverted in MySQL 4.1.15
because it broke existing applications.)
Prepared statement with subqueries returned corrupt data. (Bug#11458)
A ROLLUP query could return a wrong result
set when its GROUP BY clause contained
references to the same column. (Bug#11543)
Queries with subqueries in the FROM clause
were not being added to the query cache. (Bug#11522)
Possible crash on Windows when performing GROUP BY on a calculated field. (Bug#11414)
The mysql_config script did not handle
symbolic linking properly. (Bug#10986)
When used within a subquery, SUBSTRING()
returned an empty string. (Bug#10269)
On Mac OS X, libmysqlclient_r.a now is
built with --fno-common to make it possible
to link a shared two-level namespace library against
libmysqlclient_r.a. (Bug#10638)
The handling by the HEX() function of
numbers larger than 264 was
improved. (Bug#9854)
Added a missing mutex when rotating the relay logs. Also, the server now logs an error message if the size of a relay log cannot be read. (Bug#6987)
Added a missing mutex when rotating the relay logs. Also, the server now logs an error message if the size of a relay log cannot be read. (Bug#6987)
mysqldump could crash for illegal or non-existent table names. (Bug#9358)
The --no-data option for
mysqldump was being ignored if table names
were given after the database name. (Bug#9558)
mysqldump now exports
HASH index definitions using
USING rather than TYPE
when the index name is optional. This corrects a problem when
reloading the output for PRIMARY KEY
definition, because TYPE must be preceded
an index name, which is not given for a PRIMARY
KEY. (Bug#11635)
The --master-data option for
mysqldump resulted in no error if the
binary log was not enabled. Now an error occurs unless the
--force option is given. (Bug#11678)
Corrected an optimization failure where a query returned an incorrect result for use of a newly populated table until the table was flushed. (Bug#11700)
Modifying a CHAR column with the
utf8 character set to a shorter length did
not properly truncate values due to not computing their length
in utf8 character units. (Bug#11591)
DES_ENCRYPT() and
DES_DECRYPT() require SSL support to be
enabled, but were not checking for it. Checking for incorrect
arguments or resource exhaustion was also improved for these
functions. (Bug#10589)
Invoking the DES_ENCRYPT() function could
cause a server crash if the server was started without the
--des-key-file option. (Bug#11643)
Selecting the result of an aggregate function for an
ENUM or SET column
within a subquery could result in a server crash. (Bug#11821)
When used in joins, SUBSTRING() failed to
truncate to zero those string values that could not be
converted to numbers. (Bug#10124)
Error when performing GROUP BY on
calculated values of a single row table. (Bug#11414)
mysqldump --xml did not format
NULL column values correctly. (Bug#9657)
SHOW WARNINGS did not properly display
warnings generated by executing a cached query. (Bug#9414)
Temporary tables were created in the data directory instead of
tmpdir. (Bug#11440)
LOAD DATA ... REPLACE INTO ... on a
replication slave failed for an InnoDB
table having a unique index in addition to the primary key.
(Bug#11401)
MySQL would not compile correctly on QNX due to missing
rint() function. (Bug#11544)
Incorrect results when searching using IN()
where search items included NULL and
0. (Bug#9393)
NDB Cluster: When trying to open a table that could not be discovered or unpacked, cluster would return error codes which the MySQL server falsely interpreted as operating system errors. (Bug#103651)
Manually inserting a row with host='' into
mysql.tables_priv and performing a
FLUSH PRIVILEGES would cause the server to
crash. (Bug#11330)
MySQL sometimes reported erroneously that certain character values had crashed a table when trying to convert other character sets to UTF-8. (Bug#9557)
Using CONCAT_WS() on a column set
NOT NULL caused incorrect results when used
in a LEFT JOIN. (Bug#11469)
mysqld_safe would sometimes fail to remove
the pid file for the old mysql process
after a crash. As a result, the server would fail to start due
to a false A mysqld process already
exists... error. (Bug#11122)
For MEMORY tables, it was possible for
updates to be performed using outdated key statistics when the
updates involved only very small changes in a very few rows.
This resulted in the random failures of queries such as
UPDATE t SET col = col + 1 WHERE col_key =
2; where the same query with no
WHERE clause would succeed. (Bug#10178)
The NULLIF() function could produce
incorrect results if the first argument was
NULL. (Bug#11142)
Optimizer performed range check when comparing unsigned integers to negative constants, could cause errors. (Bug#11185)
Cluster failed to build with gcc 4.0. (Bug#11377)
The LAST_DAY() failed to return
NULL when supplied with an invalid
argument. See Section 12.5, “Date and Time Functions�. (Bug#10568)
Setting @@SQL_MODE = NULL caused an
erroneous error message. (Bug#10732)
Server crashed when using GROUP BY on the
result of a DIV operation on a
DATETIME value. (Bug#11385)
Possible NULL values in
BLOB columns could crash server when
BLOB used in GROUP BY.
(Bug#11295)
Fixed 64 bit compiler warning for packet length in replication. (Bug#11064)
CASE function returns incorrect result when
its arguments are not constants and its return value is put
into a regular or temporary table (temporary == created by SQL
engine for UNION/non-indexed GROUP
BY and such operations). (Bug#10151)
A problem with the my_global.h file
caused compilation of MySQL to fail on single-processor Linux
systems running 2.6 kernels. (Bug#10364)
Queries against a table using a compound index based on the length of a UTF-8 text column produced incorrect results. For example, given a table with an index defined as shown:
CREATE TABLE t ( id INT NOT NULL, city VARCHAR(20) NOT NULL, KEY (city(7),id) ) TYPE=MYISAM CHARACTER SET=utf8;
Assuming that suitable data has been inserted into the table,
then a query such as SELECT * FROM t WHERE city =
'Durban'; would fail. (Bug#10253)
The mysqlhotcopy script was not parsing the
output of SHOW SLAVE STATUS correctly when
called with the --record_log_pos option. (Bug#7967)
An UPDATE query containing a subquery
caused replication to fail. (Bug#9361)
Last insert expected from a query of the form INSERT
... SELECT ... ON DUPLICATE KEY UPDATE would fail.
(Bug#9728)
INSERT ... SELECT ... ON DUPLICATE KEY
UPDATE produced inaccurate results. (Bug#10886)
SELECT DISTINCT ... GROUP BY
returned
multiple rows (it should return a single row). (Bug#8614)
constant
Queries of the form UPDATE ... (SELECT ... ) SET
... run on a replication master would crash all the
slaves.
(CVE-2004-4380,
Bug#10442)
OPTIMIZE of InnoDB table did not return
'Table is full' if out of tablespace. (Bug#8135)
Queries with ROLLUP returned wrong results
for expressions containingGROUP BY columns.
(Bug#7894)
Fixed hang/crash with Boolean full-text search where a query contained more query terms that one-third of the query length (it could be achieved with truncation operator: 'a*b*c*d*'). (Bug#7858)
The mysql client would output a prompt twice following input of very long strings, because it incorrectly assumed that a call to the _cgets() function would clear the input buffer. (Bug#10840)
A bug in FIELD() function caused the value
list to contain NULL. (Bug#10944)
A three byte buffer overflow in the client functions could cause improper exiting of the client when reading a command from the user. (Bug#10841)
Fixed a problem with the cp1250_czech_cs
collation that caused some LIKE comparisons
to fail. (Bug#9759)
Fixed a problem resolving table names with
lower_case_table_names=2 when the table
name lettercase differed in the FROM and
WHERE clauses. (Bug#9500)
Fixed server crash due to some internal functions not taking
into account that for multi-byte character sets,
CHAR and VARCHAR columns
could exceed 255 bytes. (Bug#11167)
Fixed a portability problem testing for
crypt() support that caused compilation
problems when using OpenSSL/yaSSL on HP-UX and Mac OS X. (Bug#10675, Bug#11150)
The hostname cache was not working. (Bug#10931)
For a MERGE table with
MyISAM tables in other, symlinked,
databases, SHOW CREATE TABLE reported the
MyISAM tables using the name of the
symlinked directory rather than the database name. (Bug#8183)
Fixed a server crash resulting from an attempt to allocate too
much memory when GROUP BY
and
blob_colCOUNT(DISTINCT) were used. (Bug#11088)
The incorrect sequence of statements HANDLER
without a
preceding tbl_name READ
index_name NEXTHANDLER for an
tbl_name
READ index_name =
(value_list)InnoDB table resulted in a server crash
rather than an error. (Bug#5373)
SHOW WARNINGS with a LIMIT
0 clause returned all messages rather than an empty
result set. (Bug#11095)
On Windows, with lower_case_table_names set
to 2, using ALTER TABLE to alter a
MEMORY or InnoDB table
that had a mixed-case name also improperly changed the name to
lowercase. (Bug#9660)
The server timed out SSL connections too quickly on Windows. (Bug#8572)
Inserting a DOUBLE value into a
utf8 string column crashed the server on
Windows. (Bug#10714)
Executing LOAD INDEX INTO CACHE for a table
while other threads where selecting from the table caused a
deadlock. (Bug#10602)
Fixed a server crash resulting from CREATE TABLE ...
SELECT that selected from a table being altered by
ALTER TABLE. (Bug#10224)
Fixed a server crash resulting from invalid string pointer
when inserting into the mysql.host table.
(Bug#10181)
GROUP_CONCAT() with
DISTINCT and WITH ROLLUP
ignored DISTINCT for some rows. (Bug#7405)
Fixed a problem creating the result set for a
UNION that involved long string values.
Values were not being converted correctly to
TEXT values. (Bug#10025)
Locking for CREATE TABLE ... SELECT for
InnoDB tables was too weak. It allowed
INSERT statements issued for the created
table while the CREATE TABLE statement was
still running to appear in the binary log before the
CREATE TABLE statement. (Bug#6678)
InnoDB: In DROP
DATABASE, check for all referencing tables from
other databases before dropping any tables. (Bug#10335)
InnoDB: Fix bug: InnoDB wrongly complained
in the .err log that MySQL is trying to
drop a non-existent table, if tablespace ran out. (Bug#10607)
Fixed an overly strict debugging assertion that caused debug
server builds to fail for some
, where
col_name =
const_exprconst_expr was a constant
expression such as a subquery. (Bug#10020)
SUBSTR() did not work properly for input in
the ucs2 character set. (Bug#10344)
Fixed a problem causing an incorrect result for columns that
include an aggregate function as part of an expression when
WITH ROLLUP is added to GROUP
BY. (Bug#7914)
Fixed a server crash for INSERT ... ON DUPLICATE KEY
UPDATE with MERGE tables, which
do not have unique indexes. (Bug#10400)
CREATE TABLE t AS SELECT UUID() created a
VARCHAR(12) column, which is too small to
hold the 36-character result from UUID().
(Bug#9535)
Portability fix for Cygwin: Don't use #pragma
interface or #pragma
implementation in source files. (Bug#10241)
Fixed a mysqldump crash that occurred with
the --complete-insert option when dumping
tables with a large number of long column names. (Bug#10286)
ALTER TABLE ... ENABLE INDEXES treated
NULL values as equal when collecting index
statistics for MyISAM tables, resulting in
different statistics from those generated by ANALYZE
TABLE and causing the optimizer to make poor index
choices later. The same problem occurred for bulk insert
statistics collection. Now NULL values are
treated as unequal, just as for ANALYZE
TABLE. (Bug#9622)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Note: The fix for interpretation
of MERGE table .MRG files
(Bug#10687) was made for Windows builds after MySQL 4.1.12 was
released and is present in MySQL 4.1.12a.
Functionality added or changed:
Incompatible change: The
behavior of LOAD DATA INFILE and
SELECT ... INTO OUTFILE has changed when
the FIELDS TERMINATED BY and
FIELDS ENCLOSED BY values both are empty.
Formerly, a column was read or written the display width of
the column. For example, INT(4) was read or
written using a field with a width of 4. Now columns are read
and written using a field width wide enough to hold all values
in the field. However, data files written before this change
was made might not be reloaded correctly with LOAD
DATA INFILE for MySQL 4.1.12 and up. This change
also affects data files read by mysqlimport
and written by mysqldump --tab, which use
LOAD DATA INFILE and SELECT ...
INTO OUTFILE. For more information, see
Section 13.2.5, “LOAD DATA INFILE Syntax�. (Bug#12564)
Added --debug option to
my_print_defaults.
When the server cannot read a table because it cannot read the
.frm file, print a message that the table
was created with a different version of MySQL. (This can
happen if you create tables that use new features and then
downgrade to an older version of MySQL.) (Bug#10435)
New /*> prompt for
mysql. This prompt indicates that a
/* ... */ comment was begun on an earlier
line and the closing */ sequence has not
yet been seen. (Bug#9186)
Added cp1250_croatian_ci collation. (Bug#6505)
Updated version of libedit to 2.9. (Bug#2596)
InnoDB: When the maximum length of
SHOW INNODB STATUS output would be
exceeded, truncate the beginning of the list of active
transactions, instead of truncating the end of the output.
(Bug#5436)
InnoDB: When
FOREIGN_KEY_CHECKS=0, ALTER
TABLE and RENAME TABLE will
ignore any type incompatibilities between referencing and
referenced columns. Thus, it will be possible to convert the
character sets of columns that participate in a foreign key.
Be sure to convert all tables before modifying any data! (Bug#9802)
InnoDB: Setting the initial
AUTO_INCREMENT value for an
InnoDB table using CREATE TABLE
... AUTO_INCREMENT =
now works, and nALTER TABLE ... AUTO_INCREMENT =
resets the current
value. (Bug#7061)
n
InnoDB: If
innodb_locks_unsafe_for_binlog option set
and isolation level of the transaction is not set to
serializable then InnoDB uses a consistent
read for select in clauses like INSERT INTO ...
SELECT and UPDATE ... (SELECT)
that do not specify FOR UPDATE or
IN SHARE MODE. Thus no locks are set to
rows read from selected table.
Previously in MySQL 4.1, an Illegal mix of
collations error occurred when mixing strings from
same character set when one had a non-binary collation and the
other a binary collation. Now the binary collation takes
precedence, so that both strings are treated as having the
binary collation. This restores compatibility with MySQL 4.0
behavior.
Added the cp932 Japanese character set.
Bugs fixed:
Security fix: If
mysqld was started with
--user=,
it would run using the privileges of the account it was
invoked from, even if that was non_existent_userroot. (Bug#9833)
Fixed handling of floats and doubles when using prepared statement API in the embedded server. (Bug#10443)
An error in the implementation of the
MyISAM compression algorithm caused
myisampack to fail with very large sets of
data (total size of all the records in a single column needed
to be >= 3 GB in order to trigger this issue). (Bug#8321)
When SELECT
was the final
constantSELECT in a UNION, a
trailing LIMIT ... worked, but a trailing
ORDER BY ... or ORDER BY ... LIMIT
... did not. (Bug#10032)
MERGE tables could fail on Windows due to
incorrect interpretation of pathname separator characters for
filenames in the .MRG file. (Bug#10687)
CHAR and VARCHAR columns
that used the sjis character set were not
being saved correctly, causing the following columns to be
corrupted. (Bug#10493)
For a user-defined function invoked from within a prepared
statement, the UDF's initialization routine was invoked for
each execution of the statement, but the deinitialization
routine was not. (It was invoked only when the statement was
closed.) For UDFs that have an expensive deinit function (such
as myperl), this bugfix will have negative
performance consequences. (Bug#9913)
Fix CREATE TABLE ... LIKE to work when
lower_case_table_names is set on a
case-sensitive filesystem and the source table name is not
given in lowercase. (Bug#9761)
my_print_defaults was ignoring the
--defaults-extra-file option or crashing when
the option was given. (Bug#9136, Bug#9851)
For MERGE tables, avoid writing absolute
pathnames in the .MRG file for the names
of the constituent MyISAM tables so that if
the data directory is moved, MERGE tables
will not break. For mysqld, write just the
MyISAM table name if it is in the same
database as the MERGE table, and a path
relative to the data directory otherwise. For the embedded
servers, absolute pathnames may still be used. (Bug#5964)
Corrected the error message for exceeding the
MAX_CONNECTIONS_PER_HOUR limit to say
max_connections_per_hour instead of
max_connections. (Bug#9947)
Fixed incorrect memory block allocation for the query cache in the embedded server. (Bug#9549)
Fixed a configure problem in checking for capability of performing atomic operations. (Bug#7970)
net_read_timeout and
net_write_timeout were not being respected
on Windows. (Bug#9721)
An error occurred if you specified a default value of
TRUE or FALSE for a
BOOL column. (Bug#9666)
Corrected some failures of prepared statements for SQL
(PREPARE plus EXECUTE)
to return all rows for some SELECT
statements. (Bug#9096, Bug#9777)
Remove extra slashes in --tmpdir value (for
example, convert /var//tmp to
/var/tmp, because they caused various
errors. (Bug#8497)
Fixed a sort order problem with the
latin2_croatian_ci collation. All tables
that have indexes that use this collation will be treated as
crashed. After upgrading, for each such table, you must use
CHECK TABLE and possibly repair the table.
(Bug#6505)
mysqld was not checking whether the PID file was successfully created. (Bug#5843)
With DISTINCT
CONCAT( returned
incorrect results when the arguments to
col,...)CONCAT() were columns with an integer data
type declared with a display width narrower than the values in
the column. (For example, if an INT(1)
column contain 1111.) (Bug#4082)
Fixed configure to properly recognize whether NPTL is available on Linux. (Bug#2173)
Fixed a portability problem in compiling
mysql.cc with VC++ on
Windows. (Bug#10245)
CAST( didn't work for big integers above the
signed range. Now this function and
string_argument AS
UNSIGNED)CAST( also produces warnings for wrong string
arguments. (Bug#7036)
string_argument AS
SIGNED)
Fixed compile problem with MinGW. Thanks to Nils Durner for patch! (Bug#8872)
MySQL no longer automatically blocks IP numbers for which
gethostbyname_r() fails when the reason is
that the DNS server is down. Thanks to Jeremy Cole for patch.
(Bug#8467)
Fixed a bug in the key cache that caused a core dump. (Bug#10167)
The --delimiter option for the
nds_select program was non-functional. (Bug#10287)
MAX() for an INT
UNSIGNED (unsigned 4-byte integer) column could
return negative values if the column contained values larger
than 231. (Bug#9298)
Fixed a deadlock resulting from use of FLUSH TABLES
WITH READ LOCK while an INSERT
DELAYED statement is in progress. (Bug#7823)
Multiple-table updates could produce spurious data-truncation warnings if they used a join across columns that are indexed using a column prefix. (Bug#9103)
Use of a subquery that used WITH ROLLUP in
the FROM clause of the main query sometimes
resulted in a Column cannot be null error.
(Bug#9681)
RENAME TABLE for an
ARCHIVE table failed if the
.arn file was not present. (Bug#9911)
Fixed an optimizer problem where extraneous comparisons
between NULL values in indexed columns were
being done for operators such as = that are
never true for NULL. (Bug#8877)
SELECT
ROUND( produced a
different result from expr)CREATE TABLE ... SELECT
ROUND(. (Bug#9837)
expr)
Fixed some awk script portability problems in cmd-line-utils/libedit/makelist.sh. (Bug#9954)
Changed metadata for result of SHOW KEYS:
Data type for Sub_part column now is
SMALLINT rather than
TINYINT because key part length can be
longer than 255. (Bug#9439)
Fixed some problems with myisampack on 64-bit systems that resulted in segmentation violations. (Bug#9487)
Fixed an optimizer bug in computing the union of two ranges
for the OR operator. (Bug#9348)
Fixed an index corruption problem for
MyISAM tables that resulted from the 4.1
behavior of padding values with blanks for comparison: Dumping
a table with mysqldump, reloading it, and
then re-running the binary log against it crashed the index
and necessitated a repair. (Bug#9188)
Fixed a segmentation fault in mysqlcheck
that occurred when the last table checked in
--auto-repair mode returned an error (such as
the table being a MERGE table). (Bug#9492)
Fixed the client/server protocol for prepared statements so that reconnection works properly when the connection is killed while reconnect is enabled. (Bug#8866)
INSERT ... ON DUPLICATE KEY UPDATE
incorrectly updated a TIMESTAMP column to
the current timestamp, even if the update list included
for that column
to prevent the update. (Bug#7806)
col_name =
col_name
Starting mysqld with the
--skip-innodb and
--default-storage-engine=innodb (or
--default-table-type=innodb caused a server
crash. (Bug#9815)
Queries containing CURRENT_USER()
incorrectly were registered in the query cache. (Bug#9796)
A server installed as a Windows service and started with
--shared-memory could not be stopped. (Bug#9665)
mysqldump dumped core when invoked with
--tmp and
--single-transaction options and a
non-existent table name. (Bug#9175)
Additional fix for mysql_server_init() and
mysql_server_end() C API functions so that
stopping and restarting the embedded server will not cause a
crash. (Bug#7344)
mysql.server no longer uses non-portable alias command or LSB functions. (Bug#9852)
Fixed a readline-related crash in
mysql when the user pressed Control-R. (Bug#9568)
TIMEDIFF() with a negative time first
argument and positive time second argument produced incorrect
results. (Bug#8068)
Fixed a bug that caused concurrent inserts to be allowed into
the tables in the SELECT ... UNION ... part
of INSERT ... SELECT ... UNION .... This
could result in the incorrect order of queries in the binary
log. (Bug#9922)
The warning message from GROUP_CONCAT() did
not always indicate the correct number of lines. (Bug#8681)
InnoDB: ENUM and SET
columns were treated incorrectly as character strings. This
bug did not manifest itself with latin1
collations, but it caused malfunction with
utf8. Old tables will continue to work. In
new tables, ENUM and SET
will be internally stored as unsigned integers. (Bug#9526)
InnoDB: Avoid test suite failures caused by a locking conflict between two server instances at server shutdown/startup. This conflict on advisory locks appears to be the result of a bug in the operating system; these locks should be released when the files are closed, but somehow that does not always happen immediately in Linux. (Bug#9381)
InnoDB: Prevent ALTER
TABLE from changing the storage engine if there are
foreign key constraints on the table. (Bug#5574, Bug#5670)
InnoDB: Fixed a deadlock without any
locking, simple select and update. (Bug#7975)
InnoDB now takes an exclusive lock when
INSERT ON DUPLICATE KEY UPDATE is checking
duplicate keys.
InnoDB: Fix a problem in crash recovery of
.ibd files on Windows if the user used
lower_case_table_names=0 or
2; the directory scan in crash recovery
forgot to put all paths to lower case, so that the tablespace
name would be consistent with the internal data dictionary of
InnoDB.
InnoDB: Add fault tolerance in the scan of
.ibd files at a crash recovery; formerly
a single failure of readdir_get_next caused
the rest of the directory to be skipped.
InnoDB: Fix assertion failures of type
ut_a(cursor->old_stored ==
BTR_PCUR_OLD_STORED) and
prebuilt->template_type == 0. This bug
was introduced in 4.1.10 and 4.0.24. (Bug#9670)
InnoDB: Fix a performance bug: At the
shutdown, write the latest lsn only to the first pages of the
ibdata files of the system tablespace,
NOT to the .ibd files; writing to tens of
thousands .ibd files can take minutes.
Fix for auto-increment not working with
INSERT..SELECT and NDB storage engine. (Bug#9675)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Functionality added or changed:
ONLY_FULL_GROUP_BY no longer is included in
the ANSI composite SQL mode. (Bug#8510)
mysqld_safe will create the directory where the UNIX socket file is to be located if the directory does not exist. This applies only to the last component of the directory pathname. (Bug#8513)
The coercibility for the return value of functions such as
USER() or VERSION() now
is “system constant� rather than
“implicit.� This makes these functions more
coercible than column values so that comparisons of the two do
not result in Illegal mix of collations
errors. COERCIBILITY() was modified to
accommodate this new coercibility value. See
Section 12.9.3, “Information Functions�.
User variable coercibility has been changed from “coercible� to “implicit.� That is, user variables have the same coercibility as column values.
NULL now is considered more coercible than
string constants. This resolves some Illegal mix of
collations conflicts.
Modified the parser to allow SELECT
statements following the UNION keyword to
be subqueries in parentheses. (Bug#2435)
For slave replication servers started with
--replicate-* options, statements that should
not be replicated according those options no longer are
written to the slave's general query log. (Bug#8297)
Added SQL_NOTES session variable to cause
Note-level warnings not to be recorded.
(Bug#6662)
InnoDB: Commit after every 10,000 copied
rows when executing CREATE INDEX,
DROP INDEX or OPTIMIZE
TABLE, which are internally implemented as
ALTER TABLE. This makes it much faster to
recover from an aborted operation.
Added a new global system variable
slave_transaction_retries: If the
replication slave SQL thread fails to execute a transaction
because of an InnoDB deadlock or exceeded
InnoDB's innodb_lock_wait_timeout or
NDBCluster's
TransactionDeadlockDetectionTimeout or
TransactionInactiveTimeout, it
automatically retries
slave_transaction_retries times before
stopping with an error. The default in MySQL 4.1 is 0. You
must explicitly set the value greater than 0 to enable the
“retry� behavior. (In MySQL 5.0.3 or newer, the
default is 10.) (Bug#8325)
Added --with-big-tables compilation option to
configure. (Previously it was necessary to
pass -DBIG_TABLES to the compiler manually in
order to enable large table support.) See
Section 2.9.2, “Typical configure Options�, for details.
Added configuration directives !include and
!includedir for including option files and
searching directories for option files. See
Section 4.3.2, “Using Option Files�, for usage.
Bugs fixed:
Disallow use of SESSION or
GLOBAL for user variables. (Bug#9286)
The use of XOR together with NOT
ISNULL() erroneously resulted in some outer joins
being converted to inner joins by the optimizer. (Bug#9017)
Fixed utf8_spanish2_ci and
ucs2_spanish2_ci collations to not consider
‘r’ equal to
‘rr’. If you upgrade to this
version from an earlier version, you should rebuild the
indexes of affected tables. (Bug#9269)
Allow extra HKSCS and cp950 characters
(big5 extension characters) to be accepted
in big5 columns. (Bug#9357)
BLOB( and
M)TEXT( columns,
with M)M less than 256, were being
created as BLOB and TEXT
columns rather than TINYBLOB or
TINYTEXT columns. (Bug#9303)
Fixed a problem with INSERT ... SELECT ... ON
DUPLICATE KEY UPDATE where a column named in the
insert list and in the ON DUPLICATE KEY
UPDATE clause was erroneously declared to be
ambiguous. (Bug#8147)
In prepared statements, subqueries containing parameters were
erroneously treated as const tables during
preparation, resulting in a server crash. (Bug#8807)
Fixed a problem with OPTIMIZE TABLE for
InnoDB tables being written twice to the
binary log. (Bug#9149)
Provide more informative error messages in clustered setting when a query is issued against a table that has been modified by another mysqld server. (Bug#6762)
For MyISAM tables, REPAIR
TABLE no longer discard rows that have incorrect
checksum. (Bug#9824)
Depending on index statistics, GROUP BY
could return
incorrect results if the first table processed for a join had
several indexes that cover the grouped columns. (Bug#9213)
col1,
col2, ...
Fixed incorrect evaluation of ALL/ANY
subqueries that contain a HAVING clause.
(Bug#9350)
Fixed server crash when left expression of
IN/ALL/ANY comparison was a subquery. (Bug#8888)
Fixed option-parsing code for the embedded server to
understand K, M, and
G suffixes for the
net_buffer_length and
max_allowed_packet options. (Bug#9472)
Fixed a crash when using TIMESTAMP columns
with no minute or second parts in GROUP BY
with the new system variable set to 1. (Bug#9401)
If a MyISAM table on Windows had
INDEX DIRECTORY or DATA
DIRECTORY table options,
mysqldump dumped the directory pathnames
with single-backslash pathname separators. This would cause
syntax errors when importing the dump file.
mysqldump now changes
‘\’ to
‘/’ in the pathnames on
Windows. (Bug#6660)
Fixed a server crash caused by use of NOW()
is a subquery. (Bug#8824)
Fixed problems with static variables to allow building on Fedora Core 3. (Bug#6554)
Some user variables were not being handled with “implicit� coercibility. (Bug#9425)
Setting the max_error_count system variable
to 0 resulted in a setting of 1. (Bug#9072)
Fixed a collation coercibility problem that caused a union between binary and non-binary columns to fail. (Bug#6519)
Fixed a problem with the tee command in
mysql that resulted in
mysql crashing. (Bug#8499)
On Windows, create shared memory objects with the proper access rights to make them usable when the client and server are running under different accounts. (Bug#8226)
Bundled zlib in the source distribution was
upgraded to 1.2.2. (Bug#9118)
Fixed server crash resulting from queries that combined
SELECT DISTINCT, SUM(),
and ROLLUP. (Bug#8615)
Incorrect results were returned from queries that combined
SELECT DISTINCT, GROUP BY
, and ROLLUP. (Bug#8616)
Fixed a bug that under certain circumstances could allow a
privilege escalation via database wildcards in
GRANT.
(CVE-2004-0957)
Too many rows were returned from queries that combined
ROLLUP and LIMIT if
SQL_CALC_FOUND_ROWS was given. (Bug#8617)
mysqldump misinterpreted
‘_’ and
‘%’ characters in the names of
tables to be dumped as wildcard characters. (Bug#9123)
Made the relay_log_space_limit system
variable show up in the output of SHOW
VARIABLES. (Bug#7100)
Use of
GROUP_CONCAT(
in a subquery, where x)x was an alias
to a column in the outer query, resulted in a server crash.
(Bug#8656)
The CHARSET(),
COLLATION(), and
COERCIBILITY() functions sometimes returned
NULL. CHARSET() and
COLLATION() returned
NULL when given any of these arguments that
evaluated to NULL: A system function such
as DATABASE(); a column value; and a user
variable. Now CHARSET() and
COLLATION() return the system character set
and collation; the column character set and collation; and
binary.
COERCIBILITY(NULL) now returns
“ignorable� coercibility rather than
NULL. (Bug#9129)
Expressions involving nested CONCAT() calls
and character set conversion of string constants could return
an incorrect result. (Bug#8785)
The MEMORY storage engine did not properly
increment an AUTO_INCREMENT column if there
was a second composite index that included the column. (Bug#8489)
Fixed a bug in the filesort routine such that killing a filesort could cause an assertion failure. (Bug#8799)
REPAIR TABLE did not invalidate query
results in the query cache that were generated from the table.
(Bug#8480)
If max_join_size was set, a query
containing a subquery that exceeded the examined-rows limit
could hang. (Bug#8726)
Mixed-case database and table names in the grant tables were
ignored for authentication if the
lower_case_table_names system variable was
set. GRANT will not create such privileges
when lower_case_table_names is set, but it
is possible to create them by direct manipulation of the grant
tables, or that old grant records were present before setting
the variable. (Bug#7989)
AES_DECRYPT(
could fail to return col_name,key)NULL for invalid
values in col_name, if
col_name was declared as
NOT NULL. (Bug#8669)
Ordering by unsigned expression (more complex than a column reference) was treating the value as signed, producing incorrectly sorted results. (Bug#7425)
HAVING was treating unsigned columns as
signed. (Bug#7425)
Fixed a problem with boolean full-text searches on
utf8 columns where a double quote in the
search string caused a server crash. (Bug#8351)
MIN(
and
col_name)MAX(
could fail to produce the correct result if
col_name)col_name was contained in multiple
indexes and the optimizer did not choose the first index that
contained the column. (Bug#8893)
Table creation for a MyISAM table failed if
DATA DIRECTORY or INDEX
DIRECTORY options were given that specified the
pathname to the database directory where the table files would
be created by default. (Bug#8707)
Fixed a problem with LIKE pattern-matching
for strings with the cp1251_bin binary
collation. (Bug#8560)
A join on two tables failed when each contained a
BIGINT UNSIGNED column that were compared
when their values exceeded 263
– 1. The match failed and the join returned no rows.
(Bug#8562)
For a query with both GROUP BY and
COUNT(DISTINCT) clauses and a
FROM clause with a subquery,
NULL was returned for any
VARCHAR column selected by the subquery.
(Bug#8218)
Fixed an optimizer bug that caused incorrectly ordered result
from a query that used a FULLTEXT index to
retrieve rows and there was another index that was usable for
ORDER BY. For such a query,
EXPLAIN showed fulltext
join type, but regular (not FULLTEXT) index
in the Key column. (Bug#6635)
For a statement string that contained multiple slow queries, only the last one would be written to the slow query log. (Bug#8475)
When the server was started with
--skip-name-resolve, specifying hostname
values that included netmasks in GRANT
statements did not work. (Bug#8471)
The --set-character-set option for
myisamchk was changed to
--set-collation. The value needed for
specifying how to sort indexes is a collation name, not a
character set name. (Bug#8349)
Hostname matching didn't work if a netmask was specified for table-specific privileges. (Bug#3309)
Binary data stored in BLOB or
BINARY columns would be erroneously dumped
if mysqldump was invoked with
--hex-blob and
--skip-extended-insert arguments. This
happened if data contained characters larger then 0x7F (Bug#8830).
Corruption of MyISAM table indexes could
occur with TRUNCATE TABLE if the table had
already been opened. For example, this was possible if the
table had been opened implicitly by selecting from a
MERGE table that mapped to the
MyISAM table. The server now issues an
error message for TRUNCATE TABLE under
these conditions. (Bug#8306)
Fixed handling of table-name matching in
mysqlhotcopy to accommodate
DBD::mysql 2.9003 and up (which implement
identifier quoting). (Bug#8136)
In the mysql_real_escape_string() C API
function, when a multi-byte character is encountered that is
illegal in the current character set, escape only the first
byte, not each byte. This avoids creating a valid character
from an invalid one. (Bug#8378)
Fixed a problem with the cp1250_czech_cs
collation that caused empty literal strings not to compare
equal to empty character columns. (Bug#8840)
Fixed a problem in index cost calculation that caused a
USE INDEX or FORCE INDEX
hint not to be used properly for a LEFT
JOIN across indexed BLOB columns.
(Bug#7520)
The data type for
MAX(
was returned as datetime_col)VARCHAR rather than
DATETIME if the query included a
GROUP BY clause. (Bug#5615)
FOUND_ROWS() returned an incorrect value
for preceding SELECT statements that used
no table or view. (Bug#6089)
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 character now is escaped, not
just the next byte. (Bug#8303)
InnoDB: Work around a problem in AIX 5.1 patched with ML7
security patch: InnoDB would refuse to open its
ibdata files, complaining about an
operating system error 0.
InnoDB: Fixed a memory corruption bug if one created a table
with a primary key that contained at least two column
prefixes. An example: CREATE TABLE t(a char(100), b
tinyblob, PRIMARY KEY(a(5), b(10))).
InnoDB: Do not try to space-pad
BLOB columns containing
ucs2 characters. This avoids an assertion
failure that was introduced when fixing Bug#7350. (Bug#8771)
InnoDB: Fixed a bug: MySQL 4.1.8 to 4.1.10 could complain that an InnoDB table created with MySQL 3.23.49 or earlier was in the new compact InnoDB table format of 5.0.3 or later, and InnoDB would refuse to use that table. There is nothing wrong with the table, it is mysqld that is in error. Workaround: wait that 4.1.11 is released before doing an upgrade, or dump the table and re-create it with any MySQL version >= 3.23.50 before upgrading.
InnoDB: Honor the --tmpdir
startup option when creating temporary files. Previously,
InnoDB temporary files were always created
in the temporary directory of the operating system. On
Netware, InnoDB will continue to ignore
--tmpdir. (Bug#5822)
InnoDB: If MySQL wrote to its binlog, but
for some reason trx->update_undo and
trx->insert_undo were NULL in InnoDB,
then trx->commit_lsn was garbage, and
InnoDB could assert in the log flush of
trx_commit_complete_for_mysql(). (Bug#9277)
InnoDB: If InnoDB cannot allocate memory,
keep retrying for 60 seconds before we intentionally crash
mysqld; maybe the memory shortage is just
temporary.
InnoDB: If one used LOCK
TABLES, created an InnoDB temp table, and did a
multiple-table update where a MyISAM table
was the update table and the temp table was a read table, then
InnoDB asserted in row0sel.c because
n_mysql_tables_in_use was 0. Also, we
remove the assertion altogether and just print an error to the
.err log if this important consistency
check fails. (Bug#8677)
mysqldump now avoids writing SET
NAMES to the dump output if the server is older than
version 4.1 and would not understand that statement. (Bug#7997)
Fixed a bug in my_print_defaults that made
it ignore the --defaults-extra-file and
--defaults-file options.
Retrieving from a view defined as a SELECT
that mixed UNION ALL and UNION
DISTINCT resulted in a different result than
retrieving from the original SELECT. (Bug#6565)
Worked around a bug in support for NSS support in
glibc when static linking is used and LDAP
is one of the NSS sources. The workaround is to detect when
the bug causes a segmentation fault and issue a diagnostic
message with information about the problem. (Bug#3037, Bug#4872)
If the mysql prompt was configured to display the default database name, and that database was dropped, mysql did not update the prompt. (Bug#4802)
perror was printing a spurious extra line of output ("Error code ###: Unknown error ###" printed directly before the correct line with the error message). (Bug#8517)
The CHAR() function was not ignoring
NULL arguments, contrary to the
documentation. (Bug#6317)
Neither SHOW ERRORS nor SHOW
WARNINGS were displaying Error-level messages. (Bug#6572)
Creating a table using a name containing a character that is
illegal in character_set_client resulted in
the character being stripped from the name and no error. The
character now is considered an error. (Bug#8041)
Fixed a problem with the Cyrillic letters I and SHORT I being
treated the same by the utf8_general_ci
collation. (Bug#8385)
The MAX_CONNECTIONS_PER_HOUR resource limit
was not being reset hourly and thus imposed an absolute limit
on number of connections per account until the server is
restarted or the limits flushed. (Bug#8350)
With a database was dropped with
lower_case_table_names=2, tables in the
database also were dropped but not being flushed properly from
the table cache. If the database was re-created, the tables
also would appear to have been re-created. (Bug#8355)
Changed mysql_server_end() C API function
to restore more variables to their initial state so that a
subsequent call to mysql_server_init()
would not cause a client program crash. (Bug#7344)
Fixed a problem with accented letters improperly being treated
as distinct with the utf_general_ci
collation. (Bug#7878)
ENUM and SET columns in
privilege tables incorrectly had a case-sensitive collation,
resulting in failure of assignments of values that did not
have the same lettercase as given in the column definitions.
The collation was changed to be case insensitive. (Bug#7617)
An expression that tested a case-insensitive character column
against string constants that differed in lettercase could
fail because the constants were treated as having a binary
collation. (For example, WHERE city='London' AND
city='london' could fail.) (Bug#7098, Bug#8690)
The output of the STATUS
(\s) command in mysql
had the values for the server and client character sets
reversed. (Bug#7571)
If the slave was running with
--replicate-*-table options which excluded
one temporary table and included another, and the two tables
were used in a single DROP TEMPORARY TABLE IF
EXISTS statement, as the ones the master
automatically writes to its binary log upon client's
disconnection when client has not explicitly dropped these,
the slave could forget to delete the included replicated
temporary table. Only the slave needs to be upgraded. (Bug#8055)
Treat user variables as having IMPLICIT
derivation (coercibility) to avoid “Illegal mix of
collations� errors when replicating user variables.
(Bug#6676)
When setting integer system variables to a negative value with
SET VARIABLES, the value was treated as a
positive value modulo 232. (Bug#6958)
Fixed a bug in bundled readline library
that caused segmentation fault in mysql
when user entered Shift+Enter. (Bug#5672)
Fix conversion of strings -> double to get higher accuracy
for floating point values that are integers, like:
123.45E+02 (Bug#7840).
Fixed a bug in MATCH ... AGAINST in natural
language mode that could cause a server crash if the
FULLTEXT index was not used in a join
(EXPLAIN did not show
fulltext join mode) and the search query
matched no rows in the table (Bug#8522).
Platform and architecture information in version information
produced for --version option on Windows was
always Win95/Win98 (i32). More accurately
determine platform as Win32 or
Win64 for 32-bit or 64-bit Windows, and
architecture as ia32 for x86,
ia64 for Itanium, and
axp for Alpha. (Bug#4445)
Fixed a rare race condition which could lead to FLUSH
TABLES WITH READ LOCK hanging. (Bug#8682)
Fixed a bug in replication that caused the master to stamp
generated statements (such as SET commands)
with an error_code intended only for
another statement. This could happen, for example, when a
statements generates a duplicate key error on the master but
must be replicated. (Bug#8412)
If multiple semicolon-separated statements were received in a single packet, they were written to the binary log as a single event rather than as separate per-statement events. For a server serving as a replication master, this caused replication to fail when the event was sent to slave servers. (Bug#8436)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Note: The security improvements
related to creation of table files and to user-defined functions
were made after MySQL 4.1.10 was released and are present in MySQL
4.1.10a. We would like to thank Stefano Di Paola
<stefano.dipaola@wisec.it> for making us aware of
these.
Functionality added or changed:
Added back faster subquery execution from 4.1.8. This adds
also back a bug from 4.1.8 in comparing
NULL to the value of a subquery. See
Section A.8.4, “Open Issues in MySQL�.
Security improvement: The server creates
.frm, .MYD,
.MYI, .MRG,
.ISD, and .ISM table
files only if a file with the same name does not already
exist. Thanks to Stefano Di Paola
<stefano.dipaola@wisec.it> for finding and
informing us about this issue.
(CVE-2005-0711)
Security improvement: User-defined functions should have at
least one symbol defined in addition to the
xxx symbol that corresponds to the main
xxx() function. These auxiliary symbols
correspond to the xxx_init(),
xxx_deinit(),
xxx_reset(),
xxx_clear(), and
xxx_add() functions.
mysqld by default no longer loads UDFs
unless they have at least one auxiliary symbol defined in
addition to the main symbol. The
--allow-suspicious-udfs option controls
whether UDFs that have only an xxx symbol
can be loaded. By default, the option is off.
mysqld also checks UDF filenames when it
reads them from the mysql.func table and
rejects those that contain directory pathname separator
characters. (It already checked names as given in
CREATE FUNCTION statements.) See
Section 19.2.4.1, “UDF Calling Sequences for Simple Functions�,
Section 19.2.4.2, “UDF Calling Sequences for Aggregate Functions�, and
Section 19.2.4.6, “User-Defined Function Security Precautions�. Thanks to Stefano Di Paola
<stefano.dipaola@wisec.it> for finding and
informing us about this issue.
(CVE-2005-0709,
CVE-2005-0710)
Setting the connection collation to a value different from the
server collation followed by a CREATE TABLE
statement that included a quoted default value resulted in a
server crash. (Bug#8235)
Thread stack size was increased from 192KB to 256KB on Linux/IA-64 (too small stack size was causing server crashes on some queries). (Bug#8391)
From the Windows distribution, predefined accounts without passwords for remote users ("root@%", "@%") were removed (other distributions never had them).
Added mysql_library_init() and
mysql_library_end() as synonyms for the
mysql_server_init() and
mysql_server_end() C API functions.
mysql_library_init() and
mysql_library_end() are
#define symbols, but the names more clearly
indicate that they should be called when beginning and ending
use of a MySQL C API library no matter whether the application
uses libmysqlclient or
libmysqld. (Bug#6149)
The server now issues a warning when
lower_case_table_names=2 and the data
directory is on a case-sensitive filesystem, just as when
lower_case_table_names=0 on a
case-insensitive filesystem. (Bug#7887)
The server now issues a warning to the error log when it encounters older tables that contain character columns that might be interpreted by newer servers to have a different column length. (Bug#6913) See Section 2.11.1, “Upgrading from MySQL 4.0 to 4.1�, for a discussion of this problem and what to do about it.
InnoDB: When MySQL/InnoDB is compiled on Mac OS X 10.2 or
earlier, detect the operating system version at run time and
use the fcntl() file flush method on Mac OS
X versions 10.3 and later. In Mac OS X,
fsync() does not flush the write cache in
the disk drive, but the special fcntl()
does; however, the flush request is ignored by some external
devices. Failure to flush the buffers may cause severe
database corruption at power outages.
InnoDB: A shared record lock
(LOCK_REC_NOT_GAP) is now taken for a
matching record in the foreign key check because inserts can
be allowed into gaps.
InnoDB: Relaxed locking in INSERT…SELECT,
single table UPDATE…SELECT and single
table DELETE…SELECT clauses when
innodb_locks_unsafe_for_binlog is used and
isolation level of the transaction is not serializable.
InnoDB uses consistent read in these cases
for a selected table.
Bugs fixed:
FOUND_ROWS() returned an incorrect value
after a SELECT SQL_CALC_FOUND_ROWS DISTINCT
statement that selected constants and included GROUP
BY and LIMIT clauses. (Bug#7945)
Fixed a bug in cardinality estimations for
HASH indexes of
TEMPORARY tables created using
MEMORY storage engine. As a result queries
that were using this index (as shown by
EXPLAIN) could have returned incorrect
results. (Bug#8371)
Corrected a problem with references to DUAL
where statements such as SELECT 1 AS a FROM
DUAL would succeed but statements such as
SELECT 1 AS a FROM DUAL LIMIT 1 would fail.
(Bug#8023)
Fixed a server crash caused by DELETE FROM
when the tbl_name ... WHERE ... ORDER BY
tbl_name.col_nameORDER BY column was qualified with
the table name. (Bug#8392)
mysqld had problems finding its language
files if the basedir value was specified as
a very long pathname. (Bug#8015)
Updates were being written to the binary log when there were
binlog-do-db or
binlog-ignore-db options even when there
was no current database, contrary to
Section 5.11.4, “The Binary Log�. (Bug#6749)
Fixed conversion of floating-point values to character fields when the absolute value of the float was less than 1, and also fixed calculation of length for negative values. (Bug#7774)
Column headers in query results retrieved from the query cache could be corrupted when a non-4.1 client was served a result originally generated for a 4.1 client. The query cache was not keeping track of which client/server protocol was being used. (Bug#6511)
Fixed LOAD INDEX statement to actually load
index in memory. (Bug#8452)
If multiple prepared statements were executed without retrieving their results, executing one of them again would cause the client program to crash. (Bug#8330)
Non-numeric values inserted into a YEAR
column were being stored as 2000 rather
than as 0000. (Bug#6067)
Fixed a failure of multiple-table updates to replicate
properly on slave servers when
--replicate-*-table options had been
specified. (Bug#7011)
mysql_stmt_close() C API function was not
clearing an error indicator when a previous prepare call
failed, causing subsequent invocations of error-retrieving
calls to indicate spurious error values. (Bug#7990)
Fixed failure of CREATE TABLE ... LIKE
Windows when the source or destination table was located in a
symlinked database directory. (Bug#6607)
With lower_case_table_names set to 1,
mysqldump on Windows could write the same
table name in different lettercase for different SQL
statements. Fixed so that consistent lettercase is used. (Bug#5185) HAVING that referred to
RAND() or a user-defined function in the
SELECT part through an alias could cause a
crash or wrong value. (Bug#8216)
If one used CONVERT_TZ() function in
SELECT, which in its turn was used in
CREATE TABLE statements, then system time
zone tables were added to list of tables joined in SELECT and
thus erroneous result was produced. (Bug#7899)
Fixed a bug in CONV() function returning
unsigned BIGINT number (third argument is
positive, and return value does not fit in 32 bits). (Bug#7751)
Fixed a failure of the IN() operator to
return correct result if all values in the list were constants
and some of them were using substring functions, for example,
LEFT(), RIGHT(), or
MID().
Fixed problem with SHOW INDEX reporting
Sub_part values in bytes rather than
characters for columns with a multi-byte character set. (Bug#7943)
Fixed a crash in CONVERT_TZ() function when
its second or third argument was from a
const table (see
Section 7.2.1, “Optimizing Queries with EXPLAIN�). (Bug#7705)
Correct a problem with mysql_config, which
was failing to produce proper zlib option
for linking under some circumstances. (Bug#6273)
Fixed a problem with calculation of number of columns in row comparison against a subquery. (Bug#8020)
Fixed erroneous output resulting from SELECT
DISTINCT combined with a subquery and GROUP
BY. (Bug#7946)
Fixed server crash in comparing a nested row expression (for
example row(1,(2,3))) with a subquery. (Bug#8022)
Fixed server crash resulting from certain correlated subqueries with forward references (referring to an alias defined later in the outer query). (Bug#8025)
Fixed server crash resulting from re-execution of prepared statements containing subqueries. (Bug#8125)
Removed a dependence of boolean full-text search on
--default-character-set option. (Bug#8159)
Fixed a crash in a boolean full-text search in certain joins. (Bug#8234)
Fixed erroneous comparison where strings that began with
CHAR(31) were considered equal to the empty
string. (Bug#8134)
Add description of debug command to
mysqladmin help output. (Bug#8207)
perror.exe was always returning “Unknown error� on Windows. See Section 8.18, “perror — Explain Error Codes�. (Bug#7390)
Modify SET statements produced by
mysqldump to write quoted strings using
single quotes rather than double quotes. This avoids problems
if the dump file is reloaded while the
ANSI_QUOTES SQL mode is in effect. (Bug#8148)
Fixed a bug where ALTER TABLE improperly
would accept an index on a TIMESTAMP column
that CREATE TABLE would reject. (Bug#7884)
Fixed a bug in multiple-table UPDATE
statements that could cause spurious Table
'#sql_....' is full errors if the number of rows to
update is big enough. (Bug#7788)
Fixed a problem where SHOW INDEX on a
MERGE table could crash a debugging version
of the server. (Bug#7377)
Fixed a problem where adding an ORDER BY
clause for an indexed column would cause a
SELECT to return an empty result. (Bug#7331)
Fixed a problem where ALTER TABLE on a
TEMPORARY table with a mixed-lettercase
name could cause the table to disappear when
lower_case_table_names was set to 2. (Bug#7261)
Fixed a problem with key cache statistics being reported
incorrectly by the server after receipt of a
SIGHUP signal. (Bug#4285)
Fixed a problem that caused
mysql_stmt_prepare() to be very slow when
used in client programs on Windows. (Bug#5787)
For indexes, SHOW CREATE TABLE now displays
the index type even if it is the default, for storage engines
that support multiple index types. (Bug#7235)
Fixed a bug where the use of GROUP_CONCAT()
with HAVING caused a server crash. (Bug#7769)
Fixed a bug where comparing the result of a subquery to a non-existent column caused a server crash on Windows. (Bug#7885)
Fixed a bug which caused TIMEDIFF()
function to return wrong results if one of its arguments had
non-zero microsecond part (Bug#7586).
Fixed a bug which caused TIMESTAMP columns
with display width specified to be not identical to
DATETIME columns when server was run in
MAXDB mode (Bug#7418).
Fixed a bug in UNION statements that
resulted in the wrong number of the examined rows reported in
the slow query log.
Fixed a bug in a combination of -not and
trunc* operators of full-text search. Using
more than one truncated negative search term, was causing
empty result set.
InnoDB: Fixed a bug introduced in 4.1.9 to the Windows version
if you used innodb_file_per_table.
mysqld would stop and complain about
Windows error number 87 in a file operation. (See the Bugs
database or the 4.1.9 change notes about a workaround for that
bug in 4.1.9). (Bug#8021)
InnoDB: Corrected the handling of trailing spaces in the
ucs2 character set. (Bug#7350)
InnoDB: Use native tmpfile() function on
Netware. All InnoDB temporary files are created under
sys:\tmp. Previously, InnoDB temporary
files were never deleted on Netware.
InnoDB: Fix a race condition that could cause the assertion
space->n_pending_flushes == 0 to fail in
fil0fil.c, in
fil_space_free(), in DROP
TABLE or in ALTER TABLE.
InnoDB: ALTER TABLE ... ADD CONSTRAINT PRIMARY KEY
... complained about bad foreign key definition.
(Bug#7831)
InnoDB: Fix a theoretical hang over the adaptive hash latch in
InnoDB if one runs INSERT ... SELECT ...
(binlog not enabled), or a multiple-table
UPDATE or DELETE, and
only the read tables are InnoDB type, the rest are
MyISAM. (Bug#7879)
Fixed a bug in max_heap_table_size
handling, that resulted in Table is full
error when the table was still smaller than the limit. (Bug#7791).
Fixed a symlink vulnerability in the mysqlaccess script. Reported by Javier Fernandez-Sanguino Pena and Debian Security Audit Team. (CVE-2005-0004)
mysqlbinlog forgot to add backquotes around
the collation of user variables (causing later parsing
problems as BINARY is a reserved word).
(Bug#7793)
Ensured that mysqldump --single-transaction
sets its transaction isolation level to REPEATABLE
READ before proceeding (otherwise if the MySQL
server was configured to run with a default isolation level
lower than REPEATABLE READ it could give an
inconsistent dump). (Bug#7850)
Changed mysql client so that including
\p as part of a prompt command uses the
name of the shared memory connection when the connection is
using shared memory. (Bug#7922)
Fixed a problem in the server where executing a multi-statement query more than once with the query cache active could yield incorrect result sets. (Bug#7966)
Fixed that a 4.1.10 slave can connect to a master < 3.23.50
without hanging (the reason for the hang is a bug in these
quite old masters -- SELECT @@unknown_var
hangs them -- which was fixed in MySQL 3.23.50). (Bug#7965)
Fixed a bug where MySQL was allowing concurrent updates (inserts, deletes) to a table if binary logging is enabled. Changed to ensure that all updates are executed in a serialized fashion, because they are executed serialized when binlog is replayed. (Bug#7879)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Functionality added or changed:
mysqld_safe no longer tests for the presence of the data directory when using a relatively located server binary. It just assumes the directory is there, and fails to start up if it is not. This allows the data directory location to be specified on the command line, and avoids running a server binary that was not intended. (Bug#7249)
The naming scheme of the Windows installation packages has changed slightly:
The platform suffix was changed from
-win to -win32
The product descriptions -noinstall and
-essential have been moved in front of
the version number
Examples:
mysql-essential-4.1.9-win32.msi,
mysql-noinstall-4.1.9-win32.zip See
Section 2.3, “Installing MySQL on Windows�.
The Mac OS X 10.3 installation disk images now include a MySQL Preference Pane for the Mac OS X Control Panel that enables the user to start and stop the MySQL server via the GUI and activate and deactivate the automatic MySQL server startup on bootup.
The MySQL-shared-compat Linux RPM now
includes the 3.23 as well as the 4.0
libysqlclient.so shared libraries. (Bug#6342)
Seconds_Behind_Master is
NULL (which means “unknown�)
if the slave SQL thread is not running, or if the slave I/O
thread is not running or not connected to master. It is zero
if the SQL thread has caught up with the I/O thread. It no
longer grows indefinitely if the master is idle.
InnoDB: Do not acquire an internal InnoDB
table lock in LOCK TABLES if
AUTOCOMMIT=1. This helps in porting old
MyISAM applications to
InnoDB. InnoDB table
locks in that case caused deadlocks very easily.
InnoDB: Print a more descriptive error and refuse to start
InnoDB if the size of
ibdata files is smaller than what is
stored in the tablespace header;
innodb_force_recovery overrides this.
The MySQL server aborts immediately instead of simply issuing
a warning if it is started with the --log-bin
option but cannot initialize the binary log at startup (that
is, an error occurs when writing to the binary log file or
binary log index file).
The binary log file and binary log index file now behave like
MyISAM when there is a "disk full" or
"quota exceeded" error. See Section A.4.3, “How MySQL Handles a Full Disk�.
Bugs fixed:
Fixed problem where running mysql_fix_privilege_tables could result in grant table columns with too-short lengths if the server character set had been set to a multi-byte character set first. (Bug#7539)
InnoDB: Fixed the critical
bug if you enabled
innodb_file_per_table in
my.cnf. If you shut down
mysqld, records could disappear from the
secondary indexes of a table. Unfortunately, on Windows a new
Bug#8021 was introduced. Windows users of
innodb_file_per_table should put a line
innodb_flush_method=unbuffered to their
my.cnf or my.ini to
work around 8021. (Bug#7496)
InnoDB: Fixed a bug: 32-bit mysqld binaries
built on HP-UX-11 did not work with InnoDB
files greater than 2 GB in size. (Bug#6189)
InnoDB: Return a sensible error code from DISCARD
TABLESPACE if it fails because the table is
referenced by a FOREIGN KEY.
InnoDB: Fixed a bug: InnoDB failed to drop
a table in the background drop queue if the table was
referenced by a FOREIGN KEY constraint.
InnoDB: Fixed a bug: if we dropped a table where an
INSERT was waiting for a lock to check a
FOREIGN KEY constraint, then an assertion
would fail in lock_reset_all_on_table().
InnoDB: Fix a little bug: we looked at the physical size of a
stored SQL NULL value from a wrong field in
the index; this has probably caused no bugs visible to the
user. It caused only some extra space to be used in some rare
cases.
InnoDB: Use the fcntl() file flush method
on Mac OS X versions 10.3 and up. Apple had disabled
fsync() in Mac OS X for internal disk
drives, which caused corruption at power outages.
mysqladmin password now checks whether the
server has --old-passwords turned on or
predates 4.1 and uses the old-format password if so. (Bug#7451)
Added a --default-character-set option to
mysqladmin to avoid problems when the
default character set is not latin1. (Bug#7524)
Fix a problem with truncation of FLOAT
values. (Bug#7361)
Fixed a bug in PROCEDURE ANALYSE(), which
did not quote some ENUM values properly.
(Bug#2813)
Fixed a bug that caused incorrect results for complex datetime
expressions containing casts of datetime values to
TIME or DATE values.
(Bug#6914)
Include compression library flags in the output from mysql_config --lib_r. (Bug#7021)
Corrected a problem with mysql_config not
producing all relevant flags from CFLAGS.
(Bug#6964)
Corrected a problem with mysqld_safe not properly capturing output from ps. (Bug#5878)
Fixed a bug that caused a linking failure when linking both the MySQL client library and IMAP library. (Bug#7428)
Fixed table corruption bug when using INSERT
DELAYED with prepared statements.
Fixed a bug that caused microseconds to be gobbled from the
string result of the STR_TO_DATE function,
if there is some other specifier in the format string
following %f. (Bug#7458)
Made the MySQL server accept executing SHOW CREATE
DATABASE even if the connection has an open
transaction or locked tables. Refusing it made
mysqldump --single-transaction sometimes
fail to print a complete CREATE DATABASE
statement for some dumped databases. (Bug#7358)
Fixed that, when encountering a “disk full� or
“quota exceeded� write error,
MyISAM sometimes didn't sleep and retry the
write, thus resulting in a corrupted table. (Bug#7714)
Fixed that --expire-log-days was not honored
if using only transactions. (Bug#7236)
Fixed that a slave could crash after replicating many
ANALYZE TABLE, OPTIMIZE
TABLE, or REPAIR TABLE statements
from the master. (Bug#6461, Bug#7658)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Note: Due to a
libtool-related bug in the source distribution,
the creation of shared libmysqlclient libraries
was not possible (the resulting files were missing the
.so file name extension). The file
ltmain.sh was updated to fix this problem and
the resulting source distribution was released as
mysql-4.1.8a.tar.gz. This modification did
not affect the binary packages. (Bug#7401)
Functionality added or changed:
Automatic character set conversion formerly was done for
operations that mix a column and a string such as assigning a
string to a column, when this was possible without loss of
information. Automatic conversion for operations that mix
columns and strings has been expanded to cover many functions
(such as CONCAT()) and assignment
operators. This reduces the frequency of Illegal mix
of collations errors.
For ALTER DATABASE, the database name now
can be omitted to apply the change to the default database.
Added WITH CONSISTENT SNAPSHOT clause to
START TRANSACTION to begin a transaction
with a consistent read.
Added --order-by-primary to
mysqldump, to sort each table's data in a
dump file. This may be useful when dumping a
MyISAM table which will be loaded into an
InnoDB table. Dumping a MyISAM table with
this option is considerably slower than without.
InnoDB: Do not periodically write SHOW INNODB
STATUS information to a temporary file unless the
configuration option innodb_status_file=1
is set.
InnoDB: Commit after every 10,000 copied rows when executing
ALTER TABLE. This makes it much faster to
recover from an aborted ALTER TABLE or
OPTIMIZE TABLE.
FULLTEXT index block size is changed to be
1024 instead of 2048.
Added --disable-log-bin option to
mysqlbinlog. Using this option you can
disable binary logging for the statements produced by
mysqlbinlog. That is, mysqlbinlog
--disable-log-bin <file_name> | mysql won't
write any statements to the MySQL server binary log.
The --master-data option for
mysqldump now takes an optional argument of
1 or 2 to produce a non-commented or commented CHANGE
MASTER TO statement. The default is 1 for backward
compatibility.
mysqldump --single-transaction
--master-data now is able to take an online
(non-blocking) dump of InnoDB and report the corresponding
binary log coordinates. This makes a backup suitable for
point-in-time recovery, roll-forward or replication slave
creation. See Section 8.13, “mysqldump — A Database Backup Program�.
Added --lock-all-tables to
mysqldump to lock all tables by acquiring a
global read lock.
Added --hex-blob option to
mysqldump for dumping binary string columns
using hexadecimal notation.
Added mysql_hex_string() C API function
that hex-encodes a string.
In the normal log MySQL now prints the log position for
Binlog Dump requests.
Added [mysql_cluster] section to
my.cnf file for configuration settings
specific to MySQL Cluster.
ndb-connectstring variable moved here.
A connection doing a rollback now displays "Rolling back" in
the State column of SHOW
PROCESSLIST.
mysqlbinlog now prints an informative
commented line (thread id, timestamp, server id, and so forth)
before each LOAD DATA INFILE, like it does
for other queries; unless --short-form is
used.
The statements CREATE TABLE,
TRUNCATE TABLE, DROP
DATABASE, and CREATE DATABASE
cause an implicit commit.
Bugs fixed:
A multiple-table DELETE could cause MySQL
to crash when using InnoDB tables. (Bug#5837, Bug#6378)
Some data definition statements (CREATE
TABLE where the table was not a temporary table,
TRUNCATE TABLE, DROP
DATABASE, and CREATE DATABASE)
were not being written to the binary log after a
ROLLBACK. This also caused problems with
replication. (Bug#6883)
Fixed incorrect referencing to column by name from subquery to
outer query in case of using temporary table by outer query
and placing subquery in the WHERE clause.
(Bug#7079)
Fixed a bug in authentication code that allowed a malicious user to crash the server with specially crafted packets (using a modified client library). (Bug#7187)
Fixed a crashing bug in a string function
LEFT, when this function is part of the
expression which is used as GROUP BY field.
(Bug#7101)
Fixed bug which caused MySQL to require privileges on system
time zone description tables for implicit access to them (that
is, if one set time_zone variable or used
CONVERT_TZ() function) in case when some
table-level or column-level privileges existed. (Bug#6765)
mysql_stmt_data_seek(stmt,0) now rewinds a
counter and enables buffered rows to be re-fetched on the
client side. (Bug#6996)
Fixed an insufficient privilege check in SHOW CREATE
TABLE command. (Bug#7043)
Fixed a rare memory corruption (that resulted in a crash) in
MATCH ... AGAINST on columns that use
multi-byte character sets. (Bug#6269)
Fixed NULL processing in
ALL/SOME subqueries.
(Bug#6247)
Fixed execution of complex queries with subqueries. (Bug#6406, Bug#6841)
Fixed initialization of some internal structures for first execution. (Bug#6517)
Backported a fix for the full-text interface from MySQL 5.0. (Bug#6523)
Fixed NULL value handling in case of empty
results in subqueries. (Bug#6806)
Prevent adding CREATE TABLE .. SELECT query
to the binary log when the insertion of new records partially
failed. (Bug#6682)
INSERT ... SELECT no longer reports
spurious "column truncated" warnings (Bug#6284)
Fixed a bug that could cause "Record has changed since last
read in table" error message in some queries on
HEAP tables that contain only one row. (Bug#6748)
mysqld_safe was in many cases ignoring any
--no-defaults,
--defaults-file, or
--defaults-extra-file arguments. Those
arguments are now honored, and this may change what options
are passed to mysqld in some installations.
The server was interpreting CHAR BINARY and
VARCHAR BINARY columns from 4.0 tables as
having the BINARY and
VARBINARY data types. Now they are
interpreted as CHAR and
VARCHAR columns that have the binary
collation of the column's character set. (This is the same way
that CHAR BINARY and VARCHAR
BINARY are handled for new tables created in 4.1.)
Fixed spurious "duplicate key" error from
REPLACE or INSERT ... ON DUPLICATE
KEY UPDATE statements performing multiple-row insert
in the table that had unique and full-text indexes. (Bug#6784)
Fixed a bug in execution of subqueries in
SET and DO statements
which caused wrong results to be returned from subsequent
queries. (Bug#6462)
Fixed a bug that allowed server to accept datetime values with
wrong year part. The server now also performs same checks for
datetime values passed through MYSQL_TIME
structures as for datetime values passed as strings. (Bug#6266)
Fixed a bug with INSERT for a table with
FULLTEXT indexes. Under rare circumstances,
this could result in a corrupted table if words of different
lengths may be considered equal. This is possible in some
collations, for example, in utf8_general_ci
or latin1_german2_ci. (Bug#6265)
InnoDB: Do not intentionally crash mysqld
if the buffer pool is exhausted by the lock table; return
error 1206 instead. Do not intentionally crash
mysqld if we cannot allocate the memory
for the InnoDB buffer pool. (Bug#6817) (Bug#6827)
InnoDB: Let InnoDB's FOREIGN KEY parser to
remove the latin1 character
0xA0 from the end of an unquoted
identifier. The EMS MySQL Manager in ALTER
TABLE adds that character after a table name, which
caused error 121 when we tried to add a new constraint.
InnoDB: Refuse to open new-style tables created with MySQL 5.0.3 or later. (Bug#7089)
InnoDB: Do not call rewind() when
displaying SHOW INNODB STATUS information
on stderr.
InnoDB: Made the foreign key parser better aware of quotes. (Bug#6340)
InnoDB: If one used INSERT IGNORE to insert
several rows at a time, and the first inserts were ignored
because of a duplicate key collision, then InnoDB in a
replication slave assigned AUTO_INCREMENT
values 1 bigger than in the master. This broke the MySQL
replication. (Bug#6287)
InnoDB: Fixed a bug: InnoDB ignored in
innodb_data_file_path the
max specification in
:autoextend:max:2000M. This bug was
introduced in 4.1.1.
InnoDB: Fixed a bug:
innodb_locks_unsafe_for_binlog still uses
next-key locking (Bug#6747). InnoDB used next-key locking
when record matched completely to search tuple. This
unnecessary next-key locking is now removed when
innodb_locks_unsafe_for_binlog option is
used.
InnoDB: Fix two hangs: FOREIGN KEY
constraints treated table and database names as
case-insensitive. RENAME TABLE t TO T would
hang in an endless loop if t had a foreign
key constraint defined on it. Fix also a hang over the
dictionary mutex that would occur if one tried in
ALTER TABLE or RENAME
TABLE to create a foreign key constraint name that
collided with another existing name. (Bug#3478)
If STMT_ATTR_UPDATE_MAX_LENGTH is set for a
prepared statement,
mysql_stmt_store_result() updates
field->max_length for numeric columns as
well. (Bug#6096)
Prepared statements now handle ZEROFILL
when converting integer to
string.
Fixed crash when a call to
mysql_stmt_store_result() occurred without
a preceding call to
mysql_stmt_bind_result().
Fixed crash in prepared statements when using SELECT
* FROM t1 NATURAL JOIN t2....
Fixed crash in prepared statements when using SELECT
... PROCEDURE.
Fixed crash in prepared statements when using subqueries.
GROUP_CONCAT(...ORDER BY) when used with
prepared statements gave wrong sorting order.
CREATE TABLE
didn't
signal when table was created. This could cause a
created_tableDROP TABLE
in another
thread to wait "forever".
created_table
Server warnings now are reset when you execute a prepared statement.
Improved performance of identifier comparisons (if many tables or columns are specified).
OPTIMIZE TABLE, REPAIR
TABLE, and ANALYZE TABLE are now
replicated without any error code in the binary log. (Bug#5551)
LOAD DATA INFILE now works with option
replicate-rewrite-db. (Bug#6353)
Fixed a bug which caused a crash when only the slave I/O thread was stopped and started. (Bug#6148)
Changed semantics of CREATE/ALTER/DROP
DATABASE statements so that replication of
CREATE DATABASE is possible when using
--binlog-do-db and
--binlog-ignore-db. (Bug#6391)
If a connection had an open transaction but had done no
updates to transactional tables (for example if had just done
a SELECT FOR UPDATE then executed a
non-transactional update, that update automatically committed
the transaction (thus releasing InnoDB's row-level locks etc).
(Bug#5714)
If a connection was interrupted by a network error and did a
rollback, the network error code got stored into the
BEGIN and ROLLBACK
binary log events; that caused superfluous slave stops. (Bug#6522)
A sequence of BEGIN (or SET
AUTOCOMMIT=0), FLUSH TABLES WITH READ
LOCK, transactional update,
COMMIT, FLUSH TABLES WITH READ
LOCK could hang the connection forever and possibly
the MySQL server itself. This happened for example when
running the innobackup script several
times. (Bug#6732)
mysqlbinlog did not print SET
PSEUDO_THREAD_ID statements in front of
LOAD DATA INFILE statements inserting into
temporary tables, thus causing potential problems when rolling
forward these statements after restoring a backup. (Bug#6671)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Functionality added or changed:
MOD() no longer rounds arguments with a
fractional part to integers. Now it returns exact remainder
after division. (Bug#6138)
InnoDB: Added a startup option and settable system variable
innodb_table_locks for making LOCK
TABLE acquire also InnoDB locks.
The default value is 1, which means that LOCK
TABLES causes also InnoDB internally to take a table
lock. In applications using AUTOCOMMIT=1
and LOCK TABLES, InnoDB's internal table
locks that were added in 4.0.20 and 4.1.2 can cause deadlocks.
You can set innodb_table_locks=0 in
my.cnf to remove that problem. (Bug#3299, Bug#5998)
See Section 14.2.17, “Restrictions on InnoDB Tables�. (Bug#3299, Bug#5998) InnoDB: SHOW TABLE STATUS now shows
the creation time of the table for InnoDB. Note that this
timestamp might not be the correct time because, for example,
ALTER TABLE changes this timestamp.
InnoDB: If innodb_thread_concurrency would
be exceeded, let a thread sleep 10 ms before entering the FIFO
queue; previously, the value was 50 ms.
Bugs fixed:
Fixed a bug with FOUND_ROWS() used together
with LIMIT clause in prepared statements.
(Bug#6088)
Fixed a bug with NATURAL JOIN in prepared
statements. (Bug#6046).
Fixed a bug in join of tables from different databases having columns with identical names (prepared statements). (Bug#6050)
Now implicit access to system time zone description tables
(which happens when you set the time_zone
variable or use CONVERT_TZ() function) does
not require any privileges. (Bug#6116)
Fixed a bug which caused the server to crash when the
deprecated libmysqlclient function
mysql_create_db() was called. (Bug#6081)
Fixed REVOKE ALL PRIVILEGES, GRANT OPTION FROM
so that all
privileges are revoked correctly. (Bug#5831). This corrects a
case that the fix in 4.1.6 could miss.
user
Fixed crash when selecting from a HEAP
table with key_column IS NOT NULL. This
could also cause a crash if not all index parts where used.
(Bug#6082)
Fixed a bug that could cause MyISAM index
corruption when key values start with character codes below
BLANK. This was caused by the new key sort
order in 4.1. (Bug#6151)
InnoDB: Fixed a bug in LOAD DATA
INFILE…REPLACE printing duplicate key error when
executing the same load query several times. (Bug#5835)
Fixed a bug in the prepared statements protocol when wrong
metadata was sent for SELECT statements not
returning a result set (such as SELECT ... INTO
OUTFILE). (Bug#6059)
Fixed bug which allowed one to circumvent missing UPDATE privilege if one had INSERT and SELECT privileges for table with primary key. (Bug#6173)
Fixed a bug in libmysqlclient with wrong
conversion of negative time values to strings. (Bug#6049).
Fixed a bug in libmysqlclient with wrong
conversion of zero date values (0000-00-00)
to strings. (Bug#6058)
Fixed a bug that caused the server to crash on attempt to
prepare a statement with RAND(?). (Bug#5985)
Fixed a bug with handling of DATE,
TIME, and DATETIME
columns in the binary protocol. The problem is
compiler-specific and could have been observed on HP-UX, AIX,
Solaris9, when compiling with native compiler. (Bug#6025)
Fixed a bug with handling of TINYINT
columns in the binary protocol. The problem is specific to
platforms where the C compiler has the char
data type unsigned by default. (Bug#6024)
InnoDB: Fixed problem introduced in MySQL 4.0.21 where a
connection starting a transaction, doing updates, then
FLUSH TABLES WITH READ LOCK, then
COMMIT, would cause replication slaves to
stop (complaining about error 1223). Bug surfaced when using
the InnoDB innobackup script. (Bug#5949)
InnoDB: Release the dictionary latch during a long cascaded
FOREIGN KEY operation, so that we do not
starve other users doing CREATE TABLE or
other DDL operation. This caused a notorious 'Long semaphore
wait' message to be printed to the .err
log. (Bug#5961)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Functionality added or changed:
Added option --sigint-ignore to the
mysql command line client to make it ignore
SIGINT signals (typically the result of the
user pressing Control-C).
InnoDB: Added the startup option and settable global variable
innodb_max_purge_lag for delaying
INSERT, UPDATE and
DELETE operations when the purge operations
are lagging. The default value of this parameter is zero,
meaning that there are no delays. See
Section 14.2.13, “Implementation of Multi-Versioning�.
InnoDB: The innodb_autoextend_increment
startup option that was introduced in release 4.1.5 was made a
settable global variable. (Bug#5736)
InnoDB: If DROP TABLE is invoked on an
InnoDB table for which the .ibd file is
missing, print to error log that the table was removed from
the InnoDB data dictionary, and allow MySQL
to delete the .frm file. Maybe
DROP TABLE should issue a warning in this
case.
TIMESTAMP columns now can store
NULL values. To create such a column, you
must explicitly specify the NULL attribute
in the column specification. (Unlike all other data types,
TIMESTAMP columns are NOT
NULL by default.)
Now if ALTER TABLE converts one
AUTO_INCREMENT column to another
AUTO_INCREMENT column it preserves zero
values (this includes the case that we don't change such
column at all).
Now if ALTER TABLE converts some column to
TIMESTAMP NOT NULL column it converts
NULL values to current timestamp value (One
can still get old behavior by setting system
TIMESTAMP variable to zero).
On Windows, the MySQL configuration files included in the
package now use .ini instead of
.cnf as the file name suffix.
Bugs fixed:
Fixed a bug that caused the server to crash on attempt to execute a prepared statement with a subquery inside a boolean expression. (Bug#5987)
Fixed a bug that caused the server to sometimes choose non-optimal execution plan for a prepared statement executed with changed placeholder values. (Bug#6042)
InnoDB: Make the check for excessive semaphore waits tolerate glitches in the system clock (do not crash the server if the system time is adjusted while InnoDB is under load.). (Bug#5898)
InnoDB: Fixed a bug in the InnoDB FOREIGN
KEY parser that prevented ALTER
TABLE of tables containing
‘#’ in their names. (Bug#5856)
InnoDB: Fixed a bug that prevented ALTER TABLE
from
working. (Bug#5851)
t DISCARD TABLESPACE
InnoDB: SHOW CREATE TABLE now obeys the
SET SQL_MODE=ANSI and SET
SQL_QUOTE_SHOW_CREATE=0 settings. (Bug#5292)
InnoDB: Fixed a bug that caused CREATE TEMPORARY
TABLE ... ENGINE=InnoDB to terminate
mysqld when running in
innodb_file_per_table mode. Per-table
tablespaces for temporary tables from now on are created in
the temporary directory of mysqld. (Bug#5137)
InnoDB: Fixed some (not all) UTF-8 bugs in column prefix indexes. (Bug#5975)
InnoDB: If one updated a column so that its size changed, or
updated it to an externally stored (TEXT or
BLOB) value, then ANOTHER externally stored
column would show up as 512 bytes of good data + 20 bytes of
garbage in a consistent read that fetched the old version of
the row. (Bug#5960)
InnoDB: Change error code to
HA_ERR_ROW_IS_REFERENCED if we cannot
DROP a parent table referenced by a
FOREIGN KEY constraint; this error number
is less misleading than the previous number
HA_ERR_CANNOT_ADD_FOREIGN, but misleading
still. (Bug#6202)
Fixed REVOKE ALL PRIVILEGES, GRANT OPTION FROM
so that all
privileges are revoked correctly. (Bug#5831)
user
Fixed a bug that caused the server to crash when character set
conversion was implicitly used in prepared mode; for example,
as in 'abc' LIKE CONVERT('abc' as utf8).
(Bug#5688)
The mysql_change_user() C API function now
frees all prepared statements associated with the connection.
(Bug#5315)
Fixed a bug when inserting NULL into an
AUTO_INCREMENT column failed, when using
prepared statements. (Bug#5510)
Fixed slave SQL thread so that the SET
COLLATION_SERVER... statements it replicates don't
advance its position (so that if it gets interrupted before
the actual update query, it later redoes the
SET). (Bug#5705)
Fixed that if the slave SQL thread found a syntax error in a query (which should be rare, as the master parsed it successfully), it stops. (Bug#5711)
Fixed that if a write to a MyISAM table
fails because of a full disk or an exceeded disk quota, it
prints a message to the error log every 10 minutes, and waits
until disk space becomes available. (Bug#3248)
Now MySQL does not prefer columns, which are mentioned in
select list but are renamed, over columns from other tables
participating in FROM clause when it
resolves GROUP BY clause (for example,
SELECT t1.a AS c FROM t1, t2 ORDER BY a
produces an error if both t1 and
t2 tables contain a
column). (Bug#4302)
Behavior of ALTER TABLE converting column
containing NULL values to
AUTO_INCREMENT column is no longer affected
by NO_AUTO_VALUE_ON_ZERO mode. (Bug#5915).
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Functionality added or changed:
InnoDB: Added configuration option
innodb_autoextend_increment for setting the
size in megabytes by which InnoDB
tablespaces are extended when they become full. The default
value is 8, corresponding to the fixed increment of 8MB in
previous versions of MySQL.
InnoDB: The new Windows installation wizard
of MySQL makes InnoDB as the MySQL default table type on
Windows, unless explicitly specified otherwise. Note that it
places the my.ini file in the
installation directory of the MySQL server. See
Section 2.3.4.14, “The Location of the my.ini File�.
Bugs fixed:
Fixed a bug which caused the server to crash on attempt to
execute a prepared statement with BETWEEN ? AND
? and a datetime column. (Bug#5748)
Fixed name resolving of external fields of subqueries if subquery placed in select list of query with grouping. (Bug#5326)
Fixed detection of using same table for updating and selecting in multi-update queries. (Bug#5455)
The values of the max_sort_length,
sql_mode, and
group_concat_max_len system variables now
are stored in the query cache with other query information to
avoid returning an incorrect result from the query cache. (Bug#5394) (Bug#5515)
Fixed syntax analyzer with
sql_mode=IGNORE_SPACE. It happened to take
phrases like default .07 as
identifier.identifier. (Bug#5318)
Fixed illegal internal field length of user variables of
integer type. This showed up when creating a table as
SELECT
@. (Bug#4788)
var_name
Fixed a buffer overflow in prepared statements API (libmysqlclient) when a statement containing thousands of placeholders was executed. (Bug#5194)
Fixed a bug in the server when after reaching a certain limit of prepared statements per connection (97), statement ids began to overlap, so occasionally wrong statements were chosen for execution. (Bug#5399)
Fixed a bug in prepared statements when
LIKE used with arguments in different
character sets crashed server on first execute. (Bug#4368)
Fixed a bug in prepared statements when providing '0000-00-00' date to a parameter lead to server crash. (Bug#4231, Bug#4562)
Fixed a bug in OPTIMIZE TABLE that could
cause table corruption on FULLTEXT indexes.
(Bug#5327)
InnoDB: Fixed a bug that InnoDB only allowed a maximum of 1000 connections inside InnoDB at the same time. A higher number could cause an assertion failure in sync0arr.c, line 384. Now we allow 1000, 10000, or 50000, depending on the buffer pool size. (Bug#5414)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Note: To fix a compile problem on
systems that do not have automake 1.7
installed, an updated 4.1.4a source tarball has been published. In
addition to resolving this automake dependency
(Bug#5319), it also fixes some reported
libedit compile errors when using a
non-gcc compiler (Bug#5353).
Functionality added or changed:
Added the CSV storage engine.
Made internal representation of TIMESTAMP
values in InnoDB in 4.1 to be the same as
in 4.0. This difference resulted in incorrect datetime values
in TIMESTAMP columns in
InnoDB tables after an upgrade from 4.0 to
4.1. (Bug#4492) Warning: extra steps
during upgrade required! Unfortunately this means
that if you are upgrading from 4.1.x, where x <= 3, to
4.1.4 you should use mysqldump for saving
and then restoring your InnoDB tables with
TIMESTAMP columns.
The mysqld-opt Windows server was renamed to mysqld. This completes the Windows server renaming begun in MySQL 4.1.2. See Section 2.3.8, “Selecting a MySQL Server type�.
Added Latin language collations for the
ucs2 and utf8 Unicode
character sets. These are called
ucs2_roman_ci and
utf8_roman_ci.
Corrected the name of the Mac OS X StartupItem script (it must
match the name of the subdirectory, which was renamed to
MySQLCOM in MySQL 4.1.2). Thanks to Bryan
McCormack for reporting this.
Added --start-datetime,
--stop-datetime,
--start-position, and
--stop-position options to
mysqlbinlog. These make point-in-time
recovery easier.
Killing a CHECK TABLE statement does not
result in the table being marked as “corrupted�
any more; the table remains as if CHECK
TABLE had not even started. See
Section 13.5.5.3, “KILL Syntax�.
Made the MySQL server ignore SIGHUP and
SIGQUIT on Mac OS X 10.3. This is needed
because under this OS, the MySQL server receives lots of these
signals (reported as Bug#2030).
Support of usage of column aliases qualified by table name or
alias in ORDER BY and GROUP
BY was dropped. For example the following query
SELECT a AS b FROM t1 ORDER BY t1.b is not
allowed. One should use SELECT a AS b FROM t1 ORDER
BY t1.a or SELECT a AS b FROM t1 ORDER BY
b instead. This was non-standard (since aliases are
defined on query level not on table level) and caused problems
with some queries.
Bugs fixed:
Fixed a bug that caused libmysql to crash when attempting to
fetch a value of MEDIUMINT column. (Bug#5126)
Fixed a bug that caused the MySQL server to crash when
attempting to execute a prepared statement with
SELECT ... INTO @var for a second time.
(Bug#5034)
Fixed execution of optimized IN subqueries
that use compound indexes. (Bug#4435)
Prohibited resolving of table fields in inner queries if fields do not take part in grouping for queries with grouping (inside aggregate function arguments, all table fields are still allowed). (Bug#4814)
Fixed a crash after SLAVE STOP if the IO
thread was in a special state. (Bug#4629)
Fixed an old bug in concurrent accesses to
MERGE tables (even one
MERGE table and MyISAM
tables), that could have resulted in a crash or hang of the
server. (Bug#2408,
CVE-2004-0837)
Fixed a bug that caused server crash on attempt to execute for
a second time a prepared statement with NOT
in WHERE or ON clauses.
(Bug#4912)
MATCH ... AGAINST now works in a subquery.
(Bug#4769)
Fixed a bug that omitted the .err
extension of the error log file (--log-error)
when the hostname contained a domain name. The domain name is
now replaced by the extension. (Bug#4997)
Fixed a crash in myisamchk. (Bug#4901)
Fixed a bug which caused server crash if one used the
CONVERT_TZ() function with time zone
described in database as parameter and this time zone was not
used before. (Bug#4508)
Support for %T, %r, %V, %v and %X,
%x format specifiers was added to
STR_TO_DATE() function. (Bug#4756)
Fixed a bug (hang) in NATURAL JOIN where
joined table had no common column. (Bug#4807)
Fixed a crash caused by UNHEX(NULL). (Bug#4441)
mysql_fix_privilege_tables didn't correctly
handle the argument of its
--password=
option. (Bug#4240, Bug#4543)
password_val
Fixed that mysqlbinlog --read-from-remote-server sometimes couldn't accept 2 binary logs on command line. (Bug#4507)
Fixed that mysqlbinlog --position
--read-from-remote-server had wrong #
at lines. (Bug#4506)
If CREATE TEMPORARY TABLE t SELECT failed
while loading the data, the temporary table was not dropped.
(Bug#4551)
Fixed that when a multiple-table DROP TABLE
failed to drop a table on the master server, the error code
was not written to the binary log. (Bug#4553)
When the slave SQL thread was replicating a LOAD DATA
INFILE statement, it didn't show the statement in
the output of SHOW PROCESSLIST. (Bug#4326)
Fixed an assertion failure when reading the grant tables (Bug#4407)
Fixed that CREATE TABLE ... TYPE=HEAP ... AS
SELECT... caused replication slave to stop. (Bug#4971)
Fixed that
mysql_options(...,MYSQL_OPT_LOCAL_INFILE,...)
failed to disable LOAD DATA LOCAL INFILE.
(Bug#5038)
Fixed that disable-local-infile option had
no effect if client read it from a configuration file using
mysql_options(...,MYSQL_READ_DEFAULT,...).
(Bug#5073)
Fixed that SET GLOBAL SYNC_BINLOG did not
work on some platforms (Mac OS X). (Bug#5064)
Fixed that mysql-test-run failed on the
rpl_trunc_binlog test if running test from
the installed (the target of 'make install') directory. (Bug#5050)
Fixed that mysql-test-run failed on the
grant_cache test when run as Unix user
'root'. (Bug#4678)
Fixed an unlikely deadlock which could happen when using
KILL. (Bug#4810)
Fixed a crash when one connection got
KILLed while it was doing START
SLAVE. (Bug#4827)
Made FLUSH TABLES WITH READ LOCK block
COMMIT if server is running with binary
logging; this ensures that the binary log position is
trustable when doing a full backup of tables and the binary
log. (Bug#4953)
Fixed that the counter of an auto_increment
column was not reset by TRUNCATE TABLE if
the table was a temporary table. (Bug#5033)
Fixed bug which caused error to be reported when column from
ORDER BY clause was present in two tables
participating in SELECT even if the second
instance of column in select list was renamed. (Bug#4302)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Note: The initial release of MySQL 4.1.3 for Windows accidentally was not compiled with support for the Spatial Extensions (OpenGIS). This was fixed by rebuilding from the same 4.1 code snapshot with the missing option and releasing those packages as version 4.1.3a.
To enable compiling the newly released PHP 5 against MySQL 4.1.3 on Windows, the Windows packages had to be rebuilt once more to add a few missing symbols to the MySQL client library. These packages were released as MySQL 4.1.3b.
Functionality added or changed:
Warning: Incompatible change:
C API change: mysql_shutdown() now requires
a second argument. This is a source-level incompatibility that
affects how you compile client programs; it does not affect
the ability of compiled clients to communicate with older
servers. See Section 17.2.3.63, “mysql_shutdown()�.
Warning: Incompatible change:
The timezone system variable has been
removed and replaced by system_time_zone.
See Section 5.2.2, “System Variables�.
Support for per-connection time zones was added. Now you can
set the current time zone for a connection by setting the
@@time_zone system variable to a value such
as '+10:00' or
'Europe/Moscow' (where
'Europe/Moscow' is the name of one of the
time zones described in the system tables). Functions like
CURRENT_TIMESTAMP,
UNIX_TIMESTAMP, and so forth honor this
time zone. Values of TIMESTAMP type are
also interpreted as values in this time zone. So now our
TIMESTAMP type behaves similar to Oracle's
TIMESTAMP WITH LOCAL TIME ZONE. That is,
values stored in such a column are normalized toward UTC and
converted back to the current connection time zone when they
are retrieved from such a column. To set up the tables that
store time zone information, see
Section 2.10, “Post-Installation Setup and Testing�.
Basic time zone conversion function
CONVERT_TZ() was added. It assumes that its
first argument is a datetime value in the time zone specified
by its second argument and returns the equivalent datetime
value in the time zone specified by its third argument.
Added the ARCHIVE storage engine.
Added SQL syntax for prepared statements. See Section 13.7, “SQL Syntax for Prepared Statements�.
Language-specific collations were added for the
ucs2 and utf8 Unicode
character sets: Icelandic, Latvian, Romanian, Slovenian,
Polish, Estonian, Swedish, Turkish, Czech, Danish, Lithuanian,
Slovak, Spanish, Traditional Spanish.
CHECK TABLE now can be killed. It then
marks the table as corrupted. See Section 13.5.5.3, “KILL Syntax�.
OPTIMIZE TABLE for
InnoDB tables is now mapped to
ALTER TABLE instead of ANALYZE
TABLE.
sync_frm is now a settable global variable
(not only a startup option).
Added the sync_binlog=N global variable and
startup option, which makes the MySQL server synchronize its
binary log to disk (fdatasync()) after
every Nth write to the binary log.
Changed the slave SQL thread to print fewer useless error
messages (no more message duplication; no more messages when
an error is skipped (because of
slave-skip-errors).
DROP DATABASE IF EXISTS, DROP
TABLE IF EXISTS, single-table
DELETE and single-table
UPDATE are now written to the binary log
even if they changed nothing on the master (for example, even
if the DELETE matched no row). The old
behavior sometimes caused bad surprises in replication setups.
Replication and mysqlbinlog now have better support for the case that the session character set and collation variables are changed within a given session. See Section 6.7, “Replication Features and Known Problems�.
Added --innodb-safe-binlog server option,
which adds consistency guarantees between the content of
InnoDB tables and the binary log. See
Section 5.11.4, “The Binary Log�.
LIKE now supports the use of a prepared
statement parameter or delimited constant expression as the
argument to ESCAPE (Bug#4200).
Bugs fixed:
Fixed CREATE DATABASE IF NOT EXISTS for
Win32 which caused an error if database existed. (Bug#4378)
Added missing root account to Windows
version of mysqld. (Bug#4242)
Fixed bug in prepared EXPLAIN statement
which led to server crash. (Bug#4271)
Fixed a bug of using parameters in some prepared statements via SQL syntax. (Bug#4280)
Fixed a bug in MERGE tables created with
INSERT_METHOD=LAST, that were not able to
report a key number that caused “Duplicate entry�
error for UNIQUE key in
INSERT. As a result, error message was not
precise enough (error 1022 instead of error 1062) and
INSERT ... ON DUPLICATE KEY UPDATE did not
work. (Bug#4008)
Fixed a bug in DELETE from a table with
FULLTEXT indexes which under rare
circumstances could result in a corrupted table, if words of
different lengths may be considered equal (which is possible
in some collations, for example, in
utf8_general_ci or
latin1_german2_ci.) (Bug#3808)
Fixed too-early unlocking of tables if we have subquery in
HAVING clause. (Bug#3984)
Fixed a bug in mysqldump when it didn't return an error if the output device was filled (Bug#1851)
Fixed a bug in client-side conversion of string column to
MYSQL_TIME application buffer (prepared
statements API). (Bug#4030)
Fixed a bug with server crash on attempt to execute a non-prepared statement. (Bug#4236)
Fixed a bug with server crash on attempt to prepare a statement with character set introducer. (Bug#4105)
Fixed bug which caused different number of warnings to be
generated when bad datetime as string or as number was
inserted into DATETIME or
TIMESTAMP column. (Bug#2336)
Fixed some byte order bugs with prepared statements on machines with high-byte-first. (Bug#4173)
Fixed unlikely bug in the range optimizer when using many
IN() queries on different key parts. (Bug#4157)
Fixed problem with NULL and derived tables.
(Bug#4097)
Fixed wrong UNION results if display length
of fields for numeric types was set less then real length of
values in them. (Bug#4067)
Fixed a bug in mysql_stmt_close(), which
hung up when attempting to close statement after failed
mysql_stmt_fetch(). (Bug#4079)
Fixed bug of re-execution optimized
COUNT(*), MAX() and
MIN() functions in prepared statements.
(Bug#2687)
Fixed a bug with COUNT(DISTINCT)
performance degradation in cases like COUNT(DISTINCT
a TEXT, b CHAR(1)) (no index used). (Bug#3904)
Fixed a bug in MATCH ... AGAINST(... IN BOOLEAN
MODE) that under rare circumstances could cause
wrong results if in the data's collation one byte could match
many (like in utf8_general_ci or
latin1_german2_ci.) (Bug#3964)
Fixed a bug in prepared statements protocol, when microseconds
part of
MYSQL_TYPE_TIME/MYSQL_TYPE_DATETIME
columns was not sent to the client. (Bug#4026)
Fixed a bug that using --with-charset with
configure didn't affect the MySQL client
library. (Bug#3990)
Fixed a bug in authentication code that allowed a malicious user to bypass password verification with specially crafted packets, using a modified client library. (CVE-2004-0627, CVE-2004-0628)
Fixed bug with wrong result of CONCAT(?,
in prepared
statements. (Bug#3796)
col_name)
Fixed potential memory overrun in
mysql_real_connect() (which required a
compromised DNS server and certain operating systems). (Bug#4017,
CVE-2004-0836)
During the installation process of the server RPM on Linux,
mysqld was run as the
root system user, and if you had
--log-bin=,
where the file was located somewhere outside of the data
directory, it created binary log files owned by
file_nameroot in this directory that remained owned
by root after the installation. This is now
fixed by starting mysqld as the
mysql system user instead. (Bug#4038)
Made DROP DATABASE honor the value of
lower_case_table_names. (Bug#4066)
The slave SQL thread refused to replicate INSERT ...
SELECT if it examined more than 4 billion rows. (Bug#3871)
mysqlbinlog didn't escape the string content of user variables, and did not deal well when these variables were in non-ASCII character sets; this is now fixed by always printing the string content of user variables in hexadecimal. The character set and collation of the string is now also printed. (Bug#3875)
Fixed incorrect destruction of expression which led to crash
of server on complex
AND/OR expressions if
query was ignored (either by a replication server because of
--replicate-*-table rules, or by any MySQL
server because of a syntax error). (Bug#3969, Bug#4494)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Functionality added or changed:
CHAR BYTE is an alias for the
BINARY data type. (Previously, it was an
alias for CHAR BINARY.)
Warning: Incompatible change:
Handling of the FLOAT and
DOUBLE floating-point data types is more
strict to follow standard SQL. For example, a data type of
FLOAT(3,1) stores a maximum value of 99.9.
Previously, the server allowed larger numbers to be stored.
That is, it stored a value such as 100.0 as 100.0. Now the
server clips 100.0 to the maximum allowable value of 99.9. If
you have tables that were created before MySQL 4.1.2 and that
contain floating-point data not strictly legal for the column
type, you should alter the data types of those columns. For
example:
ALTER TABLEtbl_nameMODIFYcol_nameFLOAT(4,1);
Warning: Incompatible change:
String comparison now works according to the SQL standard.
Because we have that 'a' = 'a ' then from
it must follow that 'a' > 'a\t'. (The
latter was not the case before MySQL 4.1.2.) To implement it,
we had to change how storage engines compare strings
internally. As a side effect, if you have a table where a
CHAR or VARCHAR column
in some row has a value with the last character less than
ASCII(32), you have to repair this table.
CHECK TABLES tells you if this problem
exists. (Bug#3152)
Added support for DEFAULT CURRENT_TIMESTAMP
and for ON UPDATE CURRENT_TIMESTAMP
specifications for TIMESTAMP columns. Now
you can explicitly say that a TIMESTAMP
column should be set automatically to the current timestamp
for INSERT and/or UPDATE
statements, or even prevent the column from updating
automatically. Only one column with such an auto-set feature
per table is supported. TIMESTAMP columns
created with earlier versions of MySQL behave as before.
Behavior of TIMESTAMP columns that were
created without explicit specification of default/on as
earlier depends on its position in table: If it is the first
TIMESTAMP column, it be treated as having
been specified as TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP. In other cases, it
would be treated as a TIMESTAMP DEFAULT 0
column. NOW is supported as an alias for
CURRENT_TIMESTAMP.
Warning: Incompatible change:
Unlike in previous versions, explicit specification of default
values for TIMESTAMP column is never
ignored and turns off the auto-set feature (unless you have
CURRENT_TIMESTAMP as the default).
Warning: Incompatible change: Renamed prepared statements C API functions:
| Old Name | New Name |
mysql_bind_param() | mysql_stmt_bind_param() |
mysql_bind_result() | mysql_stmt_bind_result() |
mysql_prepare() | mysql_stmt_prepare() |
mysql_execute() | mysql_stmt_execute() |
mysql_fetch() | mysql_stmt_fetch() |
mysql_fetch_column() | mysql_stmt_fetch_column() |
mysql_param_count() | mysql_stmt_param_count() |
mysql_param_result() | mysql_stmt_param_metadata() |
mysql_get_metadata() | mysql_stmt_result_metadata() |
mysql_send_long_data() | mysql_stmt_send_long_data() |
Now all functions that operate with a
MYSQL_STMT structure begin with the prefix
mysql_stmt_.
Warning: Incompatible change:
The signature of the mysql_stmt_prepare()
function was changed to int
mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query,
unsigned long length). To create a
MYSQL_STMT handle, you should use the
mysql_stmt_init() function, not
mysql_stmt_prepare().
Warning: Incompatible change:
The Type output column for SHOW
TABLE STATUS now is labeled
Engine.
Added the EXAMPLE storage engine.
The mysqld Windows server was renamed to mysqld-debug. See Section 2.3.8, “Selecting a MySQL Server type�.
Added Handler_discover status variable.
Added support for character set conversion and
MYSQL_TYPE_BLOB type code in prepared
statement protocol.
Added explanation of hidden SELECT of
UNION in output of EXPLAIN
SELECT statement.
mysql command-line client now supports
multiple -e options. (Bug#591)
New myisam_data_pointer_size system
variable. See Section 5.2.2, “System Variables�.
The --log-warnings server option now is
enabled by default. Disable with
--skip-log-warnings.
The
--defaults-file=
option now requires that the filename must exist (safety fix).
(Bug#3413)
file_name
mysqld_multi now creates the log in the
directory named by datadir (from the
[mysqld] section in
my.cnf or compiled in), not in
/tmp. Thanks to Christian Hammers from
Debian Security Team for reporting this.
(CVE-2004-0388)
SHOW GRANTS with no FOR
clause or with FOR CURRENT_USER() shows the
privileges for the current session.
The improved character set support introduced in MySQL 4.1.0
for the MyISAM and HEAP
storage engines is now available for InnoDB
as well.
A name of “Primary� no longer can be specified as
an index name. (That name is reserved for the PRIMARY
KEY if the table has one.) (Bug#856)
MySQL now issues a warning when a SET or
ENUM column with duplicate values in the
list is created. (Bug#1427)
Now SQL_SELECT_LIMIT variable has no
influence on subqueries. (Bug#2600)
UNHEX() function implemented. See
Section 12.3, “String Functions�.
The mysql command-line client no longer stores in the history file multiple copies of identical queries that are run consecutively.
Multi-line statements in the mysql
command-line client now are stored in the history file as a
single line.
UUID() function implemented. Note that it
does not work with replication yet. See
Section 12.9.4, “Miscellaneous Functions�.
Prepared statements with all types of subqueries fixed.
MySQL now supports up to 64 indexes per table.
MyISAM tables now support keys up to 1000
bytes long.
MyISAM and InnoDB tables
now support index prefix lengths up to 1000 bytes long.
If you try to create a key with a key part that is too long, and it is safe to auto-truncate it to a smaller length, MySQL now does so. A warning is generated, rather than an error.
The ft_boolean_syntax variable now can be
changed while the server is running. See
Section 5.2.2, “System Variables�.
REVOKE ALL PRIVILEGES, GRANT FROM user_list
is changed to a more consistent REVOKE ALL
PRIVILEGES, GRANT OPTION FROM user_list. (Bug#2642)
Internal string-to-number conversion now supports only
SQL:2003 compatible syntax for numbers. In particular,
'0x10'+0 does not work anymore. (Actually,
it worked only on some systems before, such as Linux. It did
not work on others, such as FreeBSD or Solaris. Making these
queries OS-independent was the goal of this change.) Use
CONV() to convert hexadecimal numbers to
decimal. Example:
CONV(MID('0x10',3),16,10)+0.
mysqlhotcopy now works on NetWare.
ALTER TABLE DROP PRIMARY KEY no longer
drops the first UNIQUE index if there is no
primary index. (Bug#2361)
Added latin1_spanish_ci (Modern Spanish)
collation for the latin1 character set.
Added the ENGINE table option as a synonym
for the TYPE option for CREATE
TABLE and ALTER TABLE.
Added the --default-storage-engine server
option as a synonym for --default-table-type.
Added the storage_engine system variable as
a synonym for table_type.
Added init_connect and
init_slave system variables. The values
should be SQL statements to be executed when each client
connects or each time a slave's SQL thread starts,
respectively.
C API enhancement:
SERVER_QUERY_NO_INDEX_USED and
SERVER_QUERY_NO_GOOD_INDEX_USED flags are
now set in the server_status field of the
MYSQL structure. It is these flags that
make the query to be logged as slow if
mysqld was started with
--log-slow-queries
--log-queries-not-using-indexes.
For replication of MEMORY
(HEAP) tables: Made the master
automatically write a DELETE FROM statement
to its binary log when a MEMORY table is
opened for the first time since master's startup. This is for
the case where the slave has replicated a non-empty
MEMORY table, then the master is shut down
and restarted: the table is now empty on master; the
DELETE FROM empties it on slave too. Note
that even with this fix, between the master's restart and the
first use of the table on master, the slave still has
out-of-date data in the table. But if you use the
init-file option to populate the
MEMORY table on the master at startup, it
ensures that the failing time interval is zero. (Bug#2477)
When a session having open temporary tables terminates, the
statement automatically written to the binary log is now
DROP TEMPORARY TABLE IF EXISTS instead of
DROP TEMPORARY TABLE, for more robustness.
The MySQL server now returns an error if SET
SQL_LOG_BIN or SET SQL_LOG_UPDATE
is issued by a user without the SUPER
privilege (in previous versions it just silently ignored the
statement in this case).
Changed that when the MySQL server has binary logging disabled
(that is, no --log-bin option was used), then
no transaction binary log cache is allocated for connections.
This should save binlog_cache_size bytes of
memory (32KB by default) for every connection.
Added Binlog_cache_use and
Binlog_cache_disk_use status variables that
count the number of transactions that used transaction binary
log and that had to flush this temporary binary log to disk
instead of using only the in-memory buffer. They can be used
for tuning the binlog_cache_size system
variable.
Added option --replicate-same-server-id.
The Mac OS X Startup Item has been moved from the directory
/Library/StartupItems/MySQL to
/Library/StartupItems/MySQLCOM to avoid a
file name collision with the MySQL Startup Item installed with
Mac OS X Server. See Section 2.13.2, “Mac OS X Notes�.
Added option --to-last-log to
mysqlbinlog, for use in conjunction with
--read-from-remote-server.
The FLOAT and DECIMAL
types now obey (precision,scale) settings. (Bug#10897)
Added the mysql_set_local_infile_handler()
and mysql_set_local_infile_default() C API
functions.
Bugs fixed:
Fixed check of EXPLAIN of
UNION. (Bug#3639)
Fixed a bug in a query that used DISTINCT
and ORDER BY by column's real name, while
the column had an alias, specified in
SELECT clause. (Bug#3681)
mysqld could crash when a table was altered and used at the same time. This was a 4.1.2-specific bug. (Bug#3643).
Fixed bug when using impossible WHERE with
PROCEDURE ANALYSE(). (Bug#2238).
Fixed security problem in new authentication where password
was not checked for changed GRANT accounts
until FLUSH PRIVILEGES was executed. (Bug#3404)
Fixed crash of GROUP_CONCAT() on expression
with ORDER BY and external ORDER
BY in a query. (Bug#3752)
Fixed a bug in ALL/SOME
subqueries in case of optimization (key field present in
subquery). (Bug#3646)
Fixed a bug in SHOW GRANTS and
EXPLAIN SELECT character set conversion.
(Bug#3403)
Prepare statements parameter do not cause error message as
fields used in select list but not included in ORDER
BY list.
UNION statements did not consult
SQL_SELECT_LIMIT value when set. This is
now fixed properly, which means that this limit is applied to
the top level query, unless LIMIT for
entire UNION is used.
Fixed a bug in multiple-table UPDATE
statements that resulted in an error when one of the tables
was not updated but was used in the nested query, contained
therein.
Fixed mysql_stmt_send_long_data() behavior
on second execution of prepared statement and in case when
long data had zero length. (Bug#1664)
Fixed crash on second execution of prepared statement with
UNION. (Bug#3577)
Fixed incorrect results of aggregate functions in subquery with empty result set. (Bug#3505)
You can now call mysql_stmt_attr_set(...,
STMT_ATTR_UPDATE_MAX_LENGTH) to tell the client
library to update
MYSQL_FIELD->max_length when doing
mysql_stmt_store_result(). (Bug#1647).
Added support for unsigned integer types to prepared statement API (Bug#3035).
Fixed crash in prepared statements when subquery in the
FROM clause with parameter used. (Bug#3020)
Fixed unknown error when negative value bind to unsigned. (Bug#3223)
Fixed aggregate function in prepared statements. (Bug#3360)
Incorrect error message when wrong table used in
multiple-table DELETE statement in prepared
statements. (Bug#3411)
Requiring UPDATE privilege for tables which
are not updated in multiple-table UPDATE
statement in prepared statements.
Fixed prepared statement support for
INSERT, REPLACE,
CREATE, DELETE,
SELECT, DO,
SET and SHOW. All other
commands are prohibited via prepared statement interface. (Bug#3398, Bug#3406, Bug#2811)
Fixed a lot of bugs in GROUP_CONCAT(). (Bug#2695, Bug#3381, Bug#3319)
Added optimization that allows for prepared statements using a large number of tables or tables with a large number of columns to be re-executed significantly faster. (Bug#2050)
Fixed bug that caused execution of prepared statements to fail then table that this statement were using left table cache. This bug showed up as if this prepared statement used random garbage as column names or as server crashes. (Bug#3307)
Fixed a problem resulting from setting the
character_set_results variable to
NULL. (Bug#3296)
Fixed query cache statistics.
Fixed bug in ANALYZE TABLE on a
BDB table inside a transaction that hangs
server thread. (Bug#2342)
Fixed a symlink vulnerability in the
mysqlbug script. (Bug#3284,
CVE-2004-0381)
Fixed a bug in parallel repair (myisamchk
-p, myisam_repair_threads);
sometimes the repair process failed to repair a table. (Bug#1334)
A query that uses both UNION [DISTINCT] and
UNION ALL now works correctly. (Bug#1428)
Table default character set affects
LONGBLOB columns. (Bug#2821)
CONCAT_WS() makes the server die in case of
illegal mix of collations. (Bug#3087)
UTF8 charset breaks joins with mixed column/string constant. (Bug#2959)
Fixed DROP DATABASE to report number of
tables deleted.
Fixed bug in privilege checking of ALTER TABLE
RENAME. (Bug#3270,
CVE-2004-0835)
Fixed memory leak in the client library when statement handle
was freed on closed connection (call to
mysql_stmt_close after
mysql_close). (Bug#3073)
Fixed server segmentation faults when processing malformed prepared statements. (Bug#2795, Bug#2274)
Fixed using subqueries with OR and
AND functions. (Bug#2838)
Fixed comparison of tables/database names with
--lower_case_table_names option. (Bug#2880)
Removed try to check NULL if index built on
column where NULL is impossible in
IN subquery optimization. (Bug#2393)
Fixed incorrect parsing of subqueries in the
FROM clause. (Bug#2421)
Fixed processing of RAND() in subqueries
with static tables. (Bug#2645)
Fixed bug with quoting of table names in
mysqldump for various values of
sql_mode of server. (Bug#2591)
Fixed bug with storing values that are out of range for
DOUBLE and FLOAT
columns. (Bug#2082)
Fixed bug with compiling --with-pstack with
binutils 2.13.90. (Bug#1661)
Fixed a bug in the GRANT system. When a
password was assigned to an account at the global level and
then privileges were granted at the database level (without
specifying any password), the existing password was replaced
temporarily in memory until the next FLUSH
PRIVILEGES operation or the server was restarted.
(Bug#2953)
Fixed a bug in full-text search on multi-byte character set (such as UTF8) that appeared when a search word was shorter than a matching word from the index (for example, searching for “Uppsala� when table data contain “Uppsa*la�). (Bug#3011)
Fixed a bug that made Max_used_connections
to be less than the actual maximum number of connections in
use simultaneously.