Note: The security improvements
related to creation of table files and to user-defined functions
were made after MySQL 4.1.10 was released and are present in
MySQL 4.1.10a. We would like to thank Stefano Di Paola
<stefano.dipaola@wisec.it>
for making us aware of
these.
Fonctionnalités ajoutées ou modifiées :
Added back faster subquery execution from 4.1.8. This adds
also back a bug from 4.1.8 in comparing
NULL
to the value of a subquery. See
Section 1.5.7.4, « Bugs connus / limitations de MySQL ».
Security improvement: The server creates
.frm
, .MYD
,
.MYI
, .MRG
,
.ISD
, and .ISM
table files only if a file with the same name does not
already exist. Thanks to Stefano Di Paola
<stefano.dipaola@wisec.it>
for finding and
informing us about this issue. (CVE-2005-0711)
Security improvement: User-defined functions should have at
least one symbol defined in addition to the
xxx
symbol that corresponds to the main
xxx()
function. These auxiliary symbols
correspond to the xxx_init()
,
xxx_deinit()
,
xxx_reset()
,
xxx_clear()
, and
xxx_add()
functions.
mysqld by default no longer loads UDFs
unless they have at least one auxiliary symbol defined in
addition to the main symbol. The
--allow-suspicious-udfs
option controls
whether UDFs that have only an xxx
symbol
can be loaded. By default, the option is off.
mysqld
also checks UDF filenames when it
reads them from the mysql.func
table and
rejects those that contain directory pathname separator
characters. (It already checked names as given in
CREATE FUNCTION
statements.) See
Section 27.2.3.1, « Fonctions utilisateur : appeler des fonctions simples »,
Section 27.2.3.2, « Appeler des fonctions utilisateurs pour les groupements », and
Section 27.2.3.6, « Précautions à prendre avec les fonctions utilisateur ». Thanks to Stefano Di Paola
<stefano.dipaola@wisec.it>
for finding and
informing us about this issue. (CVE-2005-0709,
CVE-2005-0710)
Setting the connection collation to a value different from
the server collation followed by a CREATE
TABLE
statement that included a quoted default
value resulted in a server crash. (Bug#8235)
Thread stack size was increased from 192KB to 256KB on Linux/IA-64 (too small stack size was causing server crashes on some queries). (Bug#8391)
From the Windows distribution, predefined accounts without passwords for remote users ("root@%", "@%") were removed (other distributions never had them).
Added mysql_library_init()
and
mysql_library_end()
as synonyms for the
mysql_server_init()
and
mysql_server_end()
C API functions.
mysql_library_init()
and
mysql_library_end()
are
#define
symbols, but the names more
clearly indicate that they should be called when beginning
and ending use of a MySQL C API library no matter whether
the application uses libmysqlclient
or
libmysqld
. (Bug#6149)
The server now issues a warning when
lower_case_table_names=2
and the data
directory is on a case-sensitive filesystem, just as when
lower_case_table_names=0
on a
case-insensitive filesystem. (Bug#7887)
The server now issues a warning to the error log when it encounters older tables that contain character columns that might be interpreted by newer servers to have a different column length. (Bug#6913) See Section 2.6.2, « Passer de la version 4.0 à la version 4.1 » for a discussion of this problem and what to do about it.
InnoDB: When MySQL/InnoDB is compiled on Mac OS X 10.2 or
earlier, detect the operating system version at run time and
use the fcntl()
file flush method on Mac
OS X versions 10.3 and later. Apple had disabled
fsync()
in Mac OS X for internal disk
drives, which caused corruption at power outages.
InnoDB: A shared record lock
(LOCK_REC_NOT_GAP
) is now taken for a
matching record in the foreign key check because inserts can
be allowed into gaps.
InnoDB: Relaxed locking in INSERT...SELECT, single table
UPDATE...SELECT and single table DELETE...SELECT clauses
when innobase_locks_unsafe_for_binlog is used and isolation
level of the transaction is not serializable.
InnoDB
uses consistent read in these
cases for a selected table.
Bogues corrigés :
FOUND_ROWS()
returned an incorrect value
after a SELECT SQL_CALC_FOUND_ROWS
DISTINCT
statement that selected constants and
included GROUP BY
and
LIMIT
clauses. (Bug#7945)
Fixed a bug in cardinality estimations for
HASH
indexes of
TEMPORARY
tables created using
MEMORY
storage engine. As a result
queries that were using this index (as shown by
EXPLAIN
) could have returned incorrect
results. (Bug#8371)
Corrected a problem with references to
DUAL
where statements such as
SELECT 1 AS a FROM DUAL
would succeed but
statements such as SELECT 1 AS a FROM DUAL LIMIT
1
would fail. (Bug#8023)
Fixed a server crash caused by DELETE FROM
when the tbl_name
... WHERE ... ORDER BY
tbl_name
.col_name
ORDER BY
column was qualified
with the table name. (Bug#8392)
mysqld had problems finding its language
files if the basedir
value was specified
as a very long pathname. (Bug#8015)
Updates were being written to the binary log when there were
binlog-do-db
or
binlog-ignore-db
options even when there
was no current database, contrary to
Section 5.9.4, « Le log binaire ». (Bug#6749)
Fixed conversion of floating-point values to character fields when the absolute value of the float was less than 1, and also fixed calculation of length for negative values. (Bug#7774)
Column headers in query results retrieved from the query cache could be corrupted when a non-4.1 client was served a result originally generated for a 4.1 client. The query cache was not keeping track of which client/server protocol was being used. (Bug#6511)
Fixed LOAD INDEX
statement to actually
load index in memory. (Bug#8452)
If multiple prepared statements were executed without retrieving their results, executing one of them again would cause the client program to crash. (Bug#8330)
Non-numeric values inserted into a YEAR
column were being stored as 2000
rather
than as 0000
. (Bug#6067)
Fixed a failure of multiple-table updates to replicate
properly on slave servers when
--replicate-*-table
options had been
specified. (Bug#7011)
mysql_stmt_close()
C API function was not
clearing an error indicator when a previous prepare call
failed, causing subsequent invocations of error-retrieving
calls to indicate spurious error values. (Bug#7990)
Fixed failure of CREATE TABLE ... LIKE
Windows when the source or destination table was located in
a symlinked database directory. (Bug#6607)
With lower_case_table_names
set to 1,
mysqldump on Windows could write the same
table name in different lettercase for different SQL
statements. Fixed so that consistent lettercase is used.
(Bug#5185) HAVING
that referred to
RAND()
or a user-defined function in the
SELECT
part through an alias could cause
a crash or wrong value. (Bug#8216)
If one used CONVERT_TZ()
function in
SELECT
, which in its turn was used in
CREATE TABLE
statements, then system time
zone tables were added to list of tables joined in SELECT
and thus erroneous result was produced. (Bug#7899)
Fixed a bug in CONV()
function returning
unsigned BIGINT
number (third argument is
positive, and return value does not fit in 32 bits). (Bug#7751)
Fixed a failure of the IN()
operator to
return correct result if all values in the list were
constants and some of them were using substring functions,
for example, LEFT()
,
RIGHT()
, or MID()
.
Fixed problem with SHOW INDEX
reporting
Sub_part
values in bytes rather than
characters for columns with a multi-byte character set. (Bug#7943)
Fixed a crash in CONVERT_TZ()
function
when its second or third argument was from a
const
table (see
Section 7.2.1, « Syntaxe de EXPLAIN
(Obtenir des informations sur les
SELECT
) »). (Bug#7705)
Correct a problem with mysql_config,
which was failing to produce proper zlib
option for linking under some circumstances. (Bug#6273)
Fixed a problem with calculation of number of columns in row comparison against a subquery. (Bug#8020)
Fixed erroneous output resulting from SELECT
DISTINCT
combined with a subquery and
GROUP BY
. (Bug#7946)
Fixed server crash in comparing a nested row expression (for
example row(1,(2,3))
) with a subquery.
(Bug#8022)
Fixed server crash resulting from certain correlated subqueries with forward references (referring to an alias defined later in the outer query). (Bug#8025)
Fixed server crash resulting from re-execution of prepared statements containing subqueries. (Bug#8125)
Removed a dependence of boolean full-text search on
--default-character-set
option. (Bug#8159)
Fixed a crash in a boolean full-text search in certain joins. (Bug#8234)
Fixed erroneous comparison where strings that began with
CHAR(31)
were considered equal to the
empty string. (Bug#8134)
Add description of debug
command to
mysqladmin help output. (Bug#8207)
perror.exe was always returning ``Unknown
error'' on Windows. See Section 8.12, « perror
, expliquer les codes d'erreurs ». (Bug#7390)
Modify SET
statements produced by
mysqldump to write quoted strings using
single quotes rather than double quotes. This avoids
problems if the dump file is reloaded while the
ANSI_QUOTES
SQL mode is in effect. (Bug#8148)
Fixed a bug where ALTER TABLE
improperly
would accept an index on a TIMESTAMP
column that CREATE TABLE
would reject.
(Bug#7884)
Fixed a bug in multiple-table UPDATE
statements that could cause spurious Table
'#sql_....' is full
errors if the number of rows
to update is big enough. (Bug#7788)
Fixed a problem where SHOW INDEX
on a
MERGE
table could crash a debugging
version of the server. (Bug#7377)
Fixed a problem where adding an ORDER BY
clause for an indexed column would cause a
SELECT
to return an empty result. (Bug#7331)
Fixed a problem where ALTER TABLE
on a
TEMPORARY
table with a mixed-lettercase
name could cause the table to disappear when
lower_case_table_names
was set to 2. (Bug#7261)
Fixed a problem with key cache statistics being reported
incorrectly by the server after receipt of a
SIGHUP
signal. (Bug#4285)
Fixed a problem that caused
mysql_stmt_prepare()
to be very slow when
used in client programs on Windows. (Bug#5787)
For indexes, SHOW CREATE TABLE
now
displays the index type even if it is the default, for
storage engines that support multiple index types. (Bug#7235)
Fixed a bug where the use of
GROUP_CONCAT()
with
HAVING
caused a server crash. (Bug#7769)
Fixed a bug where comparing the result of a subquery to a non-existent column caused a server crash on Windows. (Bug#7885)
Fixed a bug which caused TIMEDIFF()
function to return wrong results if one of its arguments had
non-zero microsecond part (Bug#7586).
Fixed a bug which caused TIMESTAMP
columns with display width specified to be not identical to
DATETIME
columns when server was run in
MAXDB
mode (Bug#7418).
Fixed a bug in UNION
statements that
resulted in the wrong number of the examined rows reported
in the slow query log.
Fixed a bug in a combination of -not
and
trunc*
operators of full-text search.
Using more than one truncated negative search term, was
causing empty result set.
InnoDB: Fixed a bug introduced in 4.1.9 to the Windows
version if you used
innodb_file_per_table
.
mysqld would stop and complain about
Windows error number 87 in a file operation. (See the Bugs
database or the 4.1.9 change notes about a workaround for
that bug in 4.1.9). (Bug#8021)
InnoDB: Corrected the handling of trailing spaces in the
ucs2
character set. (Bug#7350)
InnoDB: Use native tmpfile()
function on
Netware. All InnoDB temporary files are created under
sys:\tmp
. Previously, InnoDB temporary
files were never deleted on Netware.
InnoDB: Fix a race condition that could cause the assertion
space->n_pending_flushes == 0
to fail
in fil0fil.c
, in
fil_space_free()
, in DROP
TABLE
or in ALTER TABLE
.
InnoDB: ALTER TABLE ... ADD CONSTRAINT PRIMARY KEY
...
complained about bad foreign key definition.
(Bug#7831)
InnoDB: Fix a theoretical hang over the adaptive hash latch
in InnoDB if one runs INSERT ... SELECT
...
(binlog not enabled), or a multi-table
UPDATE
or DELETE
, and
only the read tables are InnoDB type, the rest are MyISAM.
(Bug#7879)
Fixed a bug in max_heap_table_size
handling, that resulted in Table is full
error when the table was still smaller than the limit. (Bug#7791).
Fixed a symlink vulnerability in the mysqlaccess script. Reported by Javier Fernandez-Sanguino Pena and Debian Security Audit Team. (CVE-2005-0004)
mysqlbinlog forgot to add backquotes
around the collation of user variables (causing later
parsing problems as BINARY
is a reserved
word). (Bug#7793)
Ensured that mysqldump
--single-transaction sets its transaction
isolation level to REPEATABLE READ
before
proceeding (otherwise if the MySQL server was configured to
run with a default isolation level lower than
REPEATABLE READ
it could give an
inconsistent dump). (Bug#7850)
Changed mysql client so that including
\p
as part of a prompt command uses the
name of the shared memory connection when the connection is
using shared memory. (Bug#7922)
Fixed a problem in the server where executing a multi-statement query more than once with the query cache active could yield incorrect result sets. (Bug#7966)
Fixed that a 4.1.10 slave can connect to a master <
3.23.50 without hanging (the reason for the hang is a bug in
these quite old masters -- SELECT
@@unknown_var
hangs them -- which was fixed in
MySQL 3.23.50). (Bug#7965)
Fixed a bug where MySQL was allowing concurrent updates (inserts, deletes) to a table if binary logging is enabled. Changed to ensure that all updates are executed in a serialized fashion, because they are executed serialized when binlog is replayed. (Bug#7879)
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.