Fonctionnalité ajoutée ou modifiée :
Added explanation of hidden SELECT
of
UNION
in output of EXPLAIN
SELECT
statement.
mysql
command-line client now supports
multiple -e
options. (Bug#591)
New myisam_data_pointer_size
system
variable. See Section 5.2.3, « Variables serveur système ».
The --log-warnings
server option now is
enabled by default. Disable with
--skip-log-warnings
.
The --defaults-file=file_name
option now
requires that the filename must exist (safety fix). (Bug#3413)
mysqld_multi
now creates the log in
datadir (from [mysqld]
section in
my.cnf
or compiled in), not in
/tmp
- vulnerability id CVE-2004-0388.
Thanks to Christian Hammers from Debian Security Team for
reporting this!
Warning: Incompatible
change! String comparison now works according to
the SQL standard. Because we have that 'a' = 'a
'
then from it must follow that 'a' >
'a\t'
. (The latter was not the case before 4.1.2.)
To implement it, we had to change how storage engines
compare strings internally. As a side effect, if you have a
table where a CHAR
or
VARCHAR
column in some row has a value
with the last character less than
ASCII(32)
, you will have to repair this
table. CHECK TABLES
will tell you if this
problem exists. (Bug#3152)
Added support for DEFAULT
CURRENT_TIMESTAMP
and for ON UPDATE
CURRENT_TIMESTAMP
specifications for
TIMESTAMP
columns. Now you can explicitly
say that a TIMESTAMP
column should be set
automatically to the current timestamp for
INSERT
and/or UPDATE
statements, or even prevent the column from updating
automatically. Only one column with such an auto-set feature
per table is supported. TIMESTAMP
columns
created with earlier versions of MySQL behave as before.
Behavior of TIMESTAMP
columns that were
created without explicit specification of default/on as
earlier depends on its position in table: If it is the first
TIMESTAMP
column, it will be treated as
having been specified as TIMESTAMP DEFAULT
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
. In
other cases, it would be treated as a TIMESTAMP
DEFAULT 0
column. NOW
is
supported as an alias for
CURRENT_TIMESTAMP
.
Warning: Incompatible
change! Unlike in previous versions, explicit
specification of default values for
TIMESTAMP
column is never ignored and
turns off the auto-set feature (unless you have
CURRENT_TIMESTAMP
as the default).
Warning: Incompatible change! Renamed prepared statements C API functions:
Old Name | New Name |
mysql_bind_param() |
mysql_stmt_bind_param() |
mysql_bind_result() |
mysql_stmt_bind_result() |
mysql_prepare() |
mysql_stmt_prepare() |
mysql_execute() |
mysql_stmt_execute() |
mysql_fetch() |
mysql_stmt_fetch() |
mysql_fetch_column() |
mysql_stmt_fetch_column() |
mysql_param_count() |
mysql_stmt_param_count() |
mysql_param_result() |
mysql_stmt_param_metadata() |
mysql_get_metadata() |
mysql_stmt_result_metadata() |
mysql_send_long_data() |
mysql_stmt_send_long_data() |
Now all functions that operate with a
MYSQL_STMT
structure begin with the
prefix mysql_stmt_
.
Warning: Incompatible
change! The signature of the
mysql_stmt_prepare()
function was changed
to int mysql_stmt_prepare(MYSQL_STMT *stmt, const
char *query, unsigned long length)
. To create a
MYSQL_STMT
handle, you should use the
mysql_stmt_init()
function.
SHOW GRANTS
with no
FOR
clause or with FOR
CURRENT_USER()
shows the privileges for the
current session.
The improved character set support introduced in MySQL 4.1.0
for the MyISAM
and
HEAP
storage engines is now available for
InnoDB
as well.
A name of ``Primary'' no longer can be specified as an index
name. (That name is reserved for the PRIMARY
KEY
if the table has one.) (Bug#856)
MySQL now issues a warning when a SET
or
ENUM
column with duplicate values in the
list is created. (Bug#1427)
Now SQL_SELECT_LIMIT
variable has no
influence on subqueries. (Bug#2600)
UNHEX()
function implemented. See
Section 12.3, « Fonctions de chaînes de caractères ».
History in command line client does not store multiple copies of identical queries that are run consecutively.
Multi-line queries in the command line client now are stored as a single line.
UUID()
function implemented. Note that it
does not work with replication yet. See
Section 12.8.4, « Fonctions diverses ».
Prepared statements with all types of subqueries fixed.
MySQL now supports up to 64 keys per table.
MyISAM
tables now support keys up to 1000
bytes long.
MyISAM
and InnoDB
tables now support index prefix lengths up to 1000 bytes
long.
If you try to create a key with a key part that is too long, and it is safe to auto-truncate it to a smaller length, MySQL now does so. A warning is generated, rather than an error.
The ft_boolean_syntax
variable now can be
changed while the server is running. See
Section 5.2.3, « Variables serveur système ».
REVOKE ALL PRIVILEGES, GRANT FROM
user_list
is changed to a more consistent
REVOKE ALL PRIVILEGES, GRANT OPTION FROM
user_list
. (Bug#2642)
Internal string-to-number conversion now supports only
SQL:2003 compatible syntax for numbers. In particular,
'0x10'+0
will not work anymore.
(Actually, it worked only on some systems before, such as
Linux. It did not work on others, such as FreeBSD or
Solaris. Making these queries OS-independent was the goal of
this change). Use CONV()
to convert
hexadecimal numbers to decimal. E.g.
CONV(MID('0x10',3),16,10)+0
.
mysqlhotcopy
now works on NetWare.
ALTER TABLE DROP PRIMARY KEY
no longer
drops the first UNIQUE
index if there is
no primary index. (Bug#2361)
Added latin1_spanish_ci
(Modern Spanish)
collation for the latin1
character set.
Added the ENGINE
table option as a
synonym for the TYPE
option for
CREATE TABLE
and ALTER
TABLE
.
Added the --default-storage-engine
server
option as a synonym for
--default-table-type
.
Added the storage_engine
system variable
as a synonym for table_type
.
Added init_connect
and
init_slave
server variables. The values
should be SQL statements to be executed when each client
connects or each time a slave's SQL thread starts,
respectively.
C API enhancement:
SERVER_QUERY_NO_INDEX_USED
and
SERVER_QUERY_NO_GOOD_INDEX_USED
flags are
now set in the server_status
field of the
MYSQL
structure. It is these flags that
make the query to be logged as slow if
mysqld
was started with
--log-slow-queries
--log-queries-not-using-indexes
.
For replication of MEMORY
(HEAP
) tables: Made the master
automatically write a DELETE FROM
statement to its binary log when a MEMORY
table is opened for the first time since master's startup.
This is for the case where the slave has replicated a
non-empty MEMORY
table, then the master
is shut down and restarted: the table is now empty on
master; the DELETE FROM
empties it on
slave too. Note that even with this fix, between the
master's restart and the first use of the table on master,
the slave still has out-of-date data in the table. But if
you use the init-file
option to populate
the MEMORY
table on the master at
startup, it ensures that the failing time interval is zero.
(Bug#2477)
When a session having open temporary tables terminates, the
statement automatically written to the binary log is now
DROP TEMPORARY TABLE IF EXISTS
instead of
DROP TEMPORARY TABLE
, for more
robustness.
The MySQL server now returns an error if SET
SQL_LOG_BIN
or SET
SQL_LOG_UPDATE
is issued by a user without the
SUPER
privilege (in previous versions it
just silently ignored the statement in this case).
Changed that when the MySQL server has binary logging
disabled (that is, no log-bin
option was
used) then no transaction binlog cache is allocated for
connections (this should save
binlog_cache_size
bytes of memory (32
kilobytes by default) for every connection).
Added Binlog_cache_use
and
Binlog_cache_disk_use
status variables
that count the number of transactions that used transaction
binary log and that had to flush this temporary binary log
to disk instead of using only buffer in memory. They can be
used for tuning the binlog_cache_size
system variable.
Added option --replicate-same-server-id
.
The Mac OS X Startup Item has been moved from the directory
/Library/StartupItems/MySQL
to
/Library/StartupItems/MySQLCOM
to avoid
a file name collision with the MySQL Startup Item installed
with Mac OS X Server. See Section 2.8.2, « Notes relatives à Mac OS X ».
Bogues corrigés :
Fixed check of EXPLAIN
of
UNION
. (Bug#3639)
Fixed a bug in a query that used DISTINCT
and ORDER BY
by column's real name, while
the column had an alias, specified in
SELECT
clause. (Bug#3681)
Fixed crash of group_concat
on expression
with ORDER BY
and external ORDER
BY
in a query. (Bug#3752)
Fixed a bug in
ALL
/SOME
subqueries in
case of optimisation (key field present in subquery). (Bug#3646)
Fixed a bug in SHOW GRANTS
and
EXPLAIN SELECT
character set conversion.
(Bug#3403)
Prepare statements parameter do not cause error message as
fields used in select list but not included in
ORDER BY
list.
UNION
statements did not consult
SQL_SELECT_LIMIT
value when set. This is
now fixed properly, which means that this limit is applied
to the top level query, unless LIMIT
for
entire UNION
is used.
Fixed a bug in multiple-table UPDATE
statements that resulted in an error when one of the tables
was not updated but was used in the nested query, contained
therein.
Fixed mysql_stmt_send_long_data()
behavior on second execution of prepared statement and in
case when long data had zero length. (Bug#1664)
Fixed crash on second execution of prepared statement with
UNION
. (Bug#3577)
Fixed incorrect results of aggregate functions in subquery with empty result set. (Bug#3505)
You can now call mysql_stmt_attr_set(...,
STMT_ATTR_UPDATE_MAX_LENGTH)
to tell the client
library to update
MYSQL_FIELD->max_length
when doing
mysql_stmt_store_result()
. (Bug#1647).
Added support for unsigned integer types to prepared statement API (Bug#3035).
Fixed crash in prepared statements when subquery in the
FROM
clause with parameter used. (Bug#3020)
Fixed unknown error when negative value bind to unsigned. (Bug#3223)
Fixed aggregate function in prepared statements. (Bug#3360)
Incorrect error message when wrong table used in
multiple-table DELETE
statement in
prepared statements. (Bug#3411)
Requiring UPDATE
privilege for tables
which will not be updated in multiple-table
UPDATE
statement in prepared statements.
Fixed prepared statement support for
INSERT
, REPLACE
,
CREATE
, DELETE
,
SELECT
, DO
,
SET
and SHOW
. All
other commands are prohibited via prepared statement
interface. (Bug#3398, Bug#3406, Bug#2811)
Fixed a lot of bugs in GROUP_CONCAT()
.
(Bug#2695, Bug#3381, Bug#3319)
Added optimization that allows for prepared statements using a large number of tables or tables with a large number of columns to be re-executed significantly faster. (Bug#2050)
Fixed bug that caused execution of prepared statements to fail then table that this statement were using left table cache. This bug showed up as if this prepared statement used random garbage as column names or as server crashes. (Bug#3307)
Fixed a problem resulting from setting the
character_set_results
variable to
NULL
. (Bug#3296)
Fixed query cache statistics.
Fixed bug in ANALYZE TABLE
on a
BDB
table inside a transaction that hangs
server thread. (Bug#2342)
Fixed a symlink vulnerability in
mysqlbug
script. (Bug#3284)
Fixed a bug in parallel repair (myisamchk
-p
, myisam_repair_threads
);
sometimes the repair process failed to repair a table. (Bug#1334)
A query that uses both UNION [DISTINCT]
and UNION ALL
now works correctly. (Bug#1428)
Table default character set affects
LONGBLOB
columns. (Bug#2821)
CONCAT_WS()
makes the server die in case
of illegal mix of collations. (Bug#3087)
UTF8 charset breaks joins with mixed column/string constant. (Bug#2959)
Fixed DROP DATABASE
to report number of
tables deleted.
Fixed memory leak in the client library when statement
handle was freed on closed connection (call to
mysql_stmt_close
after
mysql_close
). (Bug#3073)
Fixed server segfaults when processing malformed prepared statements commands. (Bug#2795, Bug#2274)
Fixed using subqueries with OR
and
AND
functions. (Bug#2838)
Fixed comparison of tables/database names with
--lower_case_table_names
option. (Bug#2880)
Removed try to check NULL
if index built
on column where NULL
is impossible in
IN
subquery optimization. (Bug#2393)
Fixed incorrect parsing of subqueries in the
FROM
clause. (Bug#2421)
Fixed processing of RAND()
in subqueries
with static tables. (Bug#2645)
Fixed bug with quoting of table names in
mysqldump
for various values of
sql_mode
of server. (Bug#2591)
Fixed bug with storing values that are out of range for
DOUBLE
and FLOAT
columns. (Bug#2082)
Fixed bug with compiling --with-pstack
with
binutils 2.13.90. (Bug#1661)
Fixed a bug in the GRANT
system. When a
password was assigned to an account at the global level and
then privileges were granted at the database level (without
specifying any password), the existing password was replaced
temporarily in memory until the next FLUSH
PRIVILEGES
operation or the server was restarted.
(Bug#2953)
Fixed a bug in full-text search on multi-byte character set (such as UTF8) that appeared when a search word was shorter than a matching word from the index (for example, searching for ``Uppsala'' when table data contain ``Uppsa*la''). (Bug#3011)
Fixed a bug that made
Max_used_connections
to be less than the
actual maximum number of connections in use simultaneously.
Fixed calculation of Index_length
in
HEAP
table status for
BTREE
indexes. (Bug#2719)
Fixed mysql_stmt_affected_rows()
call to
always return number of rows affected by given statement.
(Bug#2247)
Fixed crash in MATCH ... AGAINST()
on a
phrase search operator with a missing closing double quote.
(Bug#2708)
Fixed output of mysqldump --tab
. (Bug#2705)
Fix for a bug in UNION
operations that
prevented proper handling of NULL
columns. This happened only if a column in the first
SELECT
node was NOT
NULL
. (Bug#2508)
Fix for a bug in UNION
operations with
InnoDB
storage engine, when some columns
from one table where used in one SELECT
statement and some were used in another
SELECT
statement. (Bug#2552)
Fixed a few years old bug in the range optimizer that caused a segmentation fault on some very rare queries. (Bug#2698)
Fixed bug with SHOW CREATE TABLE ...
which didn't properly double quotes. (Bug#2593)
Queries with subqueries in FROM
clause
locks all tables at once for now. This also fixed bugs in
EXPLAIN
of subqueries in
FROM
output. (Bug#2120)
Fixed bug with mysqldump
not quoting
``tricky'' names correctly. (Bug#2592)
Fix for a bug that prevented table / column privileges from being loaded on startup. (Bug#2546)
Fixed bug in replication with CREATE TABLE ... LIKE
...
that resulted in a statement not being written
to the binary log. (Bug#2557)
Fixed memory leak in INSERT ... ON DUPLICATE KEY
UPDATE ...
. (Bug#2438)
Fixed bug in the parser, making the syntax
CONVERT(expr,type)
legal again.
Fixed parsing of short-form IP addresses in
INET_ATON()
. (Bug#2310)
Fixed a bug in CREATE ... SELECT
that
sometimes caused a string column with a multi-byte character
set (such as utf8
) to have insufficient
length to hold the data.
Fixed a rare table corruption on adding data
(INSERT
, REPLACE
,
UPDATE
, etc. but not
DELETE
) to a FULLTEXT
index. (Bug#2417)
Compile the MySQL-client
RPM package
against libreadline
instead of
libedit
. (Bug#2289)
Fix for a crashing bug that was caused by not setting
vio_timeout()
virtual function for all
protocols. This bug occurred on Windows. (Bug#2025)
Fix for a bug that caused mysql
client
program to erroneously cache the value of the current
database. (Bug#2025)
Fix for a bug that caused client/server communication to be
broken when mysql_set_server_option()
or
mysql_get_server_option()
were invoked.
(Bug#2207)
Fix for a bug that caused wong results when
CAST()
was applied on
NULL
to signed or unsigned integer
column. (Bug#2219)
Fix for a crashing bug that occurred in the
mysql
client program when database name
was longer then expected. (Bug#2221)
Fixed a bug in CHECK TABLE
that sometimes
resulted in a spurious error Found key at page ...
that points to record outside datafile
for a table
with a FULLTEXT
index. (Bug#2190)
Fixed bug in GRANT
with table-level
privilege handling. (Bug#2178)
Fixed bug in ORDER BY
on a small column.
(Bug#2147)
Fixed a bug with the INTERVAL()
function
when 8 or more comparison arguments are provided. (Bug#1561)
Packaging: Fixed a bug in the Mac OS PKG
postinstall
script
(mysql_install_db
was called with an
obsolete argument).
Packaging: Added missing file
mysql_create_system_tables
to the
server RPM package. This bug was fixed for the 4.1.1 RPMs by
updating the MySQL-server RPM from
MySQL-server-4.1.1-0
to
MySQL-server-4.1.1-1
. The other RPMs were
not affected by this change.
Fixed a bug in myisamchk
and
CHECK TABLE
that sometimes resulted in a
spurious error Found key at page ... that points to
record outside datafile
for a table with a
FULLTEXT
index. (Bug#1977)
Fixed a hang in full-text indexing of strings in multi-byte
(all besides utf8
) charsets. (Bug#2065)
Fixed a crash in full-text indexing of UTF8 data. (Bug#2033)
Replication: a rare race condition in the slave SQL thread that could lead to an incorrect complaint that the relay log is corrupted. (Bug#2011)
Replication: If a client connects to a slave server and
issues an administrative statement for a table (for example,
OPTIMIZE TABLE
or REPAIR
TABLE
), this could sometimes stop the slave SQL
thread. This does not lead to any corruption, but you must
use START SLAVE
to get replication going
again. (Bug#1858)
Replication: in the slave SQL thread, a multiple-table
UPDATE
could produce an incorrect
complaint that some record was not found in one table, if
the UPDATE
was preceded by a
INSERT ... SELECT
. (Bug#1701)
Replication: sometimes the master gets a non-fatal error
during the execution of a statement but finally the
statements succeeds (for example, a write to a
MyISAM
table first receives "no space
left on device" but is able to finally complete, see
Section A.4.3, « Comment MySQL gère un disque plein »); the bug was that the master
forgot to reset the error code to 0 after success, so the
error code got into its binary log, thus making the slave
giving false alarms like "did not get the same error as on
master". (Bug#2083)
Removed a misleading "check permissions on master.info" from a replication error message, because the cause of the problem could be different from permissions. (Bug#2121)
Fixed a crash when the replication slave was unable to create the first relay log. (Bug#2145)
ALTER DATABASE
caused the client to hang
if the database did not exist. (Bug#2333)
Multiple-table DELETE
statements were
never replicated by the slave if there were any
replicate-*-table
options. (Bug#2527)
Fixed bug in ALTER TABLE RENAME
, when
rename to the table with the same name in another database
silently dropped destination table if it existed. (Bug#2628)
The MySQL server did not report any error if the query
(submitted through mysql_real_query()
or
mysql_prepare()
) was terminated by
garbage characters (which can happen if you pass a wrong
length
parameter to
mysql_real_query()
or
mysql_prepare()
); the result was that the
garbage characters were written into the binary log. (Bug#2703)
Fixed bug in client library which caused
mysql_fetch
and
mysql_stmt_store_result()
to hang if they
were called without prior call of
mysql_execute()
. Now they give an error
instead. (Bug#2248)
Made clearer the error message which one gets when an update
is refused because of the read-only
option. (Bug#2757)
Fixed that replicate-wild-*-table
rules
apply to ALTER DATABASE
when the table
pattern is '%', like it is already the case for
CREATE DATABASE
and DROP
DATABASE
. (Bug#3000)
Fixed that when a Rotate
event is found
by the slave SQL thread in the middle of a transaction, the
value of Relay_Log_Pos
in SHOW
SLAVE STATUS
remains correct. (Bug#3017)
Corrected the master's binary log position that
InnoDB
reports when it is doing a crash
recovery on a slave server. (Bug#3015)
Changed the column Seconds_Behind_Master
in SHOW SLAVE STATUS
to never show a
value of -1. (Bug#2826)
Changed that when a DROP TEMPORARY TABLE
statement is automatically written to the binary log when a
session ends, the statement is recorded with an error code
of value zero (this ensures that killing a
SELECT
on the master does not result in a
superfluous error on the slave). (Bug#3063)
Changed that when a thread handling INSERT
DELAYED
(also known as a
delayed_insert
thread) is killed, its
statements are recorded with an error code of value zero
(killing such a thread does not endanger replication, so we
thus avoid a superfluous error on the slave). (Bug#3081)
Fixed deadlock when two START SLAVE
commands were run at the same time. (Bug#2921)
Fixed that a statement never triggers a superfluous error on
the slave, if it must be excluded given the
replicate-*
options. The bug was that if
the statement had been killed on the master, the slave would
stop. (Bug#2983)
The --local-load
option of
mysqlbinlog
now requires an argument.
Fixed a segmentation fault when running LOAD DATA
FROM MASTER
after RESET SLAVE
.
(Bug#2922)
mysqlbinlog --read-from-remote-server
read all binary logs following the one that was requested.
It now stops at the end of the requested file, the same was
it does when reading a local binary log. (Bug#3204)
Fixed mysqlbinlog
--read-from-remote-server
to print the exact
positions of events in the "at #" lines. (Bug#3214)
Fixed a rare error condition that caused the slave SQL
thread spuriously to print the message Binlog has
bad magic number
and stop when it was not
necessary to do so. (Bug#3401)
Fixed the Exec_master_log_pos
column and
its disk image in the relay-log.info
file to be correct if the master had version 3.23. (The
value was too big by six bytes.) This bug does not exist in
MySQL 5.0. (Bug#3400)
Fixed mysqlbinlog
not to forget to print
a USE
statement under rare circumstances
where the binary log contained a LOAD DATA
INFILE
statement. (Bug#3415)
Fixed a memory corruption when replicating a LOAD
DATA INFILE
when the master had version 3.23. Some
smaller problems remain in this setup, See
Section 6.7, « Fonctionnalités de la réplication et problèmes connus ». (Bug#3422)
Multiple-table DELETE
statements were
always replicated by the slave if there were some
replicate-*-ignore-table
options and no
replicate-*-do-table
options. (Bug#3461)
Fixed a crash of the MySQL slave server when it was built
with --with-debug
and replicating itself.
(Bug#3568)
Fixed that in some replication error messages, a very long query caused the rest of the message to be invisible (truncated), by putting the query last in the message. (Bug#3357)
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.