End of Product Lifecycle. Active development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. 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 and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. 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)
Important: When using
MERGE tables the definition of the
MERGE table and the
MyISAM tables are checked each time the
tables are opened for access (including any
SELECT or INSERT
statement. Each table is compared for column order, types,
sizes and associated. If there is a difference in any one of
the tables then the statement will fail.
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)
The server now includes a timestamp in error messages that are
logged as a result of unhandled signals (such as
mysqld got signal 11 messages). (Bug#24878)
Bugs fixed:
Incompatible change: For
ENUM columns that had enumeration values
containing commas, the commas were mapped to 0xff internally.
However, this rendered the commas indistinguishable from true
0xff characters in the values. This no longer occurs. However,
the fix requires that you dump and reload any tables that have
ENUM columns containing true 0xff in their
values: Dump the tables using mysqldump
with the current server before upgrading from a version of
MySQL 4.1 older than 4.1.23 to version 4.1.23 or newer. (Bug#24660)
Incompatible change:
INSERT DELAYED statements are not supported
for MERGE tables, but the
MERGE storage engine was not rejecting such
statements, resulting in table corruption. Applications
previously using INSERT DELAYED into
MERGE table will break when upgrading to
versions with this fix. To avoid the problem, remove
DELAYED from such statements. (Bug#26464)
For MERGE tables defined on underlying
tables that contained a short VARCHAR
column (shorter than four characters), using ALTER
TABLE on at least one but not all of the underlying
tables caused the table definitions to be considered different
from that of the MERGE table, even if the
ALTER TABLE did not change the definition.
Also, when the underlying tables contained a
TINYINT or CHAR(1)
column, the MERGE storage engine
incorrectly reported that they differed from the
MERGE table in certain cases. (Bug#26881)
Incorrect results could be returned for some queries that
contained a select list expression with IN
or BETWEEN together with an ORDER
BY or GROUP BY on the same
expression using NOT IN or NOT
BETWEEN. (Bug#27532)
GRANT statements were not replicated if the
server was started with the
--replicate-ignore-table or
--replicate-wild-ignore-table option. (Bug#25482)
For MyISAM tables,
COUNT(*) could return an incorrect value if
the WHERE clause compared an indexed
TEXT column to the empty string
(''). This happened if the column contained
empty strings and also strings starting with control
characters such as tab or newline. (Bug#26231)
Duplicate entries were not assessed correctly in a
MEMORY table with a
BTREE primary key on a
utf8 ENUM column. (Bug#24985)
Storing NULL values in spatial fields
caused excessive memory allocation and crashes on some
systems. (Bug#27164)
In a MEMORY table, using a
BTREE index to scan for updatable rows
could lead to an infinite loop. (Bug#26996)
The range optimizer could cause the server to run out of memory. (Bug#26625)
Difficult repair or optimization operations could cause an assertion failure, resulting in a server crash. (Bug#25289)
DOUBLE values such as
20070202191048.000000 were being treated as
illegal arguments by WEEK(). (Bug#23616)
If a thread previously serviced a connection that was killed, excessive memory and CPU use by the thread occurred if it later serviced a connection that had to wait for a table lock. (Bug#25966)
LOAD DATA INFILE sent an okay to the client
before writing the binary log and committing the changes to
the table had finished, thus violating ACID requirements. (Bug#26050)
In certain cases it could happen that deleting a row corrupted
an RTREE index. This affected indexes on
spatial columns. (Bug#25673)
Added support for --debugger=dbx for
mysql-test-run.pl and fixed support for
--debugger=devenv,
--debugger=DevEnv, and
--debugger=.
(Bug#26792)
/path/to/devenv
X() IS NULL and Y() IS
NULL comparisons failed when X()
and Y() returned NULL.
(Bug#26038)
UNHEX() IS NULL comparisons failed when
UNHEX() returned NULL.
(Bug#26537)
A reference to a non-existent column in the ORDER
BY clause of an UPDATE ... ORDER
BY statement could cause a server crash. (Bug#25126)
The creation of MySQL system tables was not checked for by mysql-test-run.pl. (Bug#20166)
NOW() returned the wrong value in
statements executed at server startup with the
--init-file option. (Bug#23240)
For ALTER TABLE, using ORDER BY
could cause a
server crash. Now the expressionORDER BY clause
allows only column names to be specified as sort criteria
(which was the only documented syntax, anyway). (Bug#24562)
Storing values specified as hexadecimal values 64 or more bits
long into BIGINT or BIGINT
UNSIGNED columns did not raise any warning or error
if the value was out of range. (Bug#22533)
ISNULL(DATE(NULL)) and
ISNULL(CAST(NULL AS DATE)) erroneously
returned false. (Bug#23938)
If a slave server closed its relay log (for example, due to an error during log rotation), the I/O thread did not recognize this and still tried to write to the log, causing a server crash. (Bug#10798)
Foreign key identifiers for InnoDB tables
could not contain certain characters. (Bug#24299)
The number of setsockopt() calls performed
for reads and writes to the network socket was reduced to
decrease system call overhead. (Bug#22943)
ORDER BY on DOUBLE or
DECIMAL values could change the set of rows
returned by a query. (Bug#19690)
The InnoDB parser sometimes did not account
for null bytes, causing spurious failure of some queries. (Bug#25596)
perror crashed on some platforms due to
failure to handle a NULL pointer. (Bug#25344)
mysql_stmt_fetch() did an invalid memory
deallocation when used with the embedded server. (Bug#25492)
mysqld_multi and
mysqlaccess looked for option files in
/etc even if the
--sysconfdir option for
configure had been given to specify a
different directory. (Bug#24780)
The arguments of the ENCODE() and the
DECODE() functions were not printed
correctly, causing problems in the output of EXPLAIN
EXTENDED. (Bug#23409)
A return value of -1 from user-defined
handlers was not handled well and could result in conflicts
with server code. (Bug#24987)
The server might fail to use an appropriate index for
DELETE when ORDER BY,
LIMIT, and a non-restricting
WHERE are present. (Bug#17711)
For BOOLEAN mode full-text searches on
non-indexed columns, NULL rows generated by
a LEFT JOIN caused incorrect query results.
(Bug#25637; see also Bug#14708)
SHOW COLUMNS reported some NOT
NULL columns as NULL. (Bug#22377)
If an ORDER BY or GROUP
BY list included a constant expression being
optimized away and, at the same time, containing single-row
subselects that return more that one row, no error was
reported. If a query requires sorting by expressions
containing single-row subselects that return more than one
row, execution of the query may cause a server crash. (Bug#24653)
Attempts to access a MyISAM table with a
corrupt column definition caused a server crash. (Bug#24401)
Accessing a fixed record format table with a crashed key definition results in server/myisamchk segmentation fault. (Bug#24855)
When opening a corrupted .frm file during
a query, the server crashes. (Bug#24358)
If there was insufficient memory to store or update a blob
record in a MyISAM table then the table
will marked as crashed. (Bug#23196)
When updating a table that used a JOIN of
the table itself (for example, when building trees) and the
table was modified on one side of the expression, the table
would either be reported as crashed or the wrong rows in the
table would be updated. (Bug#21310)
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: The management client command
displayed the message node_id STATUSNode
when node_id: not connectednode_id was not the node ID of
a data node. (Bug#21715)
The ALL STATUS command in the cluster
management client still displays status information for data
nodes only. This is by design. See
Section 15.7.2, “Commands in the MySQL Cluster Management Client”, for
more information.
NDB Cluster (Cluster APIs):
libndbclient.so was not versioned. (Bug#13522)
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)

User Comments
Add your own comment.