| 
|
Appendix D. MySQL Change History
This appendix lists the changes from version to version in the MySQL
source code through the latest version of MySQL 5.0,
which is currently MySQL 5.0.19. Starting with MySQL 5.0,
we began offering a new version of the Manual for each new series of
MySQL releases (5.0, 5.1, and so on). For information about changes
in previous release series of the MySQL database software, see the
corresponding version of this Manual. For information about legacy
versions of the MySQL software through the 4.1 series, see
MySQL 3.23, 4.0, 4.1 Reference Manual.
We update this section as we add new features in the
5.0 series, so that everybody can follow the
development process.
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.
D.1. Changes in release 5.0.x (Production)
The following changelog shows what has been done in the 5.0 tree:
Basic support for read-only server side cursors. For information
about using cursors within stored routines, see
Section 17.2.9, “Cursors”. For information about using cursors
from within the C API, see
Section 22.2.7.3, “mysql_stmt_attr_set()”.
Basic support for (updatable) views. See, for example,
Section 19.2, “CREATE VIEW Syntax”.
Basic support for stored procedures and functions (SQL:2003
style). See Chapter 17, Stored Procedures and Functions.
Initial support for rudimentary triggers.
Added SELECT INTO
list_of_vars, which can be
of mixed (that is, global and local) types. See
Section 17.2.7.3, “SELECT ... INTO Statement”.
Removed the update log. It is fully replaced by the binary log.
If the MySQL server is started with
--log-update, it is translated to
--log-bin (or ignored if the server is
explicitly started with --log-bin), and a
warning message is written to the error log. Setting
SQL_LOG_UPDATE silently sets
SQL_LOG_BIN instead (or do nothing if the
server is explicitly started with --log-bin).
Support for the ISAM storage engine has been
removed. If you have ISAM tables, you should
convert them before upgrading. See
Section 2.10.2, “Upgrading from MySQL 4.1 to 5.0”.
Support for RAID options in
MyISAM tables has been removed. If you have
tables that use these options, you should convert them before
upgrading. See Section 2.10.2, “Upgrading from MySQL 4.1 to 5.0”.
User variable names are now case insensitive: If you do
SET @a=10; then SELECT @A;
now returns 10. Case sensitivity of a
variable's value depends on the collation of the value.
Strict mode, which in essence means that you get an error
instead of a warning when inserting an incorrect value into a
column. See Section 5.2.5, “The Server SQL Mode”.
VARCHAR and VARBINARY
columns remember end space. A VARCHAR() or
VARBINARY column can contain up to 65,535
characters or bytes, respectively.
MEMORY (HEAP) tables can
have VARCHAR() columns.
When using a constant string or a function that generates a
string result in CREATE ... SELECT, MySQL
creates the result field based on the maximum length of the
string or expression:
For a full list of changes, please refer to the changelog sections
for each individual 5.0.x release.
D.1.1. Changes in release 5.0.20 (Not yet released)
Functionality added or changed:
Windows builds now have SSL support enabled. (Bug#18195)
The syntax for CREATE PROCEDURE and
CREATE FUNCTION statements now includes a
DEFINER clause. The
DEFINER value specifies the security
context to be used when checking access privileges at routine
invocation time if the routine has the SQL SECURITY
DEFINER characteristic. See
Section 17.2.1, “CREATE PROCEDURE and CREATE FUNCTION Syntax”, for more information.
When mysqldump is invoked with the
--routines option, it now dumps the
DEFINER value for stored routines.
Security Improvement: Checks for permissions on database
operations were performed in a case-insensitive manner,
meaning that a user with permissions on database
MYDATABASE also had permissions on database
myDataBase. (Bug #17279)
Bugs fixed:
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)
Stored procedures that call UDFs and pass local string
variables caused server crashes. (Bug #17261)
Connecting to a server with a UCS2 default character set with
a client using a non-UCS2 character set crashed the server.
(Bug #18004)
Loading of UDFs in a statically linked MySQL caused a server
crash. UDF loading is now blocked if the MySQL server is
statically linked. (Bug #11835)
Views that incorporate tables from the INFORMATION_SCHEMA
resulted in a server crash when queried. (Bug #18224)
A SELECT * query on an INFORMATION_SCHEMA
table by a user with limited privileges resulted in a server
crash. (Bug #18113)
Attempting to access an InnoDB table after
starting the server with --skip-innodb caused
a server crash. (Bug #14575)
InnoDB used table locks (not row locks)
within stored functions. (Bug #18077)
Replication slaves could not replicate triggers from older
servers that included no DEFINER clause in
the trigger definition. Now the trigger executes with the
privileges of the invoker (which on the slave is the slave SQL
thread). (Bug #16266)
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)
The DEFINER value for stored routines was
not replicated. (Bug #15963)
Use of stored functions with DISTINCT or
GROUP BY can produce incorrect results when
ORDER BY is also used. (Bug #13575)
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)
A LEFT JOIN with a UNION
that selects literal values could crash the server. (Bug
#17366)
Large file support did not work in AIX server binaries. (Bug
#10776)
Updating a view that filters certain rows to set a filtered
out row to be included in the table caused infinite loop. For
example, if the view has a WHERE clause of salary >
100 then issuing an UPDATE statement of SET
salary = 200 WHERE id = 10, caused an infinite loop.
(Bug #17726)
Certain combinations of joins with mixed ON
and USING clauses caused unknown column
errors. (Bug #15229)
NDB Cluster: Inserting and deleting
BLOB column values while a backup was in
process could cause the loss of an ndbd
node. (Bug #14028)
If the server was started with the
--skip-grant-tables option, it was impossible
to create a trigger or a view without explicitly specifying a
DEFINER clause. (Bug #16777)
COUNT(DISTINCT col1,
col2) and
COUNT(DISTINCT
CONCAT(col1,
col2)) operations
produced different results if one of the columns was an
indexed DECIMAL column. (Bug #15745)
The server displayed garbage in the error message warning
about bad assignments to DECIMAL columns or
routine variables. (Bug #15480)
The server would execute stored routines that had a
non-existent definer. (Bug #13198)
For FEDERATED tables, a
SELECT statement with an ORDER
BY clause did not return rows in the proper order.
(Bug #17377)
The FORMAT() function returned an incorrect
result when the client's
character_set_connection value was
utf8. (Bug #16678)
NDB Cluster: Some query cache statistics
were not always correctly reported for Cluster tables. (Bug
#16795)
Updating the value of a Unicode VARCHAR
column with the result returned by a stored function would
cause the insertion of ASCII characters into the column
instead of Unicode, even where the function's return type was
also declared as Unicode. (Bug #17615)
D.1.2. Changes in release 5.0.19 (04 March 2006)
Functionality added or changed:
Incompatible change: The
InnoDB storage engine no longer ignores
trailing spaces when comparing BINARY or
VARBINARY column values. This means that
(for example) the binary values 'a' and
'a ' are now regarded as
unequal any time they are compared, as
they are in MyISAM tables. (Bug #14189)
See Section 11.4.2, “The BINARY and VARBINARY Types” for more information
about the BINARY and
VARBINARY types.
The result type of the GROUP_CONCAT()
function is now VARCHAR only if the the
value of the group_concat_max_len system
variable is less than or equal to 512. Otherwise, this
funciton returns a BLOB. (Bug #14169)
Added the mysql_upgrade program that checks
all tables for incompatibilities with the current version of
MySQL Server and repairs them if necessary. This program
should be run for each MySQL upgrade (rather than
mysql_fix_privilege_tables). See
Section 5.6.2, “mysql_upgrade — Check Tables for MySQL Upgrade”.
Added the FOR UPGRADE option for the
CHECK TABLE statement. This option checks
whether tables are incompatible with the current version of
MySQL Server. Also added the --check-upgrade
to mysqlcheck that invokes CHECK
TABLE with the FOR UPGRADE
option.
mysql no longer terminates data value
display when it encounters a NUL byte. Instead, it displays
NUL bytes as spaces. (Bug #16859)
Added the --wait-timeout option to
mysqlmanager to allow configuration of the
timeout for dropping an inactive connection, and increased the
default timeout from 30 seconds to 28,800 seconds (8 hours).
(Bug #12674)
A number of performance issues were resolved that had
previously been encountered when using statements that
repeatedly invoked stored functions. For example, calling
BENCHMARK() using a stored function
executed much more slowly than when invoking it with inline
code that accomplished the same task. In most cases the two
should now execute with approximately the same speed. (Bug
#15014, Bug #14946)
libmysqlclient now uses versioned symbols
with GNU ld. (Bug #3074)
NDB Cluster: More descriptive warnings are
now issued when inappropriate logging parameters are set in
config.ini. (Formerly, the warning issued
was simply Could not add logfile
destination.) (Bug #11331)
Added the --port-open-timeout option to
mysqld to control how many seconds the
server should wait for the TCP/IP port to become free if it
cannot be opened. (Bug #15591)
Repeated invocation of my_init() and
my_end() caused corruption of character set
data and connection failure. (Bug #6536)
Two new Hungarian collations are included:
utf8_hungarian_ci and
ucs2_hungarian_ci. These support the
correct sort order for Hungarian vowels. However, they do not
support the correct order for sorting Hungarian consonant
contractions; this issue will be fixed in a future release.
Wording of error 1329 changed to No data - zero
rows fetched, selected, or processed. (Bug #15206)
The INFORMATION_SCHEMA now skips data
contained in unlistable/unreadable directories rather than
returning an error. (Bug #15851)
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)
The message for error 1109 changed from Unknown
table ... in order clause to Unknown
table ... in field list. (Bug #15091)
The mysqltest utility now converts all
CR/LF combinations to LF
to allow test cases intended for Windows to work properly on
UNIX-like systems. (Bug #13809)
The mysql_ping function will now retry if
the reconnect flag is set and error
CR_SERVER_LOST is encountered during the
first attempt to ping the server. (Bug #14057)
mysqldump now surrounds the
DEFINER, SQL SECURITY
DEFINER and WITH CHECK OPTION
clauses of a CREATE VIEW statement with
"not in version" comments to prevent errors in earlier
versions of MySQL. (Bug #14871)
New charset command added to
mysql command-line client. By typing
charset name or
\C name (such as
\C UTF8), the client character set can be
changed without reconnecting. (Bug #16217)
Client API will now attempt reconnect on TCP/IP if the
reconnect flag is set, as is the case with
sockets. (Bug #2845)
Bugs fixed:
Cursors in stored routines could cause a server crash. (Bug
#16887)
Setting the myisam_repair_threads system
variable to a value larger than 1 could cause corruption of
large MyISAM tables. (Bug #11527)
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. (Bug #14169)
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)
type_decimal failed with the prepared
statement protocol. (Bug #17826)
The MySQL server could crash with out of memory errors when
performing aggregate functions on a DECIMAL
column. (Bug #17602)
A stored procedure failed to return data the first time it was
called per connection. (Bug #17476)
Using DROP FUNCTION IF EXISTS
func_name to drop a
user-defined function caused a server crash if the server was
running with the --skip-grant-tables option.
(Bug #17595)
Using ALTER TABLE to increase the length of
a BINARY(M)
column caused column values to be padded with spaces rather
than 0x00 bytes. (Bug #16857)
A large BIGINT value specified in a
WHERE clause could be treated differently
depending on whether it is specified as a quoted string. (For
example, WHERE bigint_col =
17666000000000000000 versus WHERE
bigint_col = '17666000000000000000'). (Bug #9088)
A natural join between INFORMATION_SCHEMA
tables failed. (Bug #17523)
A memory leak caused warnings on slaves for certain statements
that executed without warning on the master. (Bug #16175)
The embedded server did not allow binding of columns to the
MYSQL_TYPE_VAR_STRING data type in prepared
statements. (Bug #12070)
The embedded server failed various tests in the automated test
suite. (Bug #9630, Bug #9631, Bug #9633, Bug #10801, Bug
#10911, Bug #10924, Bug #10925, Bug #10926, Bug #10930, Bug
#15433)
Instance Manager erroneously accepted a list of instance
identifiers for the START INSTANCE and
STOP INSTANCE commands (should accept only
a single identifier). (Bug #12813)
For a transaction that used MyISAM and
InnoDB tables, interruption of the
transaction due to a dropped connection on a master server
caused slaves to lose synchrony. (Bug #16559)
SELECT with GROUP BY on
a view can cause a server crash. (Bug #16382)
If the query optimizer transformed a GROUP
BY clause in a subquery, it did not also transform
the HAVING clause if there was one,
producing incorrect results. (Bug #16603)
SUBSTRING_INDEX() could yield inconsistent
results when applied with the same arguments to consecutive
rows in a query. (Bug #14676)
The parser allowed CREATE AGGREGATE
FUNCTION for creating stored functions, even though
AGGREGATE does not apply. (It is used only
for CREATE FUNCTION only when creating
user-defined functions.) (Bug #16896)
Data truncations on non-UNIQUE indexes could crash InnoDB when
using multi-byte character sets. (Bug #17530)
Triggers created without BEGIN and
END clauses could not be properly restored
from a mysqldump file. (Bug #16878)
The RENAME TABLE statement did not move
triggers to the new table. (Bug #13525)
Clients compiled from source with the
--without-readline did not save command
history from session to session. (Bug #16557)
Stored routines that contained only a single statement were
not written properly to the dumpfile when using
mysqldump. (Bug #14857)
For certain MERGE tables, the optimizer
wrongly assumed that using
index_merge/intersection was too expensive.
(Bug #17314)
Executing a SHOW CREATE VIEW query of an
invalid view caused the mysql_next_result
function of libMySQL.dll to hang. (Bug
#15943)
BIT fields were not properly handled when
using row-based replication. (Bug #13418)
Issuing GRANT EXECUTE on a procedure would
display any warnings related to the creation of the procedure.
(Bug #7787)
NDB Cluster:
ndb_delete_all would run out of memory on
tables containing BLOB columns. (Bug
#16693)
NDB Cluster: UNIQUE keys
in Cluster tables were limited to 225 bytes in length. (Bug
#15918)
In a highly concurrent environment, a server crash or deadlock
could result from execution of a statement that used stored
functions or activated triggers coincident with alteration of
the tables used by these functions or triggers. (Bug #16593)
Previously, a stored function invocation was written to the
binary log as DO
func_name() if the
invocation changes data and occurs within a non-logged
statement, or if the function invokes a stored procedure that
produces an error. These invocations now are logged as
SELECT
func_name() instead for
better control over error code checking (slave servers could
stop due to detecting a different error than occurred on the
master). (Bug #14769)
CHECKSUM TABLE returned different values on
MyISAM table depending on whether the QUICK
or EXTENDED options were used. (Bug #8841)
MySQL server dropped client connection for certain SELECT
statements against views defined that used
MERGE algorithm. (Bug #16260)
A call to the IF() function using decimal
arguments could return incorrect results. (Bug #16272)
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)
Using GROUP BY on column used in
WHERE clause could cause empty set to be
returned. (Bug #16203)
For a MySQL 5.0 server, using MySQL 4.1 tables in queries with
a GROUP BY clause could result in buffer
overrun or a server crash. (Bug #16752)
SET sql_mode =
N, where
N > 31, did not work properly.
(Bug #13897)
NDB Cluster: Cluster log file paths were
truncated to 128 characters. They may now be as long as
MAX_PATH (the maximum path length permitted
by the operating system). (Bug #17411)
The mysql_stmt_store_result() C API
function could not be used for a prepared statement if a
cursor had been opened for the statement. (Bug #14013)
The mysql_stmt_sqlstate() C API function
incorrectly returned an empty string rather than
'00000' when no error occurred. (Bug
#16143)
Using the TRUNCATE() function with a
negative number for the second argument on a
BIGINT column returned incorrect results.
(Bug #8461)
Instance Manager searched wrong location for password file on
some platforms. (Bug #16499)
NDB Cluster: Following multiple forced
shutdowns and restarts of data nodes, DROP
DATABASE could fail. (Bug #17325)
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)
The error message returned by perror
--ndb was prefixed with
OS error code: instead of
NDB error code:. (Bug #17235)
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)
The DECIMAL data type was not being handled
correctly with prepared statements. (Bug #16511)
The SELECT privilege was required for
triggers that performed no selects. (Bug #15196)
The UPDATE privilege was required for
triggers that performed no updates. (Bug #15166)
CAST(... AS TIME) operations returned
different results when using versus not using
prepared-statement protocol. (Bug #15805)
Improper memory handling for stored routine variables could
cause memory overruns and binary log corruption. (Bug #15588)
Killing a long-running query containing a subquery could cause
a server crash. (Bug #14851)
A FULLTEXT query in a prepared statement
could result in unexpected behavior. (Bug #14496)
A RETURN statement within a trigger caused
a server crash. RETURN now is disallowed
within triggers. To exit immediately, use
LEAVE. (Bug #16829)
STR_TO_DATE(1,NULL) caused a server crash.
(Bug #15828)
An invalid stored routine could not be dropped. (Bug #16303)
When evaluation of the test in a CASE
failed in a stored procedure that contained a
CONTINUE handler, execution resumed at the
beginning of the CASE statement instead of at the end. (Bug
#16568)
An INSERT statement in a stored procedure
corrupted the binary log. (Bug #16621)
When MyODBC or any other client called
my_init()/my_end()
several times, it caused corruption of charset data stored in
once_mem_pool. (Bug #11892)
When multiple handlers are created for the same MySQL error
number within nested blocks, the outermost handler took
precedence. (Bug #15011)
Certain LEAVE statements in stored
procedures were not properly optimized. (Bug #15737)
Setting InnoDB path settings to an empty string caused InnoDB
storage engine to crash upon server startup. (Bug #16157)
InnoDB used full explicit table locks in trigger processing.
(Bug #16229)
Server crash when dropping InnoDB constraints named
TABLENAME_ibfk_0.
(Bug #16387)
Corrected race condition when dropping the adaptive hash index
for a B-tree page in InnoDB. (Bug #16582)
MYSQL_OPT_RECONNECT option was modified by
calls to the mysql_real_connect()
function. (Bug #15719)
InnoDB: After upgrading an
InnoDB table having a VARCHAR
BINARY column created in MySQL 4.0 to MySQL 5.0,
update operations on the table would cause the server to
crash. (Bug #16298)
Trying to compile the server on Windows generated a stack
overflow warning due to a recursive definition of the internal
Field_date::store() method. (Bug #15634)
The use of LOAD INDEX within a stored
routine was permitted and caused the server to crash.
Note: LOAD
INDEX statements within stored routines
are not supported, and now yield an error
if attempted. This behavior is intended. (Bug #14270)
The mysqlbinlog utility did not output
DELIMITER statements, causing syntax errors
for stored routine creation statements. (Bug #11312)
NDB Cluster returned incorrect Can't find
file error for OS error 24, changed to Too
many open files. (Bug #15020)
Performing a RENAME TABLE on an InnoDB
table when the server is started with the
--innodb-file-per-table and the data
directory is a symlink caused a server crash. (Bug #15991)
The mysql_stmt_attr_get function returned
an unsigned int instead of a boolean for
STMT_ATTR_UPDATE_MAX_LENGTH. (Bug #16144)
Multi-byte path names for LOAD DATA and
SELECT ... INTO OUTFILE caused errors.
Added the character_set_filesystem system
variable, which controls the interpretation of string literals
that refer to filenames. (Bug #12448)
Certain subqueries where the inner query is the result of a
aggregate function would return different results on MySQL 5.0
than on MySQL 4.1. (Bug #15347)
Attempts to create FULLTEXT indexes on VARCHAR columns larger
than 1000 bytes resulted in error. (Bug #13835)
Characters in the gb2312 and
euckr character sets which did not have
Unicode mappings were truncated. (Bug #15377)
Certain nested LEFT JOIN operations were not properly
optimized. (Bug #16393)
GRANT statements specifying schema names
that included underscore characters (i.e.
my_schema) did not match if the underscore
was escaped in the GRANT statement (i.e.
GRANT ALL ON `my\_schema` ...). (Bug
#14834)
Running out of diskspace in the location specified by the
tmpdir option resulted in incorrect error
message. (Bug #14634)
Test suite sp test left behind tables when
the test failed that could cause future tests to fail. (Bug
#15866)
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)
A SELECT query which contained a
GROUP_CONCAT() and an ORDER
BY clause against the
INFORMATION_SCHEMA resulted in an empty
result set. (Bug #15307)
The --replicate-do and
--replicate-ignore options were not being
enforced on multiple-table statements. (Bug #15699, Bug
#16487)
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)
The server would crash when the size of an
ARCHIVE table grew beyond 2GB. (Bug #15787)
Created a user function with an empty string (that is,
CREATE FUNCTION ''()), was accepted by the
server. Following this, calling SHOW FUNCTION
STATUS would cause the server to crash. (Bug #15658)
In some cases the query optimizer did not properly perform
multiple joins where inner joins followed left joins,
resulting in corrupted result sets. (Bug #15633)
The absence of a table in the left part of a left or right
join was not checked prior to name resolution, which resulted
in a server crash. (Bug #15538)
NDBCluster: A bitfield whose offset and
length totaled 32 would crash the cluster. (Bug #16125)
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)
NDBCluster: The
ndb_autodiscover test failed sporadically
due to a node not being permitted to connect to the cluster.
(Bug #15619)
NDBCluster: When running more than one
management process in a cluster:
ndb_mgm -c
host:port
-e "node_id stop"
would stop a management process running only on the same
system on which the command was issued.
ndb_mgm -e "shutdown" failed to shut
down any management processes at all.
(Bug #12045, Bug #12124)
The contents of fill_help_tables.sql
could not be loaded in strict SQL mode. (Bug #15760)
fill_help_tables.sql was not included in
binary distributions for several platforms. (Bug #15759)
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)
A COMMIT statement followed by a
ALTER TABLE statement on a BDB table caused
server crash. (Bug #14212)
A DELETE statement involving a
LEFT JOIN and an IS NULL
test on the right-hand table of the join crashed the server
when the innodb_locks_unsafe_for_binlog
option was enabled. (Bug #15650)
Performing an ORDER BY on an indexed
ENUM column returned error. (Bug #15308)
The NOT FOUND condition handler for stored
procedures did not distinguish between a NOT
FOUND condition and an exception or warning. (Bug
#15231)
A stored procedure with an undefined variable and an exception
handler would hang the client when called. (Bug #14498)
Subselect could return wrong results when records cache and
grouping was involved. (Bug #15347)
Temporary table aliasing did not work inside stored functions.
(Bug #12198)
MIN() and MAX()
operations were not optimized for views. (Bug #16016)
Using an aggregate function as the argument for a HAVING
clause would result in the aggregate function always returning
FALSE. (Bug #14274)
Parallel builds occasionally failed on Solaris. (Bug #16282)
The FORCE INDEX keyword in a query would
prevent an index merge from being used where an index merge
would normally be chosen by the optimizer. (Bug #16166)
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)
An attempt to open a table that requires a disabled storage
engine could cause a server crash. (Bug #15185)
Issuing a DROP USER command could cause
some users to encounter a
hostname is not allowed to
connect to this MySQL server error. (Bug #15775)
Setting innodb_log_file_size to a value
greater than 4G crashed the server. (Bug #15108)
A SELECT of a stored function that
references the INFORMATION_SCHEMA could
crash the server. (Bug #15533)
Tarball install package was missing a proper
fill_help_tables.sql file. (Bug #15151)
D.1.3. Changes in release 5.0.18 (21 December 2005)
Functionality added or changed:
It is now possible to build the server such that
MyISAM tables can support up to 128 keys
rather than the standard 64. This can be done by configuring
the build using the option
--with-max-indexes=N,
where N≤128 is the maximum
number of indexes to permit per table. (Bug #10932)
The server treats stored routine parameters and local
variables (and stored function return values) according to
standard SQL. Previously, parameters, variables, and return
values were treated as items in expressions and were subject
to automatic (silent) conversion and truncation. Now the data
type is observed. Data type conversion and overflow problems
that occur in assignments result in warnings, or errors in
strict mode. The CHARACTER SET clause for
character data type declarations is used. Parameters,
variables, and return values must be scalars; it is no longer
possible to assign a row value. Also, stored functions execute
using the sql_mode value in force at
function creation time rather than ignoring it. For more
information, see Section 17.2.1, “CREATE PROCEDURE and CREATE FUNCTION Syntax”. (Bug
#8702, Bug #8768, Bug #8769, Bug #9078, Bug #9572, Bug #12903,
Bug #13705, Bug #13808, Bug #13909, Bug #14161, Bug #15148)
Bugs fixed:
API function
mysql_stmt_prepare returned wrong field
length for TEXT columns. (Bug #15613)
The output of mysqldump --triggers did not
contain the DEFINER clause in dumped
trigger definitions. (Bug #15110)
The output of SHOW TRIGGERS contained
extraneous whitespace. (Bug #15103)
Creating a trigger caused a server crash if the table or
trigger database was not known because no default database had
been selected. (Bug #14863)
SHOW [FULL] COLUMNS and SHOW INDEX
FROM did not function with temporary tables. (Bug
#14271, Bug #14387, Bug #15224)
The INFORMATION_SCHEMA.COLUMNS table did not report the size
of BINARY or VARBINARY columns. (Bug #14271)
The server would not compile under Cygwin. (Bug #13640)
DESCRIBE did not function with temporary
tables. (Bug #12770)
Reversing the order of operands in a WHERE
clause testing a simple equality (such as WHERE
t1.col1 = t2.col2) would produce different output
from EXPLAIN. (Bug #15106)
Column aliases were displayed incorrectly in a
SELECT from a view following an update to a
base table of the view. (Bug #14861)
Set functions could not be aggregated in outer subqueries.
(Bug #12762)
When a connection using yaSSL was aborted, the server would
continue to try to read the closed socket, and the thread
continued to appear in the output of SHOW
PROCESSLIST. Note that this issue did not affect
secure connection attempts using OpenSSL. (Bug #15772)
InnoDB: Having two tables in a parent-child
relationship enforced by a foreign key where one table used
ROW_FORMAT=COMPACT and the other used
ROW_FORMAT=REDUNDANT could result in a
MySQL server crash. Note that this problem did not exist prior
to MySQL 5.0.3, when the compact row format for
InnoDB was introduced. (Bug #15550)
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)
A left join on a column that having a NULL
value could cause the server to crash. (Bug #15268)
A replication slave server could sometimes crash on a
BEFORE UPDATE trigger if the
UPDATE query was not executed in the same
database as the table with the trigger. (Bug #14614)
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: 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 transaction record to be released
prematurely. (Bug #15685)
NDB Cluster: The
ndb_read_multi_range.test script failed to
drop a table, causing the test to fail. (Bug #15675) (See also
Bug #15401.)
NDB Cluster: A node which failed during
cluster startup was sometimes not removed from the internal
list of active nodes. (Bug #15587)
Resolution of the argument to the VALUES()
function to a variable inside a stored routine caused a server
crash. The argument must be a table column. (Bug #15441)
D.1.4. Changes in release 5.0.17 (14 December 2005)
Functionality added or changed:
The original Linux RPM packages (5.0.17-0) had an issue with a
zlib dependency that would result in an
error during an install or upgrade. They were replaced by new
binaries, 5.0.17-1. (Bug #15223) Here is a list of the new RPM
binaries:
MySQL-{Max,client,devel,server,shared,ndb*}-5.0.17-1.i386.rpm
MySQL-*-standard-5.0.17-1.rhel3.i386.rpm,
MySQL-*-standard-5.0.17-1.rhel3.ia64.rpm,
MySQL-*-standard-5.0.17-1.rhel3.x86_64.rpm
MySQL-*-pro-5.0.17-1.rhel3.i386.rpm,
MySQL-*-pro-5.0.17-1.rhel3.ia64.rpm,
MySQL-*-pro-5.0.17-1.rhel3.x86_64.rpm
MySQL-*-pro-gpl-5.0.17-1.rhel3.i386.rpm,
MySQL-*-pro-gpl-5.0.17-1.rhel3.ia64.rpm,
MySQL-*-pro-gpl-5.0.17-1.rhel3.x86_64.rpm
The syntax for CREATE TRIGGER now includes
a DEFINER clause for specifying which
access privileges to check at trigger invocation time. See
Section 18.1, “CREATE TRIGGER Syntax”, for more information.
Known issue: If you attempt
to replicate from a master server older than MySQL 5.0.17 to a
slave running MySQL 5.0.17 through 5.0.19, replication of
CREATE TRIGGER statements fails on the
slave with a Definer not fully qualified
error. A workaround is to create triggers on the master using
a version-specific comment embedded in each CREATE
TRIGGER statement:
CREATE /*!50017 DEFINER = 'root'@'localhost' */ TRIGGER ... ;
CREATE TRIGGER statements written this way
will replicate to newer slaves, which pick up the
DEFINER clause from the comment and execute
successfully. (Bug #16266)
Added a DEFINER column to the
INFORMATION_SCHEMA.TRIGGERS table.
Invoking a stored function or trigger creates a new savepoint
level. When the function or trigger finishes, the previous
savepoint level is restored. (See Bug #13825 for more
information.)
Recursion is allowed in stored procedures. Recursive stored
functions and triggers still are disallowed. (Bug #10100)
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)
Bugs fixed:
RPM packages had an incorrect zlib
dependency. (Bug #15223)
NDB Cluster: REPLACE
failed when attempting to update a primary key value in a
Cluster table. (Bug #14007)
make failed when attempting to build MySQL
in different directory than source. (Bug #11827)
Corrected an error-handling problem within stored routines on
64-bit platforms. (Bug #15630)
Slave SQL thread cleanup was not handled properly on Mac OS X
when a statement was killed, resulting in a slave crash. (Bug
#15623, Bug #15668)
Symbolic links did not function properly on Windows platforms.
(Bug #14960, Bug #14310)
mysqld would not start on Windows 9X
operating systems including Windows Me. (Bug #15209)
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)
A bug in mysql-test/t/mysqltest.test
caused that test to fail. (Bug #15605)
The CREATE test case in
mysql-test-run.pl failed on AIX and SCO.
(Bug #15607)
NDB Cluster: Creating a table with packed
keys failed silently. NDB now supports the
PACK_KEYS option to CREATE
TABLE correctly. (Bug #14514)
NDB Cluster: Using ORDER BY
primary_key_column when
selecting from a table having the primary key on a
VARCHAR column caused a forced shutdown of
the cluster. (Bug #14828, Bug #15240, Bug #15682, Bug #15517)
NDB Cluster: Under certain circumstances,
when mysqld connects to a cluster
management server, the connection would fail before a node ID
could be allocated. (Bug #15215)
NDB Cluster: There was a small window for a
node failure to occur during a backup without an error being
reported. (Bug #15425)
mysql --help was missing a newline after
the version string when the bundled
readline library was not used. (Bug #15097)
Implicit versus explicit conversion of float to integer (such
as inserting a float value into an integer column versus using
CAST(... AS UNSIGNED before inserting the
value) could produce different results. Implicit and explicit
typecasts now are done the same way, with a value equal to the
nearest integer according to the prevailing rounding mode.
(Bug #12956)
GROUP BY on a view column did not correctly
account for the possibility that the column could contain
NULL values. (Bug #14850)
ANALYZE TABLE did not properly update table
statistics for a MyISAM table with a
FULLTEXT index containing stopwords, so a
subsequent ANALYZE TABLE would not
recognize the table as having already been analyzed. (Bug
#14902)
The maximum value of MAX_ROWS was handled
incorrectly on 64-bit systems. (Bug #14155)
NDB Cluster: A forced cluster shutdown
occurred when the management daemon was restarted with a
changed config.ini file that added an
API/SQL node. (Bug #15512)
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)
A statement that produced a warning, when fetched via
mysql_stmt_fetch(), did not produce a
warning count according to
mysql_warning_count(). (Bug #15510)
Manual manipulation of the mysql.proc table
could cause a server crash. This should not happen, but it is
also not supported that the server will notice such changes.
(Bug #14233)
Revised table locking to allow proper assessment of view
security. (Bug #11555)
Within a stored procedure, inserting with INSERT ...
SELECT into a table with an
AUTO_INCREMENT column did not generate the
correct sequence number. (Bug #14304)
SELECT queries that began with an opening
parenthesis were not being placed in the query cache. (Bug
#14652)
Space truncation was being ignored when inserting into
BINARY or VARBINARY
columns. Now space truncation results in a warning, or an
error in strict mode. (Bug #14299)
The database-changing code for stored routine handling caused
an error-handling problem resulting in a server crash. (Bug
#15392)
Selecting from a view processed with the temptable algorithm
caused a server crash if the query cache was enabled. (Bug
#15119)
REPAIR TABLES, BACKUP
TABLES, RESTORE TABLES within a
stored procedure caused a server crash. (Bug #13012)
Creating a view that referenced a stored function that
selected from a view caused a crash upon selection from the
view. (Bug #15096)
ALTER TABLE ... SET DEFAULT had no effect.
(Bug #14693)
Creating a view within a stored procedure could result in an
out of memory error or a server crash. (Bug #14885)
InnoDB: A race condition allowed two
threads to drop a hash index simultaneously. (Bug #14747)
mysqlhotcopy tried to copy
INFORMATION_SCHEMA tables. (Bug #14610)
CHAR(... USING ...) and
CONVERT(CHAR(...) USING ...), though
logically equivalent, could produce different results. (Bug
#14146)
The value of
INFORMATION_SCHEMA.TABLES.TABLE_TYPE
sometimes was reported as empty. (Bug #14476)
InnoDB: Activity on an
InnoDB table caused execution time for
SHOW CREATE TABLE for the table to
increase. (Bug #13762)
DELETE from CSV tables
reported an incorrect rows-affected value. (Bug #13406)
The server crashed if compiled without any transactional
storage engines. (Bug #15047)
Declaring a stored routine variable to have a
DEFAULT value that referred to a variable
of the same name caused a server crash. (For example:
DECLARE x INT DEFAULT x) Now the
DEFAULT variable is interpreted as
referring to a variable in an outer scope, if there is one.
(Bug #14376)
Perform character set conversion of constant values whenever
possible without data loss. (Bug #10446)
mysql ignored the
MYSQL_TCP_PORT environment variable. (Bug
#5792)
ROW_COUNT() returned an incorrect result
after EXECUTE of a prepared statement. (Bug
#14956)
A UNION of DECIMAL
columns could produce incorrect results. (Bug #14216)
Queries that select records based on comparisons to a set of
column could crash the server if there was one index covering
the columns, and a set of other non-covering indexes that
taken together cover the columns. (Bug #15204)
When using an aggregate function to select from a table that
has a multiple-column primary key, adding ORDER
BY to the query could produce an incorrect result.
(Bug #14920)
SHOW CREATE TABLE for a view could fail if
the client had locked the view. (Bug #14726)
For binary string data types, mysqldump
--hex-blob produced an illegal output value of
0x rather than ''. (Bug
#13318)
Some comparisons for the IN() operator were
inconsistent with equivalent comparisons for the
= operator. (Bug #12612)
In a stored procedure, continuing (via a condition handler)
after a failed variable initialization caused a server crash.
(Bug #14643)
Within a stored procedure, exception handling for
UPDATE statements that caused a
duplicate-key error caused a Packets out of
order error for the following statement. (Bug
#13729)
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)
Selecting from a view used filesort
retrieval when faster retrieval was possible. (Bug #14816)
Warnings from a previous command were not being reset when
fetching from a cursor. (Bug #13524)
RESET MASTER failed to delete log files on
Windows. (Bug #13377)
Using ORDER BY on a column from a view,
when also selecting the column normally, and via an alias,
caused a mistaken Column 'x' in order clause is
ambiguous error. (Bug #14662)
Invoking a stored procedure within another stored procedure
caused the server to crash. (Bug #13549)
Stored functions making use of cursors were not replicated.
(Bug #)
CAST(expr AS
BINARY(N)) did not pad
with 0x00 to a length of N bytes.
(Bug #14255)
Casting a FLOAT or
DOUBLE whose value was less than
1.0E-06 to DECIMAL would
yield an inappropriate value. (Bug #14268)
In some cases, a left outer join could yield an invalid result
or cause the server to crash, due to a
MYSQL_DATA_TRUNCATED error. (Bug #13488)
For a invalid view definition, selecting from the
INFORMATION_SCHEMA.VIEWS table or using
SHOW CREATE VIEW failed, making it
difficult to determine what part of the definition was
invalid. Now the server returns the definition and issues a
warning. (Bug #13818)
The server could misinterpret old trigger definition files
created before MySQL 5.0.17. Now they are interpreted
correctly, but this takes more time and the server issues a
warning that the trigger should be re-created. (Bug #14090)
mysqldump --triggers did not account for
the SQL mode and could dump trigger definitions with missing
whitespace if the IGNORE_SPACE mode was
enabled. (Bug #14554)
Within a trigger definition the
CURRENT_USER() function evaluated to the
user whose actions caused the trigger to be activated. Now
that triggers have a DEFINER value,
CURRENT_USER() evaluates to the trigger
definer. (Bug #5861)
CREATE TABLE tbl_name
(...) SELECT ... could crash the server and write
invalid data into the .frm file if the
CREATE TABLE and SELECT
both contained a column with the same name. Also, if a default
value is specified in the column definition, it is now
actually used. (Bug #14480)
A newline character in a column alias in a view definition
caused an error when selecting from the view later. (Bug
#13622)
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)
The grammar for supporting the DEFINER =
CURRENT_USER clause in CREATE
VIEW and ALTER VIEW was
incorrect. (Bug #14719)
Queries on ARCHIVE tables that used the
filesort sorting method could result in a
server crash. (Bug #14433)
The mysql_stmt_fetch() C APP function could
return MYSQL_NO_DATA for a SELECT
COUNT(*) FROM tbl_name WHERE 1 =
0 statement, which should return 1 row. (Bug #14845)
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)
A server crash resulted from the following sequence of events:
1) With no default database selected, create a stored
procedure with the procedure name explicitly qualified with a
database name (CREATE PROCEDURE
db_name.proc_name
...). 2) Create another stored procedure with no
database name qualifier. 3) Execute SHOW PROCEDURE
STATUS. (Bug #14569)
Complex subqueries could cause improper internal query
execution environment initialization and crash the server.
(Bug #14342)
For a table that had been opened with HANDLER
OPEN, issuing OPTIMIZE TABLE,
ALTER TABLE, or REPAIR
TABLE caused a server crash. (Bug #14397)
A server crash could occur if a prepared statement invoked a
stored procedure that existed when the statement was prepared
but had been dropped and re-created prior to statement
execution. (Bug #12329)
A server crash could occur if a prepared statement updated a
table for which a trigger existed when the statement was
prepared but had been dropped prior to statement execution.
(Bug #13399)
Statements that implicitly commit a transaction are prohibited
in stored functions and triggers. An attempt to create a
function or trigger containing such a statement produces an
error. (Bug #13627) (The originally reported symptom was that
a trigger that dropped another trigger could cause a server
crash. That problem was fixed by the patch for Bug #13343.)
D.1.5. Changes in release 5.0.16 (10 November 2005)
Functionality added or changed:
When trying to run the server with yaSSL enabled, MySQL now
tries to open /dev/random automatically
if /dev/urandom is not available. (Bug
#13164)
The read_only system variable no longer
applies to TEMPORARY tables. (Bug #4544)
Due to changes in binary logging, the restrictions on which
stored routine creators can be trusted not to create unsafe
routines have been lifted for stored procedures (but not
stored functions). Consequently, the
log_bin_trust_routine_creators system
variable and the corresponding
--log-bin-trust-routine-creators server
option were renamed to
log_bin_trust_function_creators and
--log-bin-trust-function-creators. For
backward compatibility, the old names are recognized but
result in a warning. See
Section 17.4, “Binary Logging of Stored Routines and Triggers”.
Added the Compression status variable,
which indicates whether the client connection uses compression
in the client/server protocol.
In MySQL 5.0.13, syntax for DEFINER and
SQL SECURITY clauses was added to the
CREATE VIEW and ALTER
VIEW statements, but the clauses had no effect. They
now are enabled. They specify the security context to be used
when checking access privileges at view invocation time. See
Section 19.2, “CREATE VIEW Syntax”, for more information.
The InnoDB, NDB,
BDB, and ARCHIVE storage
engines now support spatial columns. See
Chapter 16, Spatial Extensions.
The CHECK TABLE statement now works for
ARCHIVE tables.
You must now declare a prefix for an index on any column of
any Geometry class, the only exception
being when the column is a POINT. (Bug
#12267)
Added a --hexdump option to
mysqlbinlog that displays a hex dump of the
log in comments. This output can be helpful for replication
debugging.
MySQL 5.0 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)
When a date column is set NOT NULL and
contains 0000-00-00, it will be updated for
UPDATE statements that contains
columnname IS
NULL in the WHERE clause. (Bug #14186)
Bugs fixed:
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)
For InnoDB tables, using a column prefix
for
| |