| 
|
Chapter 1. General Information
The MySQL® software delivers a very fast, multi-threaded,
multi-user, and robust SQL (Structured Query Language) database
server. MySQL Server is intended for mission-critical, heavy-load
production systems as well as for embedding into mass-deployed
software. MySQL is a registered trademark of MySQL AB.
The MySQL software is Dual Licensed. Users can choose to use the
MySQL software as an Open Source product under the terms of the GNU
General Public License (http://www.fsf.org/licenses/)
or can purchase a standard commercial license from MySQL AB. See
http://www.mysql.com/company/legal/licensing/ for
more information on our licensing policies.
The following list describes some sections of particular interest in
this manual:
For a discussion about the capabilities of the MySQL Database
Server, see Section 1.4.2, “The Main Features of MySQL”.
For installation instructions, see Chapter 2, Installing and Upgrading MySQL.
For information about upgrading MySQL, see
Section 2.10, “Upgrading MySQL”.
For information about configuring and administering MySQL
Server, see Chapter 5, Database Administration.
For information about setting up replication servers, see
Chapter 6, Replication.
For tips on porting the MySQL Database Software to new
architectures or operating systems, see
Appendix E, Porting to Other Systems.
For a tutorial introduction to the MySQL Database Server, see
Chapter 3, Tutorial.
For benchmarking information, see the
sql-bench benchmarking directory in your
MySQL distribution.
For a history of new features and bugfixes, see
Appendix D, MySQL Change History.
For a list of currently known bugs and misfeatures, see
Section A.8, “Known Issues in MySQL”.
For future plans, see Section 1.6, “MySQL Development Roadmap”.
For a list of all the contributors to this project, see
Appendix C, Credits.
Important:
To report errors (often called “bugs”), please use the
instructions at Section 1.8, “How to Report Bugs or Problems”.
If you have found a sensitive security bug in MySQL Server, please
let us know immediately by sending an email message to
<security@mysql.com>.
This is the Reference Manual for the MySQL Database System,
version 5.0, through release 5.0.19. It is
not intended for use with older versions of the MySQL software due
to the many functional and other differences between MySQL
5.0 and previous versions.
If you are using a version 4.1 release of the MySQL
software, please refer to the
MySQL 3.23, 4.0, 4.1 Reference Manual, which covers the
3.23, 4.0, and 4.1 series of MySQL software releases. Differences
between minor versions of MySQL 5.0 are noted in the
present text with reference to release numbers
(5.0.x).
Because this manual serves as a reference, it does not provide
general instruction on SQL or relational database concepts. It
also does not teach you how to use your operating system or
command-line interpreter.
The MySQL Database Software is under constant development, and the
Reference Manual is updated frequently as well. The most recent
version of the manual is available online in searchable form at
http://dev.mysql.com/doc/. Other formats also are available
there, including HTML, PDF, and Windows CHM versions.
The Reference Manual source files are written in DocBook XML
format. The HTML version and other formats are produced
automatically, primarily using the DocBook XSL stylesheets. For
information about DocBook, see http://docbook.org/
If you have any suggestions concerning additions or corrections to
this manual, please send them to the documentation team at
<docs@mysql.com>.
This manual was originally written by David Axmark and Michael
“Monty” Widenius. It is maintained by the MySQL
Documentation Team, consisting of Paul DuBois, Stefan Hinz, Mike
Hillyer, and Jon Stephens. For the many other contributors, see
Appendix C, Credits.
The copyright to this manual is owned by the Swedish company MySQL
AB. MySQL® and the MySQL logo are registered trademarks of
MySQL AB. Other trademarks and registered trademarks referred to
in this manual are the property of their respective owners, and
are used for identification purposes only.
1.2. Conventions Used in This Manual
This manual uses certain typographical conventions:
Text in this style is used for SQL
statements; database, table, and column names; program listings
and source code; and environment variables. Example: “To
reload the grant tables, use the FLUSH
PRIVILEGES statement.”
Text in this style indicates input that
you type in examples.
Text in this style indicates the names of
executable programs and scripts, examples being
mysql (the MySQL command line client program)
and mysqld (the MySQL server executable).
Text in this style is used for
variable input for which you should substitute a value of your
own choosing.
Filenames and directory names are written like this: “The
global my.cnf file is located in the
/etc directory.”
Character sequences are written like this: “To specify a
wildcard, use the ‘%’
character.”
Text in this style is used for emphasis.
Text in this style is used in
table headings and to convey especially strong emphasis.
When commands are shown that are meant to be executed from within a
particular program, the prompt shown preceding the command indicates
which command to use. For example, shell>
indicates a command that you execute from your login shell, and
mysql> indicates a statement that you execute
from the mysql client program:
shell> type a shell command here
mysql> type a mysql statement here
The “shell” is your command interpreter. On Unix, this
is typically a program such as sh,
csh, or bash. On Windows, the
equivalent program is command.com or
cmd.exe, typically run in a console window.
When you enter a command or statement shown in an example, do not
type the prompt shown in the example.
Database, table, and column names must often be substituted into
statements. To indicate that such substitution is necessary, this
manual uses db_name,
tbl_name, and
col_name. For example, you might see a
statement like this:
mysql> SELECT col_name FROM db_name.tbl_name;
This means that if you were to enter a similar statement, you would
supply your own database, table, and column names, perhaps like
this:
mysql> SELECT author_name FROM biblio_db.author_list;
SQL keywords are not case sensitive and may be written in any
lettercase. This manual uses uppercase.
In syntax descriptions, square brackets
(‘[’ and
‘]’) indicate optional words or
clauses. For example, in the following statement, IF
EXISTS is optional:
DROP TABLE [IF EXISTS] tbl_name
When a syntax element consists of a number of alternatives, the
alternatives are separated by vertical bars
(‘|’). When one member from a set of
choices may be chosen, the alternatives are
listed within square brackets (‘[’
and ‘]’):
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
When one member from a set of choices must be
chosen, the alternatives are listed within braces
(‘{’ and
‘}’):
{DESCRIBE | DESC} tbl_name [col_name | wild]
An ellipsis (...) indicates the omission of
a section of a statement, typically to provide a shorter version of
more complex syntax. For example, INSERT ...
SELECT is shorthand for the form of
INSERT statement that is followed by a
SELECT statement.
An ellipsis can also indicate that the preceding syntax element of a
statement may be repeated. In the following example, multiple
reset_option values may be given, with
each of those after the first preceded by commas:
RESET reset_option [,reset_option] ...
Commands for setting shell variables are shown using Bourne shell
syntax. For example, the sequence to set the CC
environment variable and run the configure
command looks like this in Bourne shell syntax:
shell> CC=gcc ./configure
If you are using csh or tcsh,
you must issue commands somewhat differently:
shell> setenv CC gcc
shell> ./configure
1.3. Overview of MySQL AB
MySQL AB is the company of the MySQL founders and main developers.
MySQL AB was originally established in Sweden by David Axmark, Allan
Larsson, and Michael “Monty” Widenius.
We are dedicated to developing the MySQL database software and
promoting it to new users. MySQL AB owns the copyright to the MySQL
source code, the MySQL logo and (registered) trademark, and this
manual. See Section 1.4, “Overview of the MySQL Database Management System”.
The MySQL core values show our dedication to MySQL and Open Source.
These core values direct how MySQL AB works with the MySQL server
software:
To be the best and the most widely used database in the world
To be available and affordable by all
To be easy to use
To be continuously improved while remaining fast and safe
To be fun to use and improve
To be free from bugs
These are the core values of the company MySQL AB and its employees:
We subscribe to the Open Source philosophy and support the Open
Source community
We aim to be good citizens
We prefer partners that share our values and mindset
We answer email and provide support
We are a virtual company, networking with others
We work against software patents
The MySQL Web site (http://www.mysql.com/) provides
the latest information about MySQL and MySQL AB.
By the way, the “AB” part of the company name is the
acronym for the Swedish “aktiebolag,” or “stock
company.” It translates to “MySQL, Inc.” In
fact, MySQL, Inc. and MySQL GmbH are examples of MySQL AB
subsidiaries. They are located in the United States and Germany,
respectively.
1.4. Overview of the MySQL Database Management System
MySQL, the most popular Open Source SQL database management system,
is developed, distributed, and supported by MySQL AB. MySQL AB is a
commercial company, founded by the MySQL developers. It is a second
generation Open Source company that unites Open Source values and
methodology with a successful business model.
The MySQL Web site (http://www.mysql.com/) provides
the latest information about MySQL software and MySQL AB.
MySQL is a database management system.
A database is a structured collection of data. It may be
anything from a simple shopping list to a picture gallery or the
vast amounts of information in a corporate network. To add,
access, and process data stored in a computer database, you need
a database management system such as MySQL Server. Since
computers are very good at handling large amounts of data,
database management systems play a central role in computing, as
standalone utilities, or as parts of other applications.
MySQL is a relational database management system.
A relational database stores data in separate tables rather than
putting all the data in one big storeroom. This adds speed and
flexibility. The SQL part of “MySQL” stands for
“Structured Query Language.” SQL is the most common
standardized language used to access databases and is defined by
the ANSI/ISO SQL Standard. The SQL standard has been evolving
since 1986 and several versions exist. In this manual,
“SQL-92” refers to the standard released in 1992,
“SQL:1999” refers to the standard released in 1999,
and “SQL:2003” refers to the current version of the
standard. We use the phrase “the SQL standard” to
mean the current version of the SQL Standard at any time.
MySQL software is Open Source.
Open Source means that it is possible for anyone to use and
modify the software. Anybody can download the MySQL software
from the Internet and use it without paying anything. If you
wish, you may study the source code and change it to suit your
needs. The MySQL software uses the GPL (GNU General Public
License), http://www.fsf.org/licenses/, to define
what you may and may not do with the software in different
situations. If you feel uncomfortable with the GPL or need to
embed MySQL code into a commercial application, you can buy a
commercially licensed version from us. See the MySQL Licensing
Overview for more information
(http://www.mysql.com/company/legal/licensing/).
The MySQL Database Server is very fast, reliable, and easy to
use.
If that is what you are looking for, you should give it a try.
MySQL Server also has a practical set of features developed in
close cooperation with our users. You can find a performance
comparison of MySQL Server with other database managers on our
benchmark page. See Section 7.1.4, “The MySQL Benchmark Suite”.
MySQL Server was originally developed to handle large databases
much faster than existing solutions and has been successfully
used in highly demanding production environments for several
years. Although under constant development, MySQL Server today
offers a rich and useful set of functions. Its connectivity,
speed, and security make MySQL Server highly suited for
accessing databases on the Internet.
MySQL Server works in client/server or embedded systems.
The MySQL Database Software is a client/server system that
consists of a multi-threaded SQL server that supports different
backends, several different client programs and libraries,
administrative tools, and a wide range of application
programming interfaces (APIs).
We also provide MySQL Server as an embedded multi-threaded
library that you can link into your application to get a
smaller, faster, easier-to-manage standalone product.
A large amount of contributed MySQL software is available.
It is very likely that your favorite application or language
supports the MySQL Database Server.
The official way to pronounce “MySQL” is “My Ess
Que Ell” (not “my sequel”), but we don't mind if
you pronounce it as “my sequel” or in some other
localized way.
We started out with the intention of using the
mSQL database system to connect to our tables
using our own fast low-level (ISAM) routines. However, after some
testing, we came to the conclusion that mSQL
was not fast enough or flexible enough for our needs. This
resulted in a new SQL interface to our database but with almost
the same API interface as mSQL. This API was
designed to allow third-party code that was written for use with
mSQL to be ported easily for use with MySQL.
The derivation of the name MySQL is not clear. Our base directory
and a large number of our libraries and tools have had the prefix
“my” for well over 10 years. However, co-founder
Monty Widenius's daughter is also named My. Which of the two gave
its name to MySQL is still a mystery, even for us.
The name of the MySQL Dolphin (our logo) is “Sakila,”
which was chosen by the founders of MySQL AB from a huge list of
names suggested by users in our “Name the Dolphin”
contest. The winning name was submitted by Ambrose Twebaze, an
Open Source software developer from Swaziland, Africa. According
to Ambrose, the feminine name Sakila has its roots in SiSwati, the
local language of Swaziland. Sakila is also the name of a town in
Arusha, Tanzania, near Ambrose's country of origin, Uganda.
1.4.2. The Main Features of MySQL
The following list describes some of the important characteristics
of the MySQL Database Software. See also
Section 1.6, “MySQL Development Roadmap”, for more information about current and
upcoming features.
Internals and Portability:
Written in C and C++.
Tested with a broad range of different compilers.
Works on many different platforms. See
Section 2.1.1, “Operating Systems Supported by MySQL”.
Uses GNU Automake, Autoconf, and Libtool for portability.
APIs for C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, and
Tcl are available. See Chapter 22, APIs and Libraries.
Fully multi-threaded using kernel threads. It can easily use
multiple CPUs if they are available.
Provides transactional and non-transactional storage engines.
Uses very fast B-tree disk tables (MyISAM)
with index compression.
Relatively easy to add other storage engines. This is useful
if you want to add an SQL interface to an in-house database.
A very fast thread-based memory allocation system.
Very fast joins using an optimized one-sweep multi-join.
In-memory hash tables, which are used as temporary tables.
SQL functions are implemented using a highly optimized class
library and should be as fast as possible. Usually there is no
memory allocation at all after query initialization.
The MySQL code is tested with Purify (a commercial memory
leakage detector) as well as with Valgrind, a GPL tool
(http://developer.kde.org/~sewardj/).
The server is available as a separate program for use in a
client/server networked environment. It is also available as a
library that can be embedded (linked) into standalone
applications. Such applications can be used in isolation or in
environments where no network is available.
Data Types:
Many data types: signed/unsigned integers 1, 2, 3, 4, and 8
bytes long, FLOAT,
DOUBLE, CHAR,
VARCHAR, TEXT,
BLOB, DATE,
TIME, DATETIME,
TIMESTAMP, YEAR,
SET, ENUM, and OpenGIS
spatial types. See Chapter 11, Data Types.
Fixed-length and variable-length records.
Statements and Functions:
Full operator and function support in the
SELECT and WHERE clauses
of queries. For example:
mysql> SELECT CONCAT(first_name, ' ', last_name)
-> FROM citizen
-> WHERE income/dependents > 10000 AND age > 30;
Full support for SQL GROUP BY and
ORDER BY clauses. Support for group
functions (COUNT(), COUNT(DISTINCT
...), AVG(),
STD(), SUM(),
MAX(), MIN(), and
GROUP_CONCAT()).
Support for LEFT OUTER JOIN and
RIGHT OUTER JOIN with both standard SQL and
ODBC syntax.
Support for aliases on tables and columns as required by
standard SQL.
DELETE, INSERT,
REPLACE, and UPDATE
return the number of rows that were changed (affected). It is
possible to return the number of rows matched instead by
setting a flag when connecting to the server.
The MySQL-specific SHOW command can be used
to retrieve information about databases, database engines,
tables, and indexes.
The EXPLAIN command can be used to
determine how the optimizer resolves a query.
Function names do not clash with table or column names. For
example, ABS is a valid column name. The
only restriction is that for a function call, no spaces are
allowed between the function name and the
‘(’ that follows it. See
Section 9.5, “Treatment of Reserved Words in MySQL”.
You can mix tables from different databases in the same query
(as of MySQL 3.22).
Security:
Scalability and Limits:
Handles large databases. We use MySQL Server with databases
that contain 50 million records. We also know of users who use
MySQL Server with 60,000 tables and about 5,000,000,000 rows.
Up to 64 indexes per table are allowed (32 before MySQL
4.1.2). Each index may consist of 1 to 16 columns or parts of
columns. The maximum index width is 1000 bytes (500 before
MySQL 4.1.2). An index may use a prefix of a column for
CHAR, VARCHAR,
BLOB, or TEXT column
types.
Connectivity:
Clients can connect to the MySQL server using TCP/IP sockets
on any platform. On Windows systems in the NT family (NT,
2000, XP, or 2003), clients can connect using named pipes. On
Unix systems, clients can connect using Unix domain socket
files.
In MySQL 4.1 and higher, Windows servers also support
shared-memory connections if started with the
--shared-memory option. Clients can connect
through shared memory by using the
--protocol=memory option.
The Connector/ODBC (MyODBC) interface provides MySQL support
for client programs that use ODBC (Open Database Connectivity)
connections. For example, you can use MS Access to connect to
your MySQL server. Clients can be run on Windows or Unix.
MyODBC source is available. All ODBC 2.5 functions are
supported, as are many others. See
Chapter 23, Connectors.
The Connector/J interface provides MySQL support for Java
client programs that use JDBC connections. Clients can be run
on Windows or Unix. Connector/J source is available. See
Chapter 23, Connectors.
MySQL Connector/NET enables developers to easily create .NET
applications that require secure, high-performance data
connectivity with MySQL. It implements the required ADO.NET
interfaces and integrates into ADO.NET aware tools. Developers
can build applications using their choice of .NET languages.
MySQL Connector/NET is a fully managed ADO.NET driver written
in 100% pure C#. See Chapter 23, Connectors.
Localization:
The server can provide error messages to clients in many
languages. See Section 5.11.2, “Setting the Error Message Language”.
Full support for several different character sets, including
latin1 (cp1252), german,
big5, ujis, and more.
For example, the Scandinavian characters
‘å’,
‘ä’ and
‘ö’ are allowed in table and
column names. Unicode support is available as of MySQL 4.1.
All data is saved in the chosen character set. All comparisons
for normal string columns are case-insensitive.
Sorting is done according to the chosen character set (using
Swedish collation by default). It is possible to change this
when the MySQL server is started. To see an example of very
advanced sorting, look at the Czech sorting code. MySQL Server
supports many different character sets that can be specified
at compile time and runtime.
Clients and Tools:
MySQL Server has built-in support for SQL statements to check,
optimize, and repair tables. These statements are available
from the command line through the
mysqlcheck client. MySQL also includes
myisamchk, a very fast command-line utility
for performing these operations on MyISAM
tables. See Chapter 5, Database Administration.
All MySQL programs can be invoked with the
--help or -? options to
obtain online assistance.
This section addresses the questions, “How stable
is MySQL Server?” and, “Can I
depend on MySQL Server in this project?” We will
try to clarify these issues and answer some important questions
that concern many potential users. The information in this section
is based on data gathered from the mailing lists, which are very
active in identifying problems as well as reporting types of use.
The original code stems back to the early 1980s. It provides a
stable code base, and the ISAM table format
used by the original storage engine remains backward-compatible.
At TcX, the predecessor of MySQL AB, MySQL code has worked in
projects since mid-1996, without any problems. When the MySQL
Database Software initially was released to a wider public, our
new users quickly found some pieces of untested code. Each new
release since then has had fewer portability problems, even though
each new release has also had many new features.
Each release of the MySQL Server has been usable. Problems have
occurred only when users try code from the “gray
zones.” Naturally, new users don't know what the gray zones
are; this section therefore attempts to document those areas that
are currently known. The descriptions mostly deal with Versions
3.23 and later of MySQL Server. All known and reported bugs are
fixed in the latest version, with the exception of those listed in
the bugs section, which are design-related. See
Section A.8, “Known Issues in MySQL”.
The MySQL Server design is multi-layered with independent modules.
Some of the newer modules are listed here with an indication of
how well-tested each of them is:
Replication (Stable)
Large groups of servers using replication are in production
use, with good results. Work on enhanced replication features
is continuing.
InnoDB tables (Stable)
The InnoDB transactional storage engine has
been stable since version 3.23.49. InnoDB
is being used in large, heavy-load production systems.
BDB tables (Stable)
The Berkeley DB code is very stable, but we
are still improving the BDB transactional
storage engine interface in MySQL Server.
Full-text searches (Stable)
Full-text searching is widely used. Important feature
enhancements were added in MySQL 4.0 and 4.1.
MyODBC 3.51 (Stable)
MyODBC 3.51 uses ODBC SDK 3.51 and is in
wide production use. Some issues brought up appear to be
application-related and independent of the ODBC driver or
underlying database server.
1.4.4. How Large MySQL Tables Can Be
MySQL 3.22 had a 4GB (4 gigabyte) limit on table size. With the
MyISAM storage engine in MySQL 3.23, the
maximum table size was increased to 65536 terabytes
(2567 – 1 bytes). With this
larger allowed table size, the maximum effective table size for
MySQL databases is usually determined by operating system
constraints on file sizes, not by MySQL internal limits.
The InnoDB storage engine maintains
InnoDB tables within a tablespace that can be
created from several files. This allows a table to exceed the
maximum individual file size. The tablespace can include raw disk
partitions, which allows extremely large tables. The maximum
tablespace size is 64TB.
The following table lists some examples of operating system
file-size limits. This is only a rough guide and is not intended
to be definitive. For the most up-to-date information, be sure to
check the documentation specific to your operating system.
On Linux 2.2, you can get MyISAM tables larger
than 2GB in size by using the Large File Support (LFS) patch for
the ext2 filesystem. On Linux 2.4, patches also exist for ReiserFS
to get support for big files (up to 2TB). Most current Linux
distributions are based on kernel 2.4 or higher and include all
the required LFS patches. With JFS and XFS, petabyte and larger
files are possible on Linux. However, the maximum available file
size still depends on several factors, one of them being the
filesystem used to store MySQL tables.
For a detailed overview about LFS in Linux, have a look at Andreas
Jaeger's Large File Support in Linux page
at http://www.suse.de/~aj/linux_lfs.html.
Windows users please note: FAT and VFAT (FAT32) are
not considered suitable for production use
with MySQL. Use NTFS instead.
By default, MySQL creates MyISAM tables with an
internal structure that allows a maximum size of about 4GB. You
can check the maximum table size for a MyISAM
table with the SHOW TABLE STATUS statement or
with myisamchk -dv
tbl_name. See
Section 13.5.4, “SHOW Syntax”.
If you need a MyISAM table that is larger than
4GB and your operating system supports large files, the
CREATE TABLE statement supports
AVG_ROW_LENGTH and MAX_ROWS
options. See Section 13.1.5, “CREATE TABLE Syntax”. You can also change
these options with ALTER TABLE to increase a
table's maximum allowable size after the table has been created.
See Section 13.1.2, “ALTER TABLE Syntax”.
Other ways to work around file-size limits for
MyISAM tables are as follows:
1.4.5. Year 2000 Compliance
The MySQL Server itself has no problems with Year 2000 (Y2K)
compliance:
MySQL Server uses Unix time functions that handle dates into
the year 2037 for
TIMESTAMP values. For
DATE and DATETIME
values, dates through the year 9999 are
accepted.
All MySQL date functions are implemented in one source file,
sql/time.cc, and are coded very carefully
to be year 2000-safe.
In MySQL, the YEAR data type can store the
years 0 and 1901 to
2155 in one byte and display them using two
or four digits. All two-digit years are considered to be in
the range 1970 to 2069,
which means that if you store 01 in a
YEAR column, MySQL Server treats it as
2001.
The following simple demonstration illustrates that MySQL Server
has no problems with DATE or
DATETIME values through the year 9999, and no
problems with TIMESTAMP values until after the
year 2030:
mysql> DROP TABLE IF EXISTS y2k;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE y2k (date DATE,
-> date_time DATETIME,
-> time_stamp TIMESTAMP);
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO y2k VALUES
-> ('1998-12-31','1998-12-31 23:59:59','1998-12-31 23:59:59'),
-> ('1999-01-01','1999-01-01 00:00:00','1999-01-01 00:00:00'),
-> ('1999-09-09','1999-09-09 23:59:59','1999-09-09 23:59:59'),
-> ('2000-01-01','2000-01-01 00:00:00','2000-01-01 00:00:00'),
-> ('2000-02-28','2000-02-28 00:00:00','2000-02-28 00:00:00'),
-> ('2000-02-29','2000-02-29 00:00:00','2000-02-29 00:00:00'),
-> ('2000-03-01','2000-03-01 00:00:00','2000-03-01 00:00:00'),
-> ('2000-12-31','2000-12-31 23:59:59','2000-12-31 23:59:59'),
-> ('2001-01-01','2001-01-01 00:00:00','2001-01-01 00:00:00'),
-> ('2004-12-31','2004-12-31 23:59:59','2004-12-31 23:59:59'),
-> ('2005-01-01','2005-01-01 00:00:00','2005-01-01 00:00:00'),
-> ('2030-01-01','2030-01-01 00:00:00','2030-01-01 00:00:00'),
-> ('2040-01-01','2040-01-01 00:00:00','2040-01-01 00:00:00'),
-> ('9999-12-31','9999-12-31 23:59:59','9999-12-31 23:59:59');
Query OK, 14 rows affected, 2 warnings (0.00 sec)
Records: 14 Duplicates: 0 Warnings: 2
mysql> SELECT * FROM y2k;
+------------+---------------------+---------------------+
| date | date_time | time_stamp |
+------------+---------------------+---------------------+
| 1998-12-31 | 1998-12-31 23:59:59 | 1998-12-31 23:59:59 |
| 1999-01-01 | 1999-01-01 00:00:00 | 1999-01-01 00:00:00 |
| 1999-09-09 | 1999-09-09 23:59:59 | 1999-09-09 23:59:59 |
| 2000-01-01 | 2000-01-01 00:00:00 | 2000-01-01 00:00:00 |
| 2000-02-28 | 2000-02-28 00:00:00 | 2000-02-28 00:00:00 |
| 2000-02-29 | 2000-02-29 00:00:00 | 2000-02-29 00:00:00 |
| 2000-03-01 | 2000-03-01 00:00:00 | 2000-03-01 00:00:00 |
| 2000-12-31 | 2000-12-31 23:59:59 | 2000-12-31 23:59:59 |
| 2001-01-01 | 2001-01-01 00:00:00 | 2001-01-01 00:00:00 |
| 2004-12-31 | 2004-12-31 23:59:59 | 2004-12-31 23:59:59 |
| 2005-01-01 | 2005-01-01 00:00:00 | 2005-01-01 00:00:00 |
| 2030-01-01 | 2030-01-01 00:00:00 | 2030-01-01 00:00:00 |
| 2040-01-01 | 2040-01-01 00:00:00 | 0000-00-00 00:00:00 |
| 9999-12-31 | 9999-12-31 23:59:59 | 0000-00-00 00:00:00 |
+------------+---------------------+---------------------+
14 rows in set (0.00 sec)
The final two TIMESTAMP column values are zero
because the year values (2040,
9999) exceed the TIMESTAMP
maximum. The TIMESTAMP data type, which is used
to store the current time, supports values that range from
'1970-01-01 00:00:00' to '2030-01-01
00:00:00' on 32-bit machines (signed value). On 64-bit
machines, TIMESTAMP handles values up to
2106 (unsigned value).
Although MySQL Server itself is Y2K-safe, you may run into
problems if you use it with applications that are not Y2K-safe.
For example, many old applications store or manipulate years using
two-digit values (which are ambiguous) rather than four-digit
values. This problem may be compounded by applications that use
values such as 00 or 99 as
“missing” value indicators. Unfortunately, these
problems may be difficult to fix because different applications
may be written by different programmers, each of whom may use a
different set of conventions and date-handling functions.
Thus, even though MySQL Server has no Y2K problems, it
is the application's responsibility to provide unambiguous
input. See Section 11.3.4, “Y2K Issues and Date Types”, for MySQL
Server's rules for dealing with ambiguous date input data that
contains two-digit year values.
1.5. Overview of the MaxDB Database Management System
MaxDB is a heavy-duty enterprise database. The database management
system is SAP-certified.
MaxDB is the new name of a database management system formerly
called SAP DB. In 2003 SAP AG and MySQL AB joined a partnership and
re-branded the database system to MaxDB. The development of MaxDB
has continued since then as it was done before—through the SAP
developer team.
MySQL AB cooperates closely with the MaxDB team at SAP around
delivering improvements to the MaxDB product. Joint efforts include
development of new native drivers to enable more efficient usage of
MaxDB in the Open Source community, and improvement of documentation
to expand the MaxDB user base. Interoperability features between
MySQL and MaxDB database also are seen as important. For example,
the new MaxDB Synchronization Manager supports data synchronization
from MaxDB to MySQL.
The MaxDB database management system does not share a common
code-base with the MySQL database management system. The MaxDB and
MySQL database management systems are independent products provided
by MySQL AB.
MySQL AB offers a complete portfolio of Professional Services for
MaxDB.
MaxDB is an ANSI SQL-92 (entry level) compliant relational
database management system (RDBMS) from SAP AG, that is delivered
by MySQL AB as well. MaxDB fulfills the needs for enterprise
usage: safety, scalability, high concurrency, and performance. It
runs on all major operating systems. Over the years it has proven
able to run SAP R/3 and terabytes of data in 24×7 operation.
The database development started in 1977 as a research project at
the Technical University of Berlin. In the early 1980s it became a
database product that subsequently was owned by Nixdorf, Siemens
Nixdorf, Software AG, and today by SAP AG. Along the way, it has
been named VDN, Reflex, Supra 2, DDB/4, Entire SQL-DB-Server, and
ADABAS D. In 1997, SAP took over the software from Software AG and
renamed it to SAP DB. Since October 2000, SAP DB sources
additionally were released as Open Source under the GNU General
Public License (see Appendix J, GNU General Public License).
In 2003, SAP AG and MySQL AB formed a partnership and re-branded
the database system to MaxDB.
The history of MaxDB goes back to SAP DB, SAP AG's DBMS. That is,
MaxDB is a re-branded and enhanced version of SAP DB. For many
years, MaxDB has been used for small, medium, and large
installations of the mySAP Business Suite and other demanding SQL
applications requiring an enterprise-class DBMS with regard to the
number of users, the transactional workload, and the size of the
database.
SAP DB was meant to provide an alternative to third-party database
systems such as Oracle, Microsoft SQL Server, and DB2 by IBM. In
October 2000, SAP AG released SAP DB under the GNU GPL license
(see Appendix J, GNU General Public License), thus making it Open Source
software.
Today, MaxDB is used in about 3,500 SAP customer installations
worldwide. Moreover, the majority of all DBMS installations on
Unix and Linux within SAP’s IT department rely on MaxDB. MaxDB
is tuned toward heavy-duty online transaction processing (OLTP)
with several thousand users and database sizes ranging from
several hundred GB to multiple TB.
In 2003, SAP and MySQL concluded a partnership and development
cooperation agreement. As a result, SAP's database system SAP DB
has been delivered under the name of MaxDB by MySQL since the
release of version 7.5 (November 2003).
Version 7.5 of MaxDB is a direct advancement of the SAP DB 7.4
code base. Therefore, the MaxDB software version 7.5 can be used
as a direct upgrade of previous SAP DB versions starting 7.2.04
and higher.
The former SAP DB development team at SAP AG is responsible, now
as before, for developing and supporting MaxDB. MySQL AB
cooperates closely with the MaxDB team at SAP around delivering
improvements to the MaxDB product, see Section 1.5, “Overview of the MaxDB Database Management System”.
Both SAP AG and MySQL AB handle the sale and distribution of
MaxDB. The advancement of MaxDB and the MySQL Server leverages
synergies that benefit both product lines.
MaxDB is subjected to SAP AG's complete quality assurance process
before it is shipped with SAP solutions or provided as a download
from the MySQL site.
MaxDB is a heavy-duty, SAP-certified Open Source database for OLTP
and OLAP usage which offers high reliability, availability,
scalability, and a very comprehensive feature set. It is targeted
for large mySAP Business Suite environments and other applications
that require maximum enterprise-level database functionality and
complements the MySQL database server.
MaxDB operates as a client/server product. It was developed to
meet the needs of installations in OLTP and Data
Warehouse/OLAP/Decision Support scenarios and offers these
benefits:
Easy configuration and
administration: GUI-based Installation Manager and
Database Manager as single administration tools for DBMS
operations
Around-the-clock operation, no planned
downtimes, no permanent attendance required:
Automatic space management, no need for reorganizations
Sophisticated backup and restore
capabilities: Online and incremental backups,
recovery wizard to guide you through the recovery scenario
Supports large number of users, database
sizes in the terabytes, and demanding workloads:
Proven reliability, performance, and scalability
High availability: Cluster
support, standby configuration, hot standby configuration
1.5.4. Licensing and Support
MaxDB can be used under the same licenses available for the other
products distributed by MySQL AB. Thus, MaxDB is available under
the GNU General Public License, and a commercial license. For more
information on licensing, see
http://www.mysql.com/company/legal/licensing/.
MySQL AB offers MaxDB technical support to non-SAP customers.
MaxDB support is available on various levels (Basic, Silver, and
Gold), which expand from unlimited email/web-support to 24×7
phone support for business critical systems.
MySQL AB also offers Licenses and Support for MaxDB when used with
SAP Applications, like SAP NetWeaver and mySAP Business Suite. For
more information on licenses and support for your needs, please
contact MySQL AB. (See
http://www.mysql.com/company/contact/.)
Consulting and training services are available. MySQL gives
classes on MaxDB at regular intervals. See
http://www.mysql.com/training/ for a list of
classes.
1.5.5. Feature Differences Between MaxDB and MySQL
MaxDB is MySQL AB's SAP-certified database. The MaxDB database
server complements the MySQL AB product portfolio. Some MaxDB
features are not available on the MySQL database management server
and vice versa.
The following list summarizes the main differences between MaxDB
and MySQL; it is not complete.
MaxDB runs as a client/server system. MySQL can run as a
client/server system or as an embedded system.
MaxDB might not run on all platforms supported by MySQL.
MaxDB uses a proprietary network protocol for client/server
communication. MySQL uses either TCP/IP (with or without SSL
encryption), sockets (under Unix-like systems), or named pipes
or shared memory (under Windows NT-family systems).
MaxDB supports stored procedures and functions. MySQL 5.0 and
up also supports stored procedures and function and functions.
MaxDB supports programming of triggers through an SQL
extension. MySQL 5.0 supports triggers. MaxDB contains a
debugger for stored procedure languages, can cascade nested
triggers, and supports multiple triggers per action and row.
MaxDB is distributed with user interfaces that are text-based,
graphical, or Web-based. MySQL is distributed with text-based
user interfaces only; graphical user interfaces (MySQL Query
Browser, MySQL Administrator) are shipped separately from the
main distributions. Web-based user interfaces for MySQL are
offered by third parties.
MaxDB supports a number of programming interfaces that also
are supported by MySQL. For developing with MaxDB, the MaxDB
ODBC Driver, SQL Database Connectivity (SQLDBC), JDBC Driver,
Perl and Python modules and a MaxDB PHP extension, which
provides access to MySQL MaxDB databases using PHP, are
available. Third Party Programming Interfaces: Support for OLE
DB, ADO, DAO, RDO and .NET through ODBC. MaxDB supports
embedded SQL with C/C++.
MaxDB includes administrative features that MySQL does not
have: job scheduling by time, event, and alert, and sending
messages to a database administrator on alert thresholds.
(MySQL has scheduling support starting with version 5.1.6.)
1.5.6. Interoperability Features Between MaxDB and MySQL
MaxDB and MySQL are independent database management servers. The
interoperation of the systems is possible in a way that the
systems can exchange their data. To exchange data between MaxDB
and MySQL, you can use the import and export tools of the systems
or the MaxDB Synchronization Manager. The import and export tools
can be used to transfer data in an infrequent, manual fashion. The
MaxDB Synchronization Manager offers faster, automatic data
transfer capabilities.
The MaxDB Loader can be used to export data and object
definitions. The Loader can export data using MaxDB internal,
binary formats and text formats (CSV). Data exported from MaxDB in
text formats can be imported into MySQL using the
mysqlimport client program. To export MySQL
data, you can use either mysqldump to create
INSERT statements or SELECT ... INTO
OUTFILE to create a text file (CSV). Use the MaxDB
Loader to import the data files generated by MySQL.
Object definitions can be exchanged between the systems using
MaxDB Loader and the MySQL tool mysqldump. As
the SQL dialects of both systems differ slightly and MaxDB has
features currently not supported by MySQL like SQL constraints, we
recommend to hand-tune the definition files. The
mysqldump tool offers an option
--compatible=maxdb to produce output that is
compatible with MaxDB to make porting easier.
The MaxDB Synchronization Manager is available as part of MaxDB
7.6. The Synchronization Manager supports creation of asynchronous
replication scenarios between several MaxDB instances. However,
interoperability features also are planned, so that the
Synchronization Manager supports replication to and from a MySQL
server.
In the first release, the Synchronization Manager supports
inserting data into MySQL. This means that initially only
replication from MaxDB to MySQL is supported. In the course of
2005, exporting of data from a MySQL server to the Synchronization
Manager will be added, thus adding support for MySQL to MaxDB
replication scenarios.
1.5.7. MaxDB-Related Links
The main page for MaxDB information is
http://www.mysql.com/products/maxdb, which provides
details about the features of the MaxDB database management
systems and has pointers to available documentation.
The MySQL Reference Manual does not contain any MaxDB
documentation other than the introduction given in this section.
MaxDB has its own documentation, which is called the MaxDB library
and is available at
http://dev.mysql.com/doc/maxdb/index.html.
MySQL AB runs a community mailing list on MaxDB; see
http://lists.mysql.com/maxdb. The list shows a
vivid community discussion. Many of the core developers contribute
to it. Product announcements are sent to the list.
A Web forum on MaxDB is available at
http://forums.mysql.com/. The forum focuses on
MaxDB questions not related to SAP applications.
1.6. MySQL Development Roadmap
This section provides a snapshot of the MySQL development roadmap,
including major features implemented in or planned for various
MySQL releases. The following sections provide information for
each release series.
The current production release series is MySQL 5.0, which was
declared stable for production use as of MySQL 5.0.15, released in
October 2005. The previous production release series was MySQL
4.1, which was declared stable for production use as of MySQL
4.1.7, released in October 2004. “Production status”
means that future 5.0 and 4.1 development is limited only to
bugfixes. For the older MySQL 4.0 and 3.23 series, only critical
bugfixes are made.
Active MySQL development is currently taking place in the MySQL
5.0 and 5.1 release series, and new features are being added only
to the latter.
Before upgrading from one release series to the next, please see
the notes in Section 2.10, “Upgrading MySQL”.
The most requested features and the versions in which they were
implemented or are scheduled for implementation are summarized in
the following table:
1.6.1. What's New in MySQL 5.0
The following features are implemented in MySQL 5.0.
BIT Data
Type: Can be used to store numbers in binary
notation. See Section 11.1.1, “Overview of Numeric Types”.
Cursors: Elementary support
for 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()”.
Information Schema: The
introduction of the INFORMATION_SCHEMA
database in MySQL 5.0 provided a standards-compliant means
for accessing the MySQL Server's metadata; that is, data
about the databases (schemas) on the server and the objects
which they contain. See
Chapter 20, The INFORMATION_SCHEMA Database.
Instance Manager: Can be
used to start and stop the MySQL Server, even from a remote
host. See Section 5.5, “mysqlmanager — The MySQL Instance Manager”.
Precision Math: MySQL 5.0
introduced stricter criteria for acceptance or rejection of
data, and implemented a new library for fixed-point
arithmetic. These contributed to a much higher degree of
accuracy for mathematical operations and greater control
over invalid values. See Chapter 21, Precision Math.
Storage Engines: Storage
engines added in MySQL 5.0 include
ARCHIVE and FEDERATED.
See Section 14.8, “The ARCHIVE Storage Engine”, and
Section 14.7, “The FEDERATED Storage Engine”.
Stored Routines: Support
for named stored procedures and stored functions was
implemented in MySQL 5.0. See
Chapter 17, Stored Procedures and Functions.
Strict Mode and Standard Error
Handling: MySQL 5.0 added a strict mode where by
it follows standard SQL in a number of ways in which it did
not previously. Support for standard SQLSTATE error messages
was also implemented. See Section 5.2.5, “The Server SQL Mode”.
Triggers: MySQL 5.0 added
limited support for triggers. See
Chapter 18, Triggers, and
Section 1.9.5.4, “Stored Routines and Triggers”.
VARCHAR Data
Type: The maximum effective length of a
VARCHAR column was increased to 65,532
bytes, and stripping of trailing whitespace was eliminated.
See Section 11.4, “String Types”.
Views: MySQL 5.0 added
support for named, updatable views. See
Chapter 19, Views, and
Section 1.9.5.6, “Views”.
XA Transactions: See
Section 13.4.7, “XA Transactions”.
Performance enhancements: A
number of improvements were made in MySQL 5.0 to improve the
speed of certain types of queries and in the handling of
certain types. These include:
MySQL 5.0 introduces a new “greedy”
optimizer which can greatly reduce the time required to
arrive at a query execution plan. This is particularly
noticeable where several tables are to be joined and no
good join keys can otherwise be found. Without the
greedy optimizer, the complexity of the search for an
execution plan is calculated as
N!, where
N is the number of tables to
be joined. The greedy optimizer reduces this to
N!/(D-1)!,
where D is the depth of the
search. Although the greedy optimizer does not guarantee
the best possible of all execution plans (this is
currently being worked on), it can reduce the time spent
arriving at an execution plan for a join involving a
great many tables — 30, 40, or more — by a
factor of as much as 1,000. This should eliminate most
if not all situations where users thought that the
optimizer had hung when trying to perform joins across
many tables.
Use of the Index Merge method to
obtain better optimization of AND and
OR relations over different keys.
(Previously, these were optimized only where both
relations in the WHERE clause
involved the same key.) This also applies to other
one-to-one comparison operators
(>, <, and
so on), including = and the
IN operator. This means that MySQL
can use multiple indexes in retrieving results for
conditions such as WHERE key1 > 4 OR key2
< 7 and even combinations of conditions
such as WHERE (key1 > 4 OR key2 < 7) AND
(key3 >= 10 OR key4 = 1). See
Section 7.2.6, “Index Merge Optimization”.
A new equality detector finds and optimizes
“hidden” equalities in joins. For example,
a WHERE clause such as
t1.c1=t2.c2 AND t2.c2=t3.c3 AND t1.c1 < 5
can be reduced to
t1.c1=t3.c3 AND t2.c2 < 5 AND t3.c3 < 5
These optimizations can be applied with any combination
of AND and OR
operators. See Section 7.2.10, “Nested Join Optimization”, and
Section 7.2.11, “Outer Join Simplification”.
Optimization of NOT IN and
NOT BETWEEN relations, reducing or
eliminating table scans for queries making use of them
by mean of range analysis. The performance of MySQL with
regard to these relations now matches its performance
with regard to IN and
BETWEEN.
The VARCHAR data type as implemented
in MySQL 5.0 is more efficient than in previous
versions, due to the elimination of the old (and
nonstandard) removal of trailing spaces during
retrieval.
The addition of a true BIT column
type; this type is much more efficient for storage and
retrieval of Boolean values than the workarounds
required in MySQL in versions previous to 5.0.
Performance Improvements in the
InnoDB Storage Engine:
New compact storage format which can save up to 20%
of the disk space required in previous
MySQL/InnoDB versions.
Faster recovery from a failed or aborted
ALTER TABLE.
Faster implementation of
TRUNCATE.
(See Section 14.2, “The InnoDB Storage Engine”.)
Performance Improvements in the
NDBCluster Storage Engine:
Faster handling of queries that use
IN and
BETWEEN.
Condition pushdown:
In cases involving the comparison of an unindexed
column with a constant, this condition is
“pushed down” to the cluster where it
is evaluated in all partitions simultaneously,
eliminating the need to send non-matching records
over the network. This can make such queries 10 to
100 times faster than in MySQL 4.1 Cluster.
See Section 7.2.1, “Optimizing Queries with EXPLAIN”, for more information.
(See Chapter 15, MySQL Cluster.)
For those wishing to take a look at the bleeding edge of MySQL
development, we make our BitKeeper repository for MySQL publicly
available. See Section 2.8.3, “Installing from the Development Source Tree”.
1.7. MySQL Information Sources
This section lists sources of additional information that you may
find helpful, such as the MySQL mailing lists and user forums, and
Internet Relay Chat.
1.7.1. MySQL Mailing Lists
This section introduces the MySQL mailing lists and provides
guidelines as to how the lists should be used. When you subscribe
to a mailing list, you receive all postings to the list as email
messages. You can also send your own questions and answers to the
list.
To subscribe to or unsubscribe from any of the mailing lists
described in this section, visit
http://lists.mysql.com/. For most of them, you can
select the regular version of the list where you get individual
messages, or a digest version where you get one large message per
day.
Please do not send messages about subscribing
or unsubscribing to any of the mailing lists, because such
messages are distributed automatically to thousands of other
users.
Your local site may have many subscribers to a MySQL mailing list.
If so, the site may have a local mailing list, so that messages
sent from lists.mysql.com to your site are
propagated to the local list. In such cases, please contact your
system administrator to be added to or dropped from the local
MySQL list.
If you wish to have traffic for a mailing list go to a separate
mailbox in your mail program, set up a filter based on the message
headers. You can use either the List-ID: or
Delivered-To: headers to identify list
messages.
The MySQL mailing lists are as follows:
announce
This list is for announcements of new versions of MySQL and
related programs. This is a low-volume list to which all MySQL
users should subscribe.
mysql
This is the main list for general MySQL discussion. Please
note that some topics are better discussed on the
more-specialized lists. If you post to the wrong list, you may
not get an answer.
bugs
This list is for people who want to stay informed about issues
reported since the last release of MySQL or who want to be
actively involved in the process of bug hunting and fixing.
See Section 1.8, “How to Report Bugs or Problems”.
internals
This list is for people who work on the MySQL code. This is
also the forum for discussions on MySQL development and for
posting patches.
mysqldoc
This list is for people who work on the MySQL documentation:
people from MySQL AB, translators, and other community
members.
benchmarks
This list is for anyone interested in performance issues.
Discussions concentrate on database performance (not limited
to MySQL), but also include broader categories such as
performance of the kernel, filesystem, disk system, and so on.
packagers
This list is for discussions on packaging and distributing
MySQL. This is the forum used by distribution maintainers to
exchange ideas on packaging MySQL and on ensuring that MySQL
looks and feels as similar as possible on all supported
platforms and operating systems.
java
This list is for discussions about the MySQL server and Java.
It is mostly used to discuss JDBC drivers such as MySQL
Connector/J.
win32
This list is for all topics concerning the MySQL software on
Microsoft operating systems, such as Windows 9x, Me, NT, 2000,
XP, and 2003.
myodbc
This list is for all topics concerning connecting to the MySQL
server with ODBC.
gui-tools
This list is for all topics concerning MySQL graphical user
interface tools such as MySQL Administrator
and MySQL Query Browser.
cluster
This list is for discussion of MySQL Cluster.
dotnet
This list is for discussion of the MySQL server and the .NET
platform. It is mostly related to MySQL Connector/Net.
plusplus
This list is for all topics concerning programming with the
C++ API for MySQL.
perl
This list is for all topics concerning Perl support for MySQL
with DBD::mysql.
If you're unable to get an answer to your questions from a MySQL
mailing list or forum, one option is to purchase support from
MySQL AB. This puts you in direct contact with MySQL developers.
The following table shows some MySQL mailing lists in languages
other than English. These lists are not operated by MySQL AB.
1.7.1.1. Guidelines for Using the Mailing Lists
Please don't post mail messages from your browser with HTML mode
turned on. Many users don't read mail with a browser.
When you answer a question sent to a mailing list, if you
consider your answer to have broad interest, you may want to
post it to the list instead of replying directly to the
individual who asked. Try to make your answer general enough
that people other than the original poster may benefit from it.
When you post to the list, please make sure that your answer is
not a duplication of a previous answer.
Try to summarize the essential part of the question in your
reply. Don't feel obliged to quote the entire original message.
When answers are sent to you individually and not to the mailing
list, it is considered good etiquette to summarize the answers
and send the summary to the mailing list so that others may have
the benefit of responses you received that helped you solve your
problem.
1.7.2. MySQL Community Support at the MySQL Forums
The forums at http://forums.mysql.com are an
important community resource. Many forums are available, grouped
into these general categories:
Migration
MySQL Usage
MySQL Connectors
Programming Languages
Tools
3rd-Party Applications
Storage Engines
MySQL Technology
SQL Standards
Business
1.7.3. MySQL Community Support on Internet Relay Chat (IRC)
In addition to the various MySQL mailing lists and forums, you can
find experienced community people on Internet Relay Chat (IRC).
These are the best networks/channels currently known to us:
freenode (see
http://www.freenode.net/ for servers)
#mysql is primarily for MySQL questions,
but other database and general SQL questions are welcome.
Questions about PHP, Perl, or C in combination with MySQL are
also common.
If you are looking for IRC client software to connect to an IRC
network, take a look at xChat
(http://www.xchat.org/). X-Chat (GPL licensed) is
available for Unix as well as for Windows platforms (a free
Windows build of X-Chat is available at
http://www.silverex.org/download/).
1.8. How to Report Bugs or Problems
Before posting a bug report about a problem, please try to verify
that it is a bug and that it has not been reported already:
Start by searching the MySQL online manual at
http://dev.mysql.com/doc/. We try to keep the manual up to
date by updating it frequently with solutions to newly found
problems. The change history
(http://dev.mysql.com/doc/mysql/en/news.html) can be
particularly useful since it is quite possible that a newer
version contains a solution to your problem.
If you get a parse error for a SQL statement, please check your
syntax closely. If you can't find something wrong with it, it's
extremely likely that your current version of MySQL Server
doesn't support the syntax you are using. If you are using the
current version and the manual doesn't cover the syntax that you
are using, MySQL Server doesn't support your statement. In this
case, your options are to implement the syntax yourself or email
<licensing@mysql.com> and ask for an offer to
implement it.
If the manual covers the syntax you are using, but you have an
older version of MySQL Server, you should check the MySQL change
history to see when the syntax was implemented. In this case,
you have the option of upgrading to a newer version of MySQL
Server.
For solutions to some common problems, see
Appendix A, Problems and Common Errors.
Search the bugs database at
http://bugs.mysql.com/ to see whether the bug has
been reported and fixed.
Search the MySQL mailing list archives at
http://lists.mysql.com/. See
Section 1.7.1, “MySQL Mailing Lists”.
You can also use http://www.mysql.com/search/ to
search all the Web pages (including the manual) that are located
at the MySQL AB Web site.
If you can't find an answer in the manual, the bugs database, or the
mailing list archives, check with your local MySQL expert. If you
still can't find an answer to your question, please use the
following guidelines for reporting the bug.
The normal way to report bugs is to visit
http://bugs.mysql.com/, which is the address for our
bugs database. This database is public and can be browsed and
searched by anyone. If you log in to the system, you can enter new
reports. If you have no Web access, you can generate a bug report by
using the mysqlbug script described at the end of
this section.
Bugs posted in the bugs database at
http://bugs.mysql.com/ that are corrected for a given
release are noted in the change history.
If you have found a sensitive security bug in MySQL, you can send
email to <security@mysql.com>.
To discuss problems with other users, you can use one of the MySQL
mailing lists. Section 1.7.1, “MySQL Mailing Lists”.
Writing a good bug report takes patience, but doing it right the
first time saves time both for us and for yourself. A good bug
report, containing a full test case for the bug, makes it very
likely that we will fix the bug in the next release. This section
helps you write your report correctly so that you don't waste your
time doing things that may not help us much or at all. Please read
this section carefully and make sure that all the information
described here is included in your report.
Preferably, you should test the problem using the latest production
or development version of MySQL Server before posting. Anyone should
be able to repeat the bug by just using mysql test <
script_file on your test case or by running the shell or
Perl script that you include in the bug report. Any bug that we are
able to repeat has a high chance of being fixed in the next MySQL
release.
It is most helpful when a good description of the problem is
included in the bug report. That is, give a good example of
everything you did that led to the problem and describe, in exact
detail, the problem itself. The best reports are those that include
a full example showing how to reproduce the bug or problem. See
Section E.1.6, “Making a Test Case If You Experience Table Corruption”.
Remember that it is possible for us to respond to a report
containing too much information, but not to one containing too
little. People often omit facts because they think they know the
cause of a problem and assume that some details don't matter. A good
principle to follow is that if you are in doubt about stating
something, state it. It is faster and less troublesome to write a
couple more lines in your report than to wait longer for the answer
if we must ask you to provide information that was missing from the
initial report.
The most common errors made in bug reports are (a) not including the
version number of the MySQL distribution that you use, and (b) not
fully describing the platform on which the MySQL server is installed
(including the platform type and version number). These are highly
relevant pieces of information, and in 99 cases out of 100, the bug
report is useless without them. Very often we get questions like,
“Why doesn't this work for me?” Then we find that the
feature requested wasn't implemented in that MySQL version, or that
a bug described in a report has been fixed in newer MySQL versions.
Errors often are platform-dependent. In such cases, it is next to
impossible for us to fix anything without knowing the operating
system and the version number of the platform.
If you compiled MySQL from source, remember also to provide
information about your compiler if it is related to the problem.
Often people find bugs in compilers and think the problem is
MySQL-related. Most compilers are under development all the time and
become better version by version. To determine whether your problem
depends on your compiler, we need to know what compiler you used.
Note that every compiling problem should be regarded as a bug and
reported accordingly.
If a program produces an error message, it is very important to
include the message in your report. If we try to search for
something from the archives, it is better that the error message
reported exactly matches the one that the program produces. (Even
the lettercase should be observed.) It is best to copy and paste the
entire error message into your report. You should never try to
reproduce the message from memory.
If you have a problem with Connector/ODBC (MyODBC), please try to
generate a trace file and send it with your report. See
Section 23.1.1.9, “How to Report MyODBC Problems or Bugs”.
If your report includes long query output lines from test cases that
you run with the mysql command-line tool, you can
make the output more readable by using the
--vertical option or the \G
statement terminator. The EXPLAIN SELECT example
later in this section demonstrates the use of \G.
Please include the following information in your report:
The version number of the MySQL distribution you are using (for
example, MySQL 5.0.19). You can find out which version you are
running by executing mysqladmin version. The
mysqladmin program can be found in the
bin directory under your MySQL installation
directory.
The manufacturer and model of the machine on which you
experience the problem.
The operating system name and version. If you work with Windows,
you can usually get the name and version number by
double-clicking your My Computer icon and pulling down the
“Help/About Windows” menu. For most Unix-like
operating systems, you can get this information by executing the
command uname -a.
Sometimes the amount of memory (real and virtual) is relevant.
If in doubt, include these values.
If you are using a source distribution of the MySQL software,
include the name and version number of the compiler that you
used. If you have a binary distribut
| |