BLOB
values can't ``reliably'' be used in GROUP BY
or
ORDER BY
or DISTINCT
. Only the first max_sort_length
bytes (default 1024) are used when comparing BLOB
bs in these cases.
This can be changed with the -O max_sort_length
option to
mysqld
. A workaround for most cases is to use a substring:
SELECT DISTINCT LEFT(blob,2048) FROM tbl_name
.
BIGINT
or DOUBLE
(both are
normally 64 bits long). It depends on the function which precision one
gets. The general rule is that bit functions are done with BIGINT
precision, IF
, and ELT()
with BIGINT
or DOUBLE
precision and the rest with DOUBLE
precision. One should try to
avoid using bigger unsigned long long values than 63 bits
(9223372036854775807) for anything else than bit fields!
BLOB
and TEXT
columns, automatically
have all trailing spaces removed when retrieved. For CHAR
types this
is okay, and may be regarded as a feature according to ANSI SQL92. The bug is
that in MySQL, VARCHAR
columns are treated the same way.
ENUM
and SET
columns in one table.
safe_mysqld
re-directs all messages from mysqld
to the
mysqld
log. One problem with this is that if you execute
mysqladmin refresh
to close and reopen the log,
stdout
and stderr
are still redirected to the old log.
If you use --log
extensively, you should edit safe_mysqld
to
log to `'hostname'.err' instead of `'hostname'.log' so you can
easily reclaim the space for the old log by deleting the old one and
executing mysqladmin refresh
.
UPDATE
statement, columns are updated from left to right.
If you refer to a updated column, you will get the updated value instead of the
original value. For example:
mysql> UPDATE tbl_name SET KEY=KEY+1,KEY=KEY+1will update
KEY
with 2
instead of with 1
.
select * from temporary_table, temporary_table as t2;
rollback
data) some things
behaves a little different in MySQL than in other SQL servers:
(This is just to ensure that MySQL never need to do a rollback
for a SQL command). This may be a little akward at times as column
values must be checked in the application, but this will actually give
you a nice speed increase as it allows MySQL to do some
optimizations that otherwice would be very hard to do.
If you set a colum to a wrong value, MySQL will instead of doing
a rollback instead store the best possible value
in the column.
NULL
into a column that doesn't take
NULL
values, MySQL
will store 0 or ''
(empty
string) in it instead. (This behavour can however be changed with the
-DDONT_USE_DEFAULT_FIELDS compile option).
DATE
and DATETIME
columns. (Like 2000-02-31 or 2000-02-00).
If the date is totally wrong, MySQL will store the special
0000-00-00 date value in the column.
enum
to an not supported value, it will be set to
the error value 'empty string', with numeric value 0.
PROCEDURE
on a query with returns an empty set then
in some cases the PROCEDURE
will not transform the columns.
The following is known bugs in earlier versions of MySQL:
DROP TABLE
on a table that is
one among many tables that is locked with LOCK TABLES
.
LOCK table
with WRITE
FLUSH TABLES
UPDATE
that updated a key with
a WHERE
on the same key may have failed because the key was used to
search for records and the same row may have been found multiple times:
UPDATE tbl_name SET KEY=KEY+1 WHERE KEY > 100;A workaround is to use:
mysql> UPDATE tbl_name SET KEY=KEY+1 WHERE KEY+0 > 100;This will work because MySQL will not use index on expressions in the
WHERE
clause.
For platform-specific bugs, see the sections about compiling and porting.
Go to the first, previous, next, last section, table of contents.