End of Product LifecycleActive development and support for MySQL Database Server versions 3.23, 4.0, and 4.1 has ended. For details, see http://www.mysql.com/about/legal/lifecycle/#calendar. Please consider upgrading to a recent version. Further updates to the content of this manual will be minimal. All formats of this manual will continue to be available until 31 Dec 2010.
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)
Important Change: When using
a MERGE table, the definition of the table
and the underlying 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
indexes. If there is a difference in any one of the tables,
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)
If the user specified the server options
--max-connections= or
N
--table-cache=, a warning would be given in some cases that some
values were recalculated, with the result that
M
--table-cache could be assigned
greater value.
In such cases, both the warning and the increase in the
--table-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 value of --table-cache is
no longer increased automatically, and a warning is now given
only if some values had to be decreased due to operating
system limits. (Bug #21915)
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)
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)
INSERT DELAYED statements on
BLACKHOLE tables are now rejected, due to
the fact that the BLACKHOLE storage engine
does not support them. (Bug #27998)
A dependency on the Intel runtime libraries existed in the
shared- RPMs
for the IA-64 CPU of some versions of MySQL 4.1 (4.1.16,
4.1.20, and 4.1.22). This has been resolved. (Bug #18776)
xxx
Bugs Fixed
Security Fix: The requirement
of the DROP privilege for
RENAME TABLE was not enforced.
(Bug #27515, CVE-2007-2691)
Performance:
InnoDB showed substandard performance with
multiple queries running concurrently. (Bug #15815)
Performance:
InnoDB exhibited thread thrashing with more
than 50 concurrent connections under an update-intensive
workload. (Bug #22868)
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)
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 any
true 0xff 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)
MySQL Cluster: In some circumstances, shutting down the cluster could cause connected mysqld processes to crash. (Bug #25668)
MySQL 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.
The ALL STATUS command in the cluster
management client still displays status information for data
nodes only. This is by design. See
Section 15.5.2, “Commands in the MySQL Cluster Management Client”,
for more information.
(Bug #21715)
MySQL Cluster: When an API
node sent more than 1024 signals in a single batch,
NDB would process only the first
1024 of these, and then hang. (Bug #28443)
Replication: 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)
Replication: Changes to the
lc_time_names system variable
were not replicated. (Bug #22645)
Replication: 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)
Replication:
GRANT statements were not
replicated if the server was started with the
--replicate-ignore-table or
--replicate-wild-ignore-table
option. (Bug #25482)
Replication: 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)
Cluster Replication: Some queries that updated multiple tables were not backed up correctly. (Bug #27748)
Cluster API:
libndbclient.so was not versioned. (Bug
#13522)
When opening a corrupted .frm file during
a query, the server crashes. (Bug #24358)
ISNULL(DATE(NULL)) and
ISNULL(CAST(NULL AS DATE))
erroneously returned false. (Bug #23938)
The error message for error number 137 did
not report which database/table combination reported the
problem. (Bug #27173)
A return value of -1 from user-defined
handlers was not handled well and could result in conflicts
with server code. (Bug #24987)
X() IS NULL and Y() IS
NULL comparisons failed when
X() and
Y() returned
NULL. (Bug #26038)
DOUBLE values such as
20070202191048.000000 were being treated as
illegal arguments by WEEK().
(Bug #23616)
The mysqlserver.lib library on Windows had
many missing symbols. (Bug #29007)
LAST_DAY('0000-00-00') could
cause a server crash. (Bug #23653)
SET lc_time_names = permitted only exact literal values, not expression
values. (Bug #22647)
value
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)
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)
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)
If elements in a nontop-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)
mysql_fix_privilege_tables did not accept a password containing embedded space or apostrophe characters. (Bug #17700)
The BUILD/check-cpu script did not recognize Celeron processors. (Bug #20061)
Accessing a fixed record format table with a crashed key definition results in server/myisamchk segmentation fault. (Bug #24855)
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)
The MERGE storage engine could return
incorrect results when several index values that compare
equality were present in an index (for example,
'gross' and
'gross ', which are considered equal
but have different lengths). (Bug #24342)
If COMPRESS() returned
NULL, subsequent invocations of
COMPRESS() within a result set
or within a trigger also returned NULL.
(Bug #23254)
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)
Referencing an ambiguous column alias in an expression in the
ORDER BY clause of a query caused the
server to crash. (Bug #25427)
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)
Duplicate entries were not assessed correctly in a
MEMORY table with a
BTREE primary key on a
utf8 ENUM
column. (Bug #24985)
mysqldump --order-by-primary failed if the primary key name was an identifier that required quoting. (Bug #13926)
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; used
ALTER TABLE to change a table's
current AUTO_INCREMENT value; created
indexes on utf8 columns.
Re-execution of CREATE
DATABASE, CREATE
TABLE, and ALTER
TABLE statements as prepared statements also caused
incorrect results or crashes. (Bug #4968, Bug #6895, Bug
#19182, Bug #19733, Bug #22060, Bug #24879)
SHOW COLUMNS reported some
NOT NULL columns as
NULL. (Bug #22377)
STR_TO_DATE() returned
NULL if the format string contained a space
following a nonformat character. (Bug #22029)
The arguments to the ENCODE()
and the DECODE() functions were
not printed correctly, causing problems in the output of
EXPLAIN EXTENDED and in view
definitions. (Bug #23409)
Passing nested row expressions with different structures to an
IN predicate caused a server crash. (Bug
#27484)
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)
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 returned more that one row, no error was
reported. If a query required sorting by expressions
containing single-row subselects that returned more than one
row, execution of the query could cause a server crash. (Bug
#24653)
The return value from my_seek() was
ignored. (Bug #22828)
The second execution of a prepared statement from a
UNION query with ORDER
BY RAND() caused the server to crash. (Bug #27937)
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)
NOW() returned the wrong value
in statements executed at server startup with the
--init-file option. (Bug
#23240)
The fix for Bug #17212 provided correct sort order for misordered output of certain queries, but caused significant overall query performance degradation. (Results were correct (good), but returned much more slowly (bad).) The fix also affected performance of queries for which results were correct. The performance degradation has been addressed. (Bug #27531)
mysql_stmt_fetch() did an
invalid memory deallocation when used with the embedded
server. (Bug #25492)
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)
It was possible to use DATETIME
values whose year, month, and day parts were all zeros but
whose hour, minute, and second parts contained nonzero values,
an example of such an illegal
DATETIME being
'0000-00-00 11:23:45'.
This fix was reverted in MySQL 4.1.24.
(Bug #21789)
References: See also Bug #25301.
The creation of MySQL system tables was not checked for by mysql-test-run.pl. (Bug #20166)
For ODBC compatibility, MySQL supports use of WHERE
for
col_name IS NULLDATE or
DATETIME columns that are
NOT NULL, to permit 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)
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.
In addition, 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)
For BOOLEAN mode full-text
searches on nonindexed columns, NULL rows
generated by a LEFT JOIN caused incorrect
query results. (Bug #14708, Bug #25637)
Lack of validation for input and output
TIME values resulted in several
problems: SEC_TO_TIME() in some
cases did not clip large values to the
TIME range appropriately;
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)
Using CAST() to convert
DATETIME values to numeric
values did not work. (Bug #23656)
A reference to a nonexistent column in the ORDER
BY clause of an UPDATE ... ORDER
BY statement could cause a server crash. (Bug
#25126)
Selecting into variables sometimes returned incorrect wrong results. (Bug #20836)
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)
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)
The result set of a query that used WITH
ROLLUP and DISTINCT could lack
some rollup rows (rows with NULL values for
grouping attributes) if the GROUP BY list
contained constant expressions. (Bug #24856)
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)
Added support for --debugger=dbx for
mysql-test-run.pl and added support for
--debugger=devenv,
--debugger=DevEnv, and
--debugger=.
(Bug #26792)
/path/to/devenv
There was a race condition in the InnoDB
fil_flush_file_spaces() function. (Bug
#24089)
References: This bug was introduced by Bug #15653.
EXPLAIN for a query on an empty
table immediately after its creation could result in a server
crash. (Bug #28272)
MySQL failed to build on Linux/Alpha. (Bug #23256)
References: This bug was introduced by Bug #21250.
Running CHECK TABLE
concurrently with a SELECT,
INSERT or other statement on
Windows could corrupt a MyISAM table. (Bug #25712)
Some small double precision numbers (such as
1.00000001e-300) that should have been
accepted were truncated to zero. (Bug #22129)
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)
A compressed MyISAM table that became
corrupted could crash myisamchk and
possibly the MySQL Server. (Bug #23139)
The --extern option for
mysql-test-run.pl did not function
correctly. (Bug #24354)
mysql-test-run did not work correctly for RPM-based installations. (Bug #17194)
mysqltest incorrectly tried to retrieve result sets for some queries where no result set was available. (Bug #19410)
If there was insufficient memory available to mysqld, this could sometimes cause the server to hang during startup. (Bug #24751)
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.
When upgrading, it is necessary to re-create any existing
indexes on Unicode CHAR
columns of each affected table to take advantage of the fix.
See Section 2.11.4, “Rebuilding or Repairing Tables or Indexes”.
(Bug #22052)
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)
Index hints (USE INDEX, IGNORE
INDEX, FORCE INDEX) cannot be
used with FULLTEXT indexes, but were not
being ignored. (Bug #25951)
Changes to some system variables should invalidate statements in the query cache, but invalidation did not happen. (Bug #27792)
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)
The range optimizer could consume a combinatorial amount of
memory for certain classes of WHERE
clauses. (Bug #26624)
Attempts to access a MyISAM table with a
corrupt column definition caused a server crash. (Bug #24401)
The InnoDB parser sometimes did not account
for null bytes, causing spurious failure of some queries. (Bug
#25596)
Storing NULL values in spatial fields
caused excessive memory allocation and crashes on some
systems. (Bug #27164)
Optimizations that are legal only for subqueries without
tables and WHERE conditions were applied
for any subquery without tables. (Bug #24670)
mysqltest crashed with a stack overflow. (Bug #24498)
ALTER TABLE statements that
performed both RENAME TO and
{ENABLE|DISABLE} KEYS operations caused a
server crash. (Bug #24219)
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)
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)
The number of setsockopt() calls performed
for reads and writes to the network socket was reduced to
decrease system call overhead. (Bug #22943)
mysql did not check for errors when fetching data during result set printing. (Bug #22913)
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)
IN() and
CHAR() can return
NULL, but did not signal that to the query
processor, causing incorrect results for
IS NULL
operations. (Bug #17047)
For ALTER TABLE, using
ORDER BY
could cause a
server crash. Now the expressionORDER BY clause
permits only column names to be specified as sort criteria
(which was the only documented syntax, anyway). (Bug #24562)
ORDER BY values of the
DOUBLE or
DECIMAL types could change the
result returned by a query. (Bug #19690)
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)
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)
A table created with the ROW_FORMAT = FIXED
table option lost that option if an index was added or dropped
with CREATE INDEX or
DROP INDEX. (Bug #23404)
Difficult repair or optimization operations could cause an assertion failure, resulting in a server crash. (Bug #25289)
The stack size for NetWare binaries was increased to 128KB to prevent problems caused by insufficient stack size. (Bug #23504)
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)
Foreign key identifiers for InnoDB tables
could not contain certain characters. (Bug #24299)
Some long error messages were printed incorrectly. (Bug #20710)
Conversion of DATETIME values
in numeric contexts sometimes did not produce a double
(YYYYMMDDHHMMSS.uuuuuu) value. (Bug #16546)
Comparisons using row constructors could fail for rows
containing NULL values. (Bug #27704)
Through the C API, the member strings in
MYSQL_FIELD for a query that contained
expressions could return incorrect results. (Bug #21635)
Range searches on columns with an index prefix could miss records. (Bug #20732)
perror crashed on some platforms due to
failure to handle a NULL pointer. (Bug
#25344)
mysql would lose its connection to the server if its standard output was not writable. (Bug #17583)
INSERT...ON DUPLICATE KEY UPDATE could
cause Error 1032: Can't find record in ...
for inserts into an InnoDB table unique
index using key column prefixes with an underlying
utf8 string column. (Bug #13191)
In certain cases it could happen that deleting a row corrupted
an RTREE index. This affected indexes on
spatial columns. (Bug #25673)
The server was built even when configure
was run with the
--without-server option.
(Bug #23973)
References: See also Bug #32898.
ALTER TABLE
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)
Certain joins using Range checked for each
record in the query execution plan could cause the
server to crash. (Bug #24776)
The server might fail to use an appropriate index for
DELETE when ORDER
BY, LIMIT, and a nonrestricting
WHERE are present. (Bug #17711)
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)

User Comments
This release isn't available in binary form, except for paying customers, since MySQL 4.1 is in the extended support phase. See this forum post for confirmation:
http://forums.mysql.com/read.php?117,159239,192126
--df
Add your own comment.