Functionality added or changed:
Incompatible Change: The following obsolete constructs have been removed. Where alternatives are shown, applications should be updated to use them.
The log_bin_trust_routine_creators system
variable (use
log_bin_trust_function_creators).
The myisam_max_extra_sort_file_size
system variable.
The record_buffer system variable (use
read_buffer_size).
The sql_log_update system variable.
The table_type system variable (use
storage_engine).
The FRAC_SECOND modifier for the
TIMESTAMPADD() function.
The TYPE table option to specify the
storage engine for CREATE
TABLE or ALTER
TABLE (use ENGINE).
The SHOW TABLE TYPES SQL statement (use
SHOW ENGINES).
The SHOW INNODB STATUS and
SHOW MUTEX STATUS SQL statements (use
SHOW ENGINE
INNODB STATUS
SHOW ENGINE
INNODB MUTEX).
The SHOW PLUGIN SQL statement (use
SHOW PLUGINS).
The LOAD TABLE ... FROM MASTER and
LOAD DATA FROM MASTER SQL statements (use
mysqldump or
mysqlhotcopy to dump tables and
mysql to reload dump files).
The BACKUP TABLE and
RESTORE TABLE SQL statements
(use mysqldump or
mysqlhotcopy to dump tables and
mysql to reload dump files).
TIMESTAMP(
data type: The ability to specify a display width of
N)N (use without
N).
The --default-character-set and
--default-collation server options (use
--character-set-server and
--collation-server).
The --delay-key-write-for-all-tables server
option (use
--delay-key-write=ALL).
The --enable-locking and
--skip-locking server options (use
--external-locking and
--skip-external-locking).
The --log-bin-trust-routine-creators server
option (use
--log-bin-trust-function-creators).
The --log-long-format server option.
The --log-update server option.
The --master-
server options to set replication parameters (use the
xxxCHANGE MASTER TO statement
instead): --master-host,
--master-user, --master-password
, --master-port,
--master-connect-retry,
--master-ssl,
--master-ssl-ca,
--master-ssl-capath,
--master-ssl-cert,
--master-ssl-cipher,
--master-ssl-key.
The --safe-show-database server option.
The --skip-symlink and
--use-symbolic-links server options (use
--skip-symbolic-links
and --symbolic-links).
The --sql-bin-update-same server option.
The --warnings server option (use
--log-warnings).
The --no-named-commands option for
mysql (use
--skip-named-commands
The --no-pager option for
mysql (use
--skip-pager).
The --no-tee option for
mysql (use --skip-tee).
The --position option for
mysqlbinlog (use
--start-position).
The --all option for
mysqldump (use
--create-options).
The --first-slave option for
mysqldump (use
--lock-all-tables).
The --config-file option for
mysqld_multi (use
--defaults-extra-file).
The
--set-variable=
and var_name=value-O
general-purpose options for setting program variables (use
var_name=value--).
var_name=value
See also Bug#47974.
Incompatible Change:
Aliases for wildcards (as in SELECT t.* AS 'alias' FROM
t) are no longer accepted and result in an error.
Previously, such aliases were ignored silently.
(Bug#27249)
Incompatible Change:
FLUSH TABLES
has a new variant, FLUSH
TABLES . This variant enables tables to be flushed and
locked in a single operation. It provides a workaround for the
restriction (due to work done for Bug#989) that
tbl_list WITH READ
LOCKFLUSH TABLES is
disallowed when there is an active
LOCK TABLES ...
READ.
See also Bug#42465.
Incompatible Change:
The server now includes dtoa, a library for
conversion between strings and numbers by David M. Gay. In
MySQL, this library provides the basis for improved conversion
between string or DECIMAL values
and approximate-value
(FLOAT/DOUBLE)
numbers:
Consistent conversion results across platforms, which eliminates, for example, Unix versus Windows conversion differences.
Accurate representation of values in cases where results previously did not provide sufficient precision, such as for values close to IEEE limits.
Conversion of numbers to string format with the best
possible precision. The precision of dtoa
is always the same or better than that of the standard C
library functions.
Because the conversions produced by this library differ in some cases from previous results, the potential exists for incompatibilities in applications that rely on previous results. For example, applications that depend on a specific exact result from previous conversions might need adjustment to accommodate additional precision.
For additional information about the properties of
dtoa conversions, see
Type Conversion in Expression Evaluation.
See also Bug#12860, Bug#21497, Bug#26788, Bug#24541, Bug#34015.
Incompatible Change: The Unicode implementation has been extended to provide support for supplementary characters that lie outside the Basic Multilingual Plane (BMP). Noteworthy features:
utf16 and utf32
character sets have been added. These correspond to the
UTF-16 and UTF-32 encodings of the Unicode character set,
and they both support supplementary characters.
The utf8mb4 character set has been added.
This is similar to utf8, but its encoding
allows up to four bytes per character to enable support for
supplementary characters.
The ucs2 character set is essentially
unchanged except for the inclusion of some newer BMP
characters.
In most respects, upgrading to MySQL 5.5 should present few problems with regard to Unicode usage, although there are some potential areas of incompatibility. These are the primary areas of concern:
For the variable-length character data types
(VARCHAR and the
TEXT types), the maximum
length in characters is less for utf8mb4
columns than for utf8 columns.
For all character data types
(CHAR,
VARCHAR, and the
TEXT types), the maximum
number of characters that can be indexed is less for
utf8mb4 columns than for
utf8 columns.
Consequently, if you want to upgrade tables from
utf8 to utf8mb4 to take
advantage of supplementary-character support, it may be
necessary to change some column or index definitions.
For additional details about the new Unicode character sets and potential incompatibilities, see Unicode Support, and Upgrading from Previous to Current Unicode Support.
Incompatible Change:
Several columns were added to the
INFORMATION_SCHEMA.ROUTINES table
to provide information about the RETURNS
clause data type for stored functions:
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH,
CHARACTER_OCTET_LENGTH,
NUMERIC_PRECISION,
NUMERIC_SCALE,
CHARACTER_SET_NAME, and
COLLATION_NAME.
This change produces an incompatibility for applications that
depend on column order in the
ROUTINES table because the new
columns appear between the ROUTINE_TYPE and
DTD_IDENTIFIER columns. Such applications may
need to be adjusted to account for the new columns.
Bugs fixed:
Security Fix:
The server crashed if an account with the
CREATE ROUTINE privilege but not
the EXECUTE privilege attempted
to create a stored procedure.
(Bug#44798)
Incompatible Change: Replication:
The --binlog_format system variable can no
longer be set inside a transaction. In other words, the binary
logging format can no longer be changed while a transaction is
in progress.
(Bug#47863)
Incompatible Change:
For debug builds, wttempts to execute
RESET statements within a
transaction that had acquired metadata locks led to an assertion
failure.
As a result of this bug fix,
RESET statements now cause an
implicit commit.
(Bug#51336)
Incompatible Change:
A deadlock occurred for this sequence of events: Session 1
locked a table using LOCK TABLES;
Session 2 dropped the database containing the table; Session 1
created any database.
A consequence of this bug fix is that
CREATE DATABASE is disallowed
within a session that has an active LOCK
TABLES statement.
(Bug#49988)
Incompatible Change:
For application compatibility reasons, when
sql_auto_is_null is 1, MySQL
converts to
auto_inc_col IS
NULL. However, this was being done
regardless of whether the predicate was alone or at the top
level. Now it occurs only when it is a single top-level
predicate.
auto_inc_col =
LAST_INSERT_ID()
In conjunction with this bug fix, the default value of the
sql_auto_is_null system
variable has been changed from 1 to 0, which may cause
incompatibilities with existing applications.
(Bug#41371)
Incompatible Change:
The parser accepted illegal syntax in a FOREIGN
KEY clause:
Multiple MATCH clauses.
Multiple ON DELETE clauses.
Multiple ON UPDATE clauses.
MATCH clauses specified after ON
UPDATE or ON DELETE. In case of
multiple redundant clauses, this leads to confusion, and
implementation-dependent results.
These illegal syntaxes are now properly rejected. Existing applications that used them will require adjustment. (Bug#34455)
Incompatible Change:
The Locked thread state was equivalent to the
Table lock state and has been removed. It no
longer appears in SHOW
PROCESSLIST output.
(Bug#28870)
Incompatible Change:
Several changes were made to the processing of multiple-table
DELETE statements:
Statements could not perform cross-database deletes unless the tables were referred to without using aliases. This limitation has been lifted and table aliases now are allowed.
Previously, alias declarations could be given for tables
elsewhere than in the
table_references part of the
syntax. This could lead to ambiguous statements that have
unexpected results such as deleting rows from the wrong
table. Example:
DELETE FROM t1 AS a2 USING t1 AS a1 INNER JOIN t2 AS a2;
Now alias declarations can be declared only in the
table_references part. Elsewhere
in the statement, alias references are allowed but not alias
declarations.
Alias resolution was improved so that it is no longer possible to have inconsistent or ambiguous aliases for tables.
Statements containing alias constructs that are no longer allowed must be rewritten. (Bug#27525)
See also Bug#30234.
Incompatible Change:
DROP TABLE now is allowed only if
you have acquired a WRITE lock with
LOCK TABLES, or if you hold no
locks, or if the table is a TEMPORARY table.
Previously, if other tables were locked, you could drop a table with a read lock or no lock, which could lead to deadlocks between clients. The new stricter behavior means that some usage scenarios will fail when previously they did not. (Bug#25858)
Incompatible Change:
If a data definition language (DDL) statement occurred for a
table that was being used by another session in an active
transaction, statements could be written to the binary log in
the wrong order. For example, this could happen if DROP
TABLE occurred for a table being used in a
transaction. This is now prevented by deferring release of
metadata locks on tables used within a transaction until the
transaction ends.
This bug fix results in some incompatibilities with previous versions:
A table that is being used by a transaction within one session cannot be used in DDL statements by other sessions until the transaction ends.
FLUSH
TABLES is disallowed when there is an active
LOCK TABLES ...
READ. Use
FLUSH TABLES
instead. This causes a problem with
mysqlhotcopy, fixed in Bug#42465.
tbl_list WITH READ LOCK
