START-INFO-DIR-ENTRY * mysql: (mysql). *MySQL* documentation. END-INFO-DIR-ENTRY This is a manual for *MySQL*. This version is about the 3.23.39 version of *MySQL*. You can find a manual about any older version of *MySQL* in the binary or source distribution for that version. General Information About MySQL ******************************* This is the *MySQL* reference manual; it documents *MySQL* Version 3.23.39. As *MySQL* is work in progress, the manual gets updated frequently. There is a very good chance that this version is out of date, unless you are looking at it online. The most recent version of this manual is available at `http://www.mysql.com/documentation/' in many different formats. If you have a hard time finding information in the manual, you can try the searchable PHP version at `http://www.mysql.com/documentation/manual.php'. *MySQL* is a very fast, multi-threaded, multi-user, and robust SQL (Structured Query Language) database server. *MySQL* is free software. It is licensed with the *GNU GENERAL PUBLIC LICENSE* `http://www.gnu.org/'. *Note Licensing and Support::. The *MySQL* home page (http://www.mysql.com/) provides the latest information about *MySQL*. The following list describes some useful sections of the manual: * For information about the company behind *MySQL*, see *Note What is MySQL AB::. * For a discussion of *MySQL*'s capabilities, see *Note Features::. * For installation instructions, see *Note Installing::. * For tips on porting *MySQL* to new architectures or operating systems, see *Note Porting::. * For information about upgrading from a Version 3.22 release, see *Note Upgrading-from-3.22::. * For a tutorial introduction to *MySQL*, see *Note Tutorial::. * For examples of SQL and benchmarking information, see the benchmarking directory (`sql-bench' in the distribution). * For a history of new features and bug fixes, see *Note News::. * For a list of currently known bugs and misfeatures, see *Note Bugs::. * For future plans, see *Note TODO::. * For a list of all the contributors to this project, see *Note Credits::. *IMPORTANT:* Reports of errors (often called bugs), as well as questions and comments, should be sent to the mailing list at . *Note Bug reports::. The `mysqlbug' script should be used to generate bug reports. For source distributions, the `mysqlbug' script can be found in the `scripts' directory. For binary distributions, `mysqlbug' can be found in the `bin' directory. If you have found a sensitive security bug in *MySQL*, you should send an email to . If you have any suggestions concerning additions or corrections to this manual, please send them to the manual team at . This is a reference manual; it does not provide general instruction on SQL or relational database concepts. If you want general information about SQL, see *Note General-SQL::. For books that focus more specifically on *MySQL*, see *Note MySQL-Books::. What Is MySQL ============= *MySQL*, the most popular Open Source SQL database, is provided by *MySQL AB*. *MySQL AB* is a commercial company that builds its business providing services around the *MySQL* database. *Note What is 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*. Since computers are very good at handling large amounts of data, database management plays a central role in computing, as stand-alone 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 tables are linked by defined relations making it possible to combine data from several tables on request. The SQL part of *MySQL* stands for "Structured Query Language" - the most common standardized language used to access databases. *MySQL* is Open Source Software. Open Source means that it is possible for anyone to use and modify. Anybody can download *MySQL* from the Internet and use it without paying anything. Anybody so inclined can study the source code and change it to fit their needs. *MySQL* uses the GPL (GNU General Public License) `http://www.gnu.org', 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* into a commercial application you can buy a commercially licensed version from us. Why use *MySQL*? *MySQL* is very fast, reliable, and easy to use. If that is what you are looking for, you should give it a try. *MySQL* also has a very practical set of features developed in very close cooperation with our users. You can find a performance comparison of *MySQL* to some other database managers on our benchmark page. *Note Benchmarks::. *MySQL* was originally developed to handle very large databases much faster than existing solutions and has been successfully used in highly demanding production environments for several years. Though under constant development, *MySQL* today offers a rich and very useful set of functions. The connectivity, speed, and security make *MySQL* highly suited for accessing databases on the Internet. The technical features of *MySQL* For advanced technical information, see *Note Reference::. *MySQL* 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 several programming interfaces. We also provide *MySQL* as a multi-threaded library which you can link into your application to get a smaller, faster, easier to manage product. *MySQL* has a lot of contributed software available. It is very likely that you will find that your favorite application or language already supports *MySQL*. The official way to pronounce *MySQL* is "My Ess Que Ell" (not MY-SEQUEL). But we try to avoid correcting people who say MY-SEQUEL. What Is MySQL AB ================ *MySQL AB* is the Swedish company owned and run by the *MySQL* founders and main developers. We are dedicated to developing *MySQL* and spreading our database to new users. *MySQL AB* owns the copyright to the *MySQL* server source code and the *MySQL* trademark. A significant amount of revenues from our services goes to developing *MySQL*. *Note What-is::. *MySQL AB* has been profitable providing *MySQL* from the start. We don't get any outside funding, but have earned all our money ourselves. We are searching after partners that would like to support our development of *MySQL* so that we could accelerate the development pace. If you are interested in doing this, you can email about this! *MySQL AB* has currently 20+ people on its payroll and is growing rapidly. `http://www.mysql.com/development/team.html'. Our main sources of income are: * Commercial high quality support for *MySQL* provided by the *MySQL* developers themselves. If you are interested in purchasing a support contract, please visit `https://order.mysql.com/' to view our support options or to order support. * Consulting services. We have developers and consultants in 12 countries and partners in many other countries that can help you with almost any *MySQL* related issues. If you need consulting services, please email a good description of your needs to ! If we can't handle this ourselves we can usually find a partner or a developer that can help you with your problems. * We sell licenses for using *MySQL* as an embedded database. *Note Cost::. If you have a commercial product for which you need a fast, high quality database, but you can't afford to make your product Open Source, you can buy the right to use the *MySQL* server under a normal commercial copyright. If you are interested in this you can buy *MySQL* licenses at `https://order.mysql.com/' or contact us at . * Advertising. `http://www.mysql.com/' is a very popular web site with more than 10,000,000 page views per months (January 2001). By putting a banner on this you are guaranteed to reach a lot of potential customers in the Open source, Linux and database community. If you are interested in this email . * We are building a partner program to be able to provide *MySQL* services in every country. If you are interested in becoming a partner of *MySQL AB* please visit `http://www.mysql.com/information/partners.html' or email . * We provide *MySQL* training through our partner programs. For more information, please email . * The *MySQL* brand has, since 1995, been associated with speed and reliability, and is known to be something you can depend upon. If you are interested in using the *MySQL* trademark in your marketing, you can email about this. The *MySQL* core values show our dedication to *MySQL* and Open Source. We want *MySQL* to be: * The best and the most used database in the world. * Available and affordable for all. * Easy to use. * Continuously improved while remaining fast and safe. * Fun to use and improve. * Free from bugs. *MySQL AB* and the people of *MySQL AB*: * Promote Open Source Philosophy and support the Open Source Community. * Aim to be good citizens. * Prefer partners that share our values and mind-set. * Answer mail and give support. * Are a virtual company, networking with others. * Work against software patents. About This Manual ================= This manual is currently available in Texinfo, plain text, Info, HTML, PostScript, and PDF versions. The primary document is the Texinfo file. The HTML version is produced automatically using a modified version of `texi2html'. The plain text and Info versions are produced with `makeinfo'. The Postscript version is produced using `texi2dvi' and `dvips'. The PDF version is produced with `pdftex'. This manual is written and maintained by David Axmark, Michael (Monty) Widenius, Jeremy Cole, and Paul DuBois. For other contributors, see *Note Credits::. Conventions Used in This Manual ------------------------------- This manual uses certain typographical conventions: `constant' Constant-width font is used for command names and options; SQL statements; database, table and column names; C and Perl code; and environment variables. Example: "To see how `mysqladmin' works, invoke it with the `--help' option." `filename' Constant-width font with surrounding quotes is used for filenames and pathnames. Example: "The distribution is installed under the `/usr/local/' directory." `c' Constant-width font with surrounding quotes is also used to indicate character sequences. Example: "To specify a wild card, use the `%' character." _italic_ Italic font is used for emphasis, _like this_. *boldface* Boldface font is used for access privilege names (for example, "do not grant the *process* privilege lightly") and occasionally to convey *especially strong emphasis*. When commands are shown that are meant to be executed by a particular program, the program is indicated by a prompt shown before the command. For example, `shell>' indicates a command that you execute from your login shell, and `mysql>' indicates a command that you execute from the `mysql' client program: shell> type a shell command here mysql> type a mysql command here Shell commands are shown using Bourne shell syntax. If you are using a `csh'-style shell, you may need to issue commands slightly differently. For example, the sequence to set an environment variable and run a command looks like this in Bourne shell syntax: shell> VARNAME=value some_command For `csh', you would execute the sequence like this: shell> setenv VARNAME value shell> some_command Often, database, table, and column names must be substituted into commands. 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 statements may be written in uppercase or lowercase. When this manual shows a SQL statement, uppercase is used for particular keywords if those keywords are under discussion (to emphasize them) and lowercase is used for the rest of the statement. For example, you might see the following in a discussion of the `SELECT' statement: mysql> SELECT count(*) FROM tbl_name; On the other hand, in a discussion of the `COUNT()' function, the same statement would be written like this: mysql> select COUNT(*) from tbl_name; If no particular emphasis is intended, all keywords are written uniformly in uppercase. In syntax descriptions, square brackets (`[' and `]') are used to indicate optional words or clauses: 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} History of MySQL ================ We once started out with the intention of using `mSQL' 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 nor 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 chosen to ease porting of third-party code. The derivation of the name *MySQL* is not perfectly clear. Our base directory and a large number of our libraries and tools have had the prefix "my" for well over 10 years. However, Monty's daughter (some years younger) is also named My. Which of the two gave its name to *MySQL* is still a mystery, even for us. Books About MySQL ================= While this manual is still the right place for up to date technical information, its primary goal is to contain everything there is to know about *MySQL*. It is sometimes nice to have a bound book to read in bed or while you travel. Here is a list of books about *MySQL* and related subjects (in English). By purchasing a book through these hyperlinks provided herein, you are contributing to the development of *MySQL*. _MySQL_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0735709211&bfmtype=book) Publisher New Riders Author Paul DuBois Pub Date 1st Edition December 1999 ISBN 0735709211 Pages 800 Price $49.99 US Downloadable examples `samp_db' distribution (http://www.kitebird.com/mysql-book/) Errata are available here (http://www.kitebird.com/mysql-book/errata.html) Foreword by Michael "Monty" Widenius, *MySQL* Moderator. In _MySQL_, Paul DuBois provides you with a comprehensive guide to one of the most popular relational database systems. Paul has contributed to the online documentation for *MySQL* and is an active member of the *MySQL* community. The principal *MySQL* developer, Monty Widenius, and a network of his fellow developers reviewed the manuscript, and provided Paul with the kind of insight no one else could supply. Instead of merely giving you a general overview of *MySQL*, Paul teaches you how to make the most of its capabilities. Through two sample database applications that run throughout the book, he gives you solutions to problems you're sure to face. He helps you integrate *MySQL* efficiently with third-party tools, such as PHP and Perl, enabling you to generate dynamic Web pages through database queries. He teaches you to write programs that access *MySQL* databases, and also provides a comprehensive set of references to column types, operators, functions, SQL syntax, *MySQL* programming, C API, Perl `DBI', and PHP API. _MySQL_ simply gives you the kind of information you won't find anywhere else. If you use *MySQL*, this book provides you with: * An introduction to *MySQL* and SQL. * Coverage of *MySQL*'s data types and how to use them. * Thorough treatment of how to write client programs in C. * A guide to using the Perl `DBI' and PHP APIs for developing command-line and Web-based applications. * Tips on administrative issues such as user accounts, backup, crash recovery, and security. * Help in choosing an ISP for *MySQL* access. * A comprehensive reference for *MySQL*'s data types, operators, functions, and SQL statements and utilities. * Complete reference guides for *MySQL*'s C API, the Perl `DBI' API, and PHP's *MySQL*-related functions. _MySQL & mSQL_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=1565924347&bfmtype=book) Publisher O'Reilly Authors Randy Jay Yarger, George Reese & Tim King Pub Date 1st Edition July 1999 ISBN 1-56592-434-7, Order Number: 4347 Pages 506 Price $34.95 This book teaches you how to use *MySQL* and `mSQL', two popular and robust database products that support key subsets of SQL on both Linux and Unix systems. Anyone who knows basic C, Java, Perl, or Python can write a program to interact with a database, either as a stand-alone application or through a Web page. This book takes you through the whole process, from installation and configuration to programming interfaces and basic administration. Includes plenty of tutorial material. _Sams' Teach Yourself MySQL in 21 Days_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0672319144&bfmtype=book) Publisher Sams Authors Mark Maslakowski and Tony Butcher Pub Date June 2000 ISBN 0672319144 Pages 650 Price $39.99 Sams' _Teach Yourself MySQL in 21 Days_ is for intermediate Linux users who want to move into databases. A large share of the audience is Web developers who need a database to store large amounts of information that can be retrieved via the Web. Sams' _Teach Yourself MySQL in 21 Days_ is a practical, step-by-step tutorial. The reader will learn to design and employ this open source database technology into his or her Web site using practical, hands-on examples to follow. _E-Commerce Solutions with MySQL_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0761524452&bfmtype=book) Publisher Prima Communications, Inc. Authors N/A Pub Date January 2000 ISBN 0761524452 Pages 500 Price $39.99 No description available. _MySQL and PHP from Scratch_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0789724405&bfmtype=book) Publisher Que Authors N/A Pub Date September 2000 ISBN 0789724405 Pages 550 Price $34.99 This book puts together information on installing, setting up, and troubleshooting Apache, *MySQL*, PHP3, and IMP into one complete volume. You also learn how each piece is part of a whole by learning, step-by-step, how to create a web-based e-mail system. Learn to run the equivalent of Active Server Pages (ASP) using PHP3, set up an e-commerce site using a database and the Apache web server, and create a data entry system (such as sales, product quality tracking, customer preferences, etc) that no installation in the PC. _Professional MySQL Programming_ Available Barnes and Noble (http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=1861005164) Publisher Wrox Press, Inc. Authors N/A Pub Date Late 2001 ISBN 1861005164 Pages 1000 Price $49.99 No description available. _Professional Linux Programming_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=1861003013&bfmtype=book) Publisher Wrox Press, Inc. Authors N/A Pub Date September 2000 ISBN 1861003013 Pages 1155 Price $47.99 In this follow-up to the best-selling _Beginning Linux Programming_, you will learn from the authors' real-world knowledge and experience of developing software for Linux; you'll be taken through the development of a sample 'DVD Store' application, with 'theme' chapters addressing different aspects of its implementation. Meanwhile, individual "take-a-break" chapters cover important topics that go beyond the bounds of the central theme. All focus on the practical aspects of programming, showing how crucial it is to choose the right tools for the job, use them as they should be used, and get things right first time. _PHP and MySQL Web Development_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0672317842&bfmtype=book) Publisher Sams Authors Luke Welling, Laura Thomson Pub Date March 2001 ISBN 0672317842 Pages 700 Price $49.99 _PHP and MySQL Web Development_ introduces you to the advantages of implementing both *MySQL* and PHP. These advantages are detailed through the provision of both statistics and several case studies. A practical web application is developed throughout the book, providing you with the tools necessary to implement a functional online database. Each function is developed separately, allowing you the choice to incorporate only those parts that you would like to implement. Programming concepts of the PHP language are highlighted, including functions which tie *MySQL* support into a PHP script and advanced topics regarding table manipulation. *Books recommended by the MySQL Developers* _SQL-99 Complete, Really_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0879305681&bfmtype=book) Publisher CMP Books Authors Peter Gulutzan, Trudy Pelzer Pub Date April 1999 ISBN 0879305681 Pages 1104 Price $55.96 This book contains complete descriptions of the new standards for syntax, data structures, and retrieval processes of SQL databases. As an example-based reference manual, it includes all of the CLI functions, information, schema tables, and status codes, as well as a working SQL database provided on the companion disk. _C, A reference manual_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0133262243&bfmtype=book) Publisher Prentice Hall Authors Samuel P. Harbison, Guy L. Steele Pub Date September 1994 ISBN 0133262243 Pages 480 Price $35.99 A new and improved revision of the bestselling C language reference. This manual introduces the notion of "Clean C", writing C code that can be compiled as a C++ program, C programming style that emphasizes correctness, portability, maintainability, and incorporates the ISO C Amendment 1 (1994) which specifies new facilities for writing portable, international programs in C. _C++ for Real Programmers_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0120499428&bfmtype=book) Publisher Academic Press, Incorporated Authors Jeff Alger, Jim Keogh Pub Date February 1998 ISBN 0120499428 Pages 388 Price $39.95 _C++ For Real Programmers_ bridges the gap between C++ as described in beginner and intermediate-level books and C++ as it is practiced by experts. Numerous valuable techniques are described, organized into three simple themes: indirection, class hierarchies, and memory management. It also provides in-depth coverage of template creation, exception handling, pointers and optimization techniques. The focus of the book is on ANSI C++ and, as such, is compiler independent. _C++ For Real Programmers_ is a revision of _Secrets of the C++ Masters_ and includes a new appendix comparing C++ with Java. The book comes with a 3.5" disk for Windows with source code. _Algorithms in C_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0201514257&bfmtype=book) Publisher Addison Wesley Longman, Inc. Authors Robert Sedgewick Pub Date April 1990 ISBN 0201514257 Pages 648 Price $45.75 _Algorithms in C_ describes a variety of algorithms in a number of areas of interest, including: sorting, searching, string-processing, and geometric, graph and mathematical algorithms. The book emphasizes fundamental techniques, providing readers with the tools to confidently implement, run, and debug useful algorithms. _Multithreaded Programming with Pthreads_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0136807291&bfmtype=book) Publisher Prentice Hall Authors Bil Lewis, Daniel J. Berg Pub Date October 1997 ISBN 0136807291 Pages 432 Price $34.95 Based on the best-selling _Threads Primer_, _Multithreaded Programming with Pthreads_ gives you a solid understanding of Posix threads: what they are, how they work, when to use them, and how to optimize them. It retains the clarity and humor of _Threads Primer_, but includes expanded comparisons to Win32 and OS/2 implementations. Code examples tested on all of the major UNIX platforms are featured along with detailed explanations of how and why they use threads. _Programming the PERL DBI: Database Programming with PERL_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=1565926994&bfmtype=book) Publisher O'Reilly & Associates, Incorporated Authors Alligator Descartes, Tim Bunce Pub Date February 2000 ISBN 1565926994 Pages 400 Price $27.96 _Programming the Perl DBI_ is coauthored by Alligator Descartes, one of the most active members of the DBI community, and by Tim Bunce, the inventor of DBI. For the uninitiated, the book explains the architecture of DBI and shows you how to write DBI-based programs. For the experienced DBI dabbler, this book explains DBI's nuances and the peculiarities of each individual DBD. The book includes: * An introduction to DBI and its design. * How to construct queries and bind parameters. * Working with database, driver, and statement handles. * Debugging techniques. * Coverage of each existing DBD. * A complete reference to DBI. The Main Features of MySQL ========================== The following list describes some of the important characteristics of *MySQL*: * Fully multi-threaded using kernel threads. This means it can easily use multiple CPUs if available. * C, C++, Eiffel, Java, Perl, PHP, Python and Tcl APIs. *Note Clients::. * Works on many different platforms. *Note Which OS::. * Many column types: signed/unsigned integers 1, 2, 3, 4, and 8 bytes long, `FLOAT', `DOUBLE', `CHAR', `VARCHAR', `TEXT', `BLOB', `DATE', `TIME', `DATETIME', `TIMESTAMP', `YEAR', `SET', and `ENUM' types. *Note Column types::. * Very fast joins using an optimized one-sweep multi-join. * Full operator and function support in the `SELECT' and `WHERE' parts of queries. For example: mysql> SELECT CONCAT(first_name, " ", last_name) FROM tbl_name WHERE income/dependents > 10000 AND age > 30; * SQL functions are implemented through a highly optimized class library and should be as fast as possible! Usually there isn't any memory allocation at all after query initialization. * Full support for SQL `GROUP BY' and `ORDER BY' clauses. Support for group functions (`COUNT()', `COUNT(DISTINCT ...)', `AVG()', `STD()', `SUM()', `MAX()' and `MIN()'). * Support for `LEFT OUTER JOIN' and `RIGHT OUTER JOIN' with ANSI SQL and ODBC syntax. * You can mix tables from different databases in the same query (as of Version 3.22). * A privilege and password system that is very flexible and secure, and allows host-based verification. Passwords are secure because all password traffic is encrypted when you connect to a server. * ODBC (Open-DataBase-Connectivity) support for Win32 (with source). All ODBC 2.5 functions and many others. For example, you can use MS Access to connect to your *MySQL* server. *Note ODBC::. * Very fast B-tree disk tables with index compression. * Up to 32 indexes per table are allowed. Each index may consist of 1 to 16 columns or parts of columns. The maximum index length is 500 bytes (this may be changed when compiling *MySQL*). An index may use a prefix of a `CHAR' or `VARCHAR' field. * Fixed-length and variable-length records. * In-memory hash tables which are used as temporary tables. * Handles large databases. We are using *MySQL* with some databases that contain 50,000,000 records and we know of users that uses *MySQL* with 60,000 tables and about 5,000,000,000 rows * All columns have default values. You can use `INSERT' to insert a subset of a table's columns; those columns that are not explicitly given values are set to their default values. * Uses GNU Automake, Autoconf, and Libtool for portability. * Written in C and C++. Tested with a broad range of different compilers. * A very fast thread-based memory allocation system. * No memory leaks. *MySQL* has been tested with Purify, a commercial memory leakage detector. * Includes `myisamchk', a very fast utility for table checking, optimization, and repair. All of the functionality of `myisamchk' is also available through the SQL interface as well. *Note Maintenance::. * Full support for several different character sets, including ISO-8859-1 (Latin1), big5, ujis, and more. For example, the Scandinavian characters `a*', `a"' and `o"' are allowed in table and column names. * All data are saved in the chosen character set. All comparisons for normal string columns are case insensitive. * Sorting is done according to the chosen character set (the Swedish way by default). It is possible to change this when the *MySQL* server is started up. To see an example of very advanced sorting, look at the Czech sorting code. *MySQL* supports many different character sets that can be specified at compile and run time. * Aliases on tables and columns are allowed as in the SQL92 standard. * `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. * 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. *Note Reserved words::. * All *MySQL* programs can be invoked with the `--help' or `-?' options to obtain online assistance. * The server can provide error messages to clients in many languages. *Note Languages::. * Clients may connect to the *MySQL* server using TCP/IP Sockets, Unix Sockets (Unix), or Named Pipes (NT). * The *MySQL*-specific `SHOW' command can be used to retrieve information about databases, tables, and indexes. The `EXPLAIN' command can be used to determine how the optimizer resolves a query. How Stable Is MySQL? ==================== This section addresses the questions "How stable is *MySQL*?" and "Can I depend on *MySQL* in this project?" We will try to clarify some issues and to answer some of the more important questions that seem to concern many people. This section has been put together from information gathered from the mailing list (which is very active in reporting bugs). At TcX, *MySQL* has worked without any problems in our projects since mid-1996. When *MySQL* was released to a wider public, we noticed that there were some pieces of "untested code" that were quickly found by the new users who made queries in a manner different than our own. Each new release has had fewer portability problems than the previous one (even though each has had many new features). Each release of *MySQL* has been usable, and there have been problems only when users start to use code from the "gray zones." Naturally, outside users don't know what the gray zones are; this section attempts to indicate those that are currently known. The descriptions deal with Version 3.23 of *MySQL*. All known and reported bugs are fixed in the latest version, with the exception of the bugs listed in the bugs section, which are things that are design-related. *Note Bugs::. *MySQL* is written in multiple layers and different independent modules. These modules are listed below with an indication of how well-tested each of them is: *The ISAM table handler -- Stable* This manages storage and retrieval of all data in *MySQL* Version 3.22 and earlier. In all *MySQL* releases there hasn't been a single (reported) bug in this code. The only known way to get a corrupted table is to kill the server in the middle of an update. Even that is unlikely to destroy any data beyond rescue, because all data are flushed to disk between each query. There hasn't been a single bug report about lost data because of bugs in *MySQL*. *The MyISAM table handler -- Stable* This is new in *MySQL* Version 3.23. It's largely based on the ISAM table code but has a lot of new and very useful features. *The parser and lexical analyser -- Stable* There hasn't been a single reported bug in this system for a long time. *The C client code -- Stable* No known problems. In early Version 3.20 releases, there were some limitations in the send/receive buffer size. As of Version 3.21, the buffer size is now dynamic up to a default of 16M. *Standard client programs -- Stable* These include `mysql', `mysqladmin', `mysqlshow', `mysqldump', and `mysqlimport'. *Basic SQL -- Stable* The basic SQL function system and string classes and dynamic memory handling. Not a single reported bug in this system. *Query optimizer -- Stable* *Range optimizer -- Stable* *Join optimizer -- Stable* *Locking -- Gamma* This is very system-dependent. On some systems there are big problems using standard OS locking (`fcntl()'). In these cases, you should run the *MySQL* daemon with the `--skip-locking' flag. Problems are known to occur on some Linux systems, and on SunOS when using NFS-mounted file systems. *Linux threads -- Stable* The major problem found has been with the `fcntl()' call, which is fixed by using the `--skip-locking' option to `mysqld'. Some people have reported lockup problems with Version 0.5. LinuxThreads will need to be recompiled if you plan to use 1000+ concurrent connections. Although it is possible to run that many connections with the default LinuxThreads (however, you will never go above 1021), the default stack spacing of 2 MB makes the application unstable, and we have been able to reproduce a coredump after creating 1021 idle connections. *Note Linux::. *Solaris 2.5+ pthreads -- Stable* We use this for all our production work. *MIT-pthreads (Other systems) -- Stable* There have been no reported bugs since Version 3.20.15 and no known bugs since Version 3.20.16. On some systems, there is a "misfeature" where some operations are quite slow (a 1/20 second sleep is done between each query). Of course, MIT-pthreads may slow down everything a bit, but index-based `SELECT' statements are usually done in one time frame so there shouldn't be a mutex locking/thread juggling. *Other thread implementions -- Beta - Gamma* The ports to other systems are still very new and may have bugs, possibly in *MySQL*, but most often in the thread implementation itself. *`LOAD DATA ...', `INSERT ... SELECT' -- Stable* Some people thought they had found bugs here, but these usually have turned out to be misunderstandings. Please check the manual before reporting problems! *`ALTER TABLE' -- Stable* Small changes in Version 3.22.12. *DBD -- Stable* Now maintained by Jochen Wiedmann (). Thanks! *`mysqlaccess' -- Stable* Written and maintained by Yves Carlier (). Thanks! *`GRANT' -- Stable* Big changes made in *MySQL* Version 3.22.12. **MyODBC* (uses ODBC SDK 2.5) -- Gamma* It seems to work well with some programs. *Replication - Beta / Gamma* We are still working on replication, so don't expect this to be rock solid yet. On the other hand, some *MySQL* users are already using this with good results. *BDB Tables - Beta* The Berkeley DB code is very stable, but we are still improving the interface between *MySQL* and BDB tables, so it will take some time before this is as tested as the other table types. *InnoDB Tables - Alpha* This is a very recent addition to `MySQL' and is not very tested yet. *Automatic recovery of MyISAM tables - Beta* This only affects the new code that checks if the table was closed properly on open and executes an automatic check/repair of the table if it wasn't. *MERGE tables - Beta / Gamma* The usage of keys on `MERGE' tables is still not that tested. The other part of the `MERGE' code is quite well tested. *FULLTEXT - Beta* Text search seems to work, but is still not widely used. *MySQL AB* provides e-mail support for paying customers, but the *MySQL* mailing list usually provides answers to common questions. Bugs are usually fixed right away with a patch; for serious bugs, there is almost always a new release. Year 2000 Compliance ==================== *MySQL* itself has no problems with Year 2000 (Y2K) compliance: * *MySQL* uses Unix time functions and has no problems with dates until `2069'; all 2-digit years are regarded to be in the range `1970' to `2069', which means that if you store `01' in a `year' column, *MySQL* treats it as `2001'. * All *MySQL* date functions are stored in one file `sql/time.cc' and coded very carefully to be year 2000-safe. * In *MySQL* Version 3.22 and later, the new `YEAR' column type can store years `0' and `1901' to `2155' in 1 byte and display them using 2 or 4 digits. You may run into problems with applications that use *MySQL* in a way that is not Y2K-safe. For example, many old applications store or manipulate years using 2-digit values (which are ambiguous) rather than 4-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. Here is a simple demonstration illustrating that *MySQL* doesn't have any problems with dates until the year 2030: mysql> DROP TABLE IF EXISTS y2k; Query OK, 0 rows affected (0.01 sec) mysql> CREATE TABLE y2k (date date, date_time datetime, time_stamp timestamp); Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO y2k VALUES -> ("1998-12-31","1998-12-31 23:59:59",19981231235959), -> ("1999-01-01","1999-01-01 00:00:00",19990101000000), -> ("1999-09-09","1999-09-09 23:59:59",19990909235959), -> ("2000-01-01","2000-01-01 00:00:00",20000101000000), -> ("2000-02-28","2000-02-28 00:00:00",20000228000000), -> ("2000-02-29","2000-02-29 00:00:00",20000229000000), -> ("2000-03-01","2000-03-01 00:00:00",20000301000000), -> ("2000-12-31","2000-12-31 23:59:59",20001231235959), -> ("2001-01-01","2001-01-01 00:00:00",20010101000000), -> ("2004-12-31","2004-12-31 23:59:59",20041231235959), -> ("2005-01-01","2005-01-01 00:00:00",20050101000000), -> ("2030-01-01","2030-01-01 00:00:00",20300101000000), -> ("2050-01-01","2050-01-01 00:00:00",20500101000000); Query OK, 13 rows affected (0.01 sec) Records: 13 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM y2k; +------------+---------------------+----------------+ | date | date_time | time_stamp | +------------+---------------------+----------------+ | 1998-12-31 | 1998-12-31 23:59:59 | 19981231235959 | | 1999-01-01 | 1999-01-01 00:00:00 | 19990101000000 | | 1999-09-09 | 1999-09-09 23:59:59 | 19990909235959 | | 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 | | 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 | | 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 | | 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 | | 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 | | 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 | | 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 | | 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 | | 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 | | 2050-01-01 | 2050-01-01 00:00:00 | 00000000000000 | +------------+---------------------+----------------+ 13 rows in set (0.00 sec) This shows that the `DATE' and `DATETIME' types will not give any problems with future dates (they handle dates until the year 9999). The `TIMESTAMP' type, which is used to store the current time, has a range up to only `2030-01-01'. `TIMESTAMP' has a range of `1970' to `2030' on 32-bit machines (signed value). On 64-bit machines it handles times up to `2106' (unsigned value). Even though *MySQL* is Y2K-compliant, it is your responsibility to provide unambiguous input. See *Note Y2K issues:: for *MySQL*'s rules for dealing with ambiguous date input data (data containing 2-digit year values). General SQL Information and Tutorials ===================================== The following book has been recommended by several people on the *MySQL* mailing list: Judith S. Bowman, Sandra L. Emerson and Marcy Darnovsky _The Practical SQL Handbook: Using Structured Query Language_ Second Edition Addison-Wesley ISBN 0-201-62623-3 http://www.awl.com The following book has also received some recommendations by *MySQL* users: Martin Gruber _Understanding SQL_ ISBN 0-89588-644-8 Publisher Sybex 510 523 8233 Alameda, CA USA A SQL tutorial is available on the net at http://w3.one.net/~jhoffman/sqltut.htm Useful MySQL-related Links ========================== Apart from the following links, you can find and download a lot of *MySQL* programs, tools and APIs from the Contrib directory (http://www.mysql.com/Downloads/Contrib/). *MySQL* Tutorials and Manuals --------------------- MySQL Myths Debunked (http://netgraft.com/~mbac/research/mysqlmyths.html) *MySQL* used in the real world. `http://www.4t2.com/mysql' Information about the German MySQL mailing list. `http://www2.rent-a-database.de/mysql/' *MySQL* handbook in German. `http://www.bitmover.com:8888//home/bk/mysql' Web access to the *MySQL* BitKeeper repository. `http://www.analysisandsolutions.com/code/mybasic.htm' Beginners *MySQL* Tutorial on how to install and set up *MySQL* on a Windows machine. `http://www.devshed.com/Server_Side/MySQL/' A lot of *MySQL* tutorials. `http://mysql.hitstar.com/' MySQL manual in Chinese. `http://www.linuxplanet.com/linuxplanet/tutorials/1046/1/' Setting Up a *MySQL*-based Web site. `http://www.hotwired.com/webmonkey/backend/tutorials/tutorial1.html' *MySQL*-Perl tutorial. `http://www.iserver.com/support/contrib/perl5/modules.html' Installing new Perl modules that require locally installed modules. `http://www.hotwired.com/webmonkey/databases/tutorials/tutorial4.html' PHP/*MySQL* Tutorial. `http://www.useractive.com/' Hands on tutorial for *MySQL*. Porting MySQL/Using MySQL on Different Systems ---------------------------------------------- `http://xclave.macnn.com/MySQL/' The Mac OS Xclave. Running *MySQL* on Mac OS X. `http://www.prnet.de/RegEx/mysql.html' MySQL for Mac OS X Server. `http://www.latencyzero.com/macosx/mysql.html' Building MySQL for Mac OS X. `http://www.essencesw.com/Software/mysqllib.html' New Client libraries for the Mac OS Classic (Macintosh). `http://www.lilback.com/macsql/' Client libraries for Mac OS Classic (Macintosh). `http://sixk.maniasys.com/index_en.html' MySQL for Amiga Perl-related Links ------------------ `http://dbimysql.photoflux.com/' Perl DBI with *MySQL* FAQ. MySQL Discussion Forums ----------------------- `http://www.weberdev.com/' Examples using *MySQL*; (check Top 20) `http://futurerealm.com/forum/futureforum.htm' FutureForum Web Discussion Software. Commercial Applications that Support MySQL ------------------------------------------ `http://www.supportwizard.com/' SupportWizard; Interactive helpdesk on the Web (This product includes a licensed copy of *MySQL*.) `http://www.sonork.com/' Sonork, Instant Messenger that is not only Internet oriented. It's focused on private networks and on small to medium companies. Client is free, server is free for up to 5 seats. `http://www.stweb.org/' StWeb - Stratos Web and Application server - An easy-to-use, cross platform, Internet/Intranet development and deployment system for development of web-enabled applications. The standard version of StWeb has a native interface to *MySQL* database. `http://www.rightnowtech.com/' Right Now Web; Web automation for customer service. `http://www.icaap.org/Bazaar/' Bazaar; Interactive Discussion Forums with Web interface. `http://www.phonesweep.com/' PhoneSweepT is the world's first commercial Telephone Scanner. Many break-ins in recent years have come not through the Internet, but through unauthorized dial-up modems. PhoneSweep lets you find these modems by repeatedly placing phone calls to every phone number that your organization controls. PhoneSweep has a built-in expert system that can recognize more than 250 different kinds of remote-access programs, including Carbon Copy(TM), pcANYWHERE(TM), and Windows NT RAS. All information is stored in the SQL database. It then generates a comprehensive report detailing which services were discovered on which dial-up numbers in your organization. SQL Clients and Report Writers ------------------------------ urSQL (http://www.urbanresearch.com/software/utils/urbsql/index.html) SQL Editor and Query Utility. Custom syntax highlighting, editable results grid, exportable result-sets, basic *MySQL* admin functions, Etc.. For Windows. MySQL Data Manager (http://www.edatanew.com/) *MySQL* Data Manager * is platform independent web client (written in perl) for *MySQL* server over TCP/IP. `http://ksql.sourceforge.net/' KDE *MySQL* client. `http://www.ecker-software.de' A Windows GUI client by David Ecker. `http://www.icaap.org/software/kiosk/' Kiosk; a *MySQL* client for database management. Written in Perl. Will be a part of Bazaar. `http://www.casestudio.com/' Db design tool that supports MySQL 3.23. `http://home.skif.net/~voland/zeos/eng/index.html' Zeos - A client that supports *MySQL*, Interbase and PostgreSQL. `http://www.geocities.com/SiliconValley/Ridge/4280/GenericReportWriter/grwhome.html' A free report writer in Java `http://www.javaframework.de' MySQLExport - Export of *MySQL* create statements and data in a lot of different formats (SQL, HTML, CVS, text, ZIP, GZIP...) `http://dlabs.4t2.com' M2D, a *MySQL* Administration client for Windows. M2D supports administration of *MySQL* databases, creation of new databases and tables, editing, and more. `http://www.scibit.com/Products/Software/Utils/Mascon.asp' Mascon is a powerful Win32 GUI for administering MySQL databases. `http://www.rtlabs.com/' MacSQL Monitor. GUI for MySQL, ODBC, and JDBC databases for the Mac OS. Distributions that Include MySQL -------------------------------- `http://www.suse.com/' SuSE Linux (6.1 and above) `http://www.redhat.com/' RedHat Linux (7.0 and above) `http://distro.conectiva.com.br' Conectiva Linux (4.0 and above) Web Development Tools that Support *MySQL* ------------------------------------------ `http://www.php.net/' PHP: A server-side HTML-embedded scripting language. `http://www.midgard-project.org' The Midgard Application Server; a powerful Web development environment based on *MySQL* and PHP. `http://www.smartworker.org' SmartWorker is a platform for Web application development. `http://xsp.lentus.se/' XSP: e(X)tendible (S)erver (P)ages and is a HTML embedded tag language written in Java (previously known as XTAGS.) `http://www.dbServ.de/' dbServ is an extension to a web server to integrate database output into your HTML code. You may use any HTML function in your output. Only the client will stop you. It works as standalone server or as Java servlet. `http://www.chilisoft.com/' Platform independent ASP from Chili!Soft `http://www.voicenet.com/~zellert/tjFM' A JDBC driver for *MySQL*. `http://www.wernhart.priv.at/php/' *MySQL* + PHP demos. `http://www.dbwww.com/' ForwardSQL: HTML interface to manipulate *MySQL* databases. `http://www.daa.com.au/~james/www-sql/' WWW-SQL: Display database information. `http://www.minivend.com/minivend/' Minivend: A Web shopping cart. `http://www.heitml.com/' HeiTML: A server-side extension of HTML and a 4GL language at the same time. `http://www.metahtml.com/' Metahtml: A Dynamic Programming Language for WWW Applications. `http://www.binevolve.com/' VelocityGen for Perl and Tcl. `http://hawkeye.net/' Hawkeye Internet Server Suite. `http://www.fastflow.com/' Network Database Connection For Linux `http://www.wdbi.net/' WDBI: Web browser as a universal front end to databases which supports *MySQL* well. `http://www.webgroove.com/' WebGroove Script: HTML compiler and server-side scripting language. `http://www.ihtml.com/' A server-side Web site scripting language. `ftp://ftp.igc.apc.org/pub/myodbc/README' How to use *MySQL* with ColdFusion on Solaris. `http://calistra.com/MySQL/' Calistra's ODBC *MySQL* Administrator. `http://www.webmerger.com' Webmerger - This CGI tool interprets files and generates dynamic output based on a set of simple tags. Ready-to-run drivers for *MySQL* and PostgreSQL through ODBC. `http://phpclub.net/' PHPclub - Tips and tricks for PHP. `http://www.penguinservices.com/scripts' *MySQL* and Perl Scripts. `http://www.widgetchuck.com' The Widgetchuck; Web Site Tools and Gadgets `http://www.adcycle.com/' AdCycle - advertising management software. `http://sourceforge.net/projects/pwpage/' pwPage - provides an extremely fast and simple approach to the creation of database forms. That is, if a database table exists and an HTML page has been constructed using a few simple guidelines, pwPage can be immediately used for table data selections, insertions, updates, deletions and selectable table content reviewing. `http://www.omnis-software.com/products/studio/studio.html' OMNIS Studio is a rapid application development (RAD) tool. `http://www.webplus.com' talentsoft Web+ 4.6 - a powerful and comprehensive development language for use in creating web-based client/server applications without writing complicated, low-level, and time-consuming CGI programs. Database Design Tools with MySQL Support ---------------------------------------- `http://www.mysql.com/documentation/dezign/' "DeZign for databases" is a database development tool that uses an entity relationship diagram (ERD). Web Servers with *MySQL* Tools ------------------------------ `http://bourbon.netvision.net.il/mysql/mod_auth_mysql/' An Apache authentication module. `http://www.roxen.com/' The Roxen Challenger Web server. Extensions for Other Programs ----------------------------- `http://www.seawood.org/msql_bind/' *MySQL* support for BIND (The Internet Domain Name Server). `http://www.inet-interactive.com/sendmail/' *MySQL* support for Sendmail and Procmail. Using *MySQL* with Other Programs --------------------------------- `http://www.iserver.com/support/addonhelp/database/mysql/msaccess.html' Using *MySQL* with Access. `http://www.iserver.com/support/contrib/perl5/modules.html' Installing new Perl modules that require locally installed modules. ODBC-related Links ------------------ `http://www.iodbc.org/' Popular iODBC Driver Manager (libiodbc) now available as Open Source. `http://users.ids.net/~bjepson/freeODBC/' The FreeODBC Pages. `http://genix.net/unixODBC/' The unixODBC Project goals are to develop and promote unixODBC to be the definitive standard for ODBC on the Linux platform. This is to include GUI support for KDE. `http://www.sw-soft.com/products/BtrieveODBC/' A *MySQL*-based ODBC driver for Btrieve. *API*-related Links ------------------- `http://www.jppp.com/' Partially implemented TDataset-compatible components for *MySQL*. `http://www.riverstyx.net/qpopmysql/' qpopmysql - A patch to allow POP3 authentication from a *MySQL* database. There's also a link to Paul Khavkine's patch for Procmail to allow any MTA to deliver to users in a *MySQL* database. `http://www.pbc.ottawa.on.ca' Visual Basic class generator for Active X. `http://www.essencesw.com/Software/mysqllib.html' New Client libraries for the Mac OS Classic (Macintosh). `http://www.lilback.com/macsql/' Client libraries for the Macintosh. `http://www.essencesw.com/Plugins/mysqlplug.html' Plugin for REALbasic (for Macintosh) `http://www.iis.ee.ethz.ch/~neeri/macintosh/gusi-qa.html' A library that emulates BSD sockets and pthreads on Macintosh. This can be used if you want to compile the *MySQL* client library on Mac. It could probably even be sued to port *MySQL* to Macintosh, but we don't know of anyone that has tried that. `http://www.dedecker.net/jessie/scmdb/' SCMDB - an add-on for SCM that ports the *MySQL* C library to scheme (SCM). With this library scheme developers can make connections to a *MySQL* database and use embedded SQL in their programs. Other *MySQL*-related Links --------------------------- SAT (http://www.satisoft.com/) The Small Application Toolkit (SAT) is a collection of utilities intended to simplify the development of small, multi-user, GUI based applications in a (Microsoft -or- X) Windows Client / Unix Server environment. `http://www.wix.com/mysql-hosting/' Registry of Web providers who support *MySQL*. `http://www.softagency.co.jp/mysql/index.en.html' Links about using *MySQL* in Japan/Asia. `http://abattoir.cc.ndsu.nodak.edu/~nem/mysql/udf/' *MySQL* UDF Registry. `http://www.open.com.au/products.html' Commercial Web defect tracking system. `http://www.stonekeep.com/pts/' PTS: Project Tracking System. `http://tomato.nvgc.vt.edu/~hroberts/mot' Job and software tracking system. `http://www.cynergi.net/exportsql/' ExportSQL: A script to export data from Access95+. `http://SAL.KachinaTech.COM/H/1/MYSQL.html' SAL (Scientific Applications on Linux) *MySQL* entry. `http://www.infotech-nj.com/itech/index.shtml' A consulting company which mentions *MySQL* in the right company. `http://www.pmpcs.com/' PMP Computer Solutions. Database developers using *MySQL* and `mSQL'. `http://www.aewa.org/' Airborne Early Warning Association. `http://www.dedserius.com/y2kmatrix/' Y2K tester. SQL and Database Interfaces --------------------------- `http://java.sun.com/products/jdbc/' The JDBC database access API. `http://www.gagme.com/mysql' Patch for `mSQL' Tcl. `http://www.amsoft.ru/easysql/' EasySQL: An ODBC-like driver manager. `http://www.lightlink.com/hessling/rexxsql.html' A REXX interface to SQL databases. `http://www.mytcl.cx/' Tcl interface based on tcl-sql with many bugfixes. `http://www.binevolve.com/~tdarugar/tcl-sql/' Tcl interface. `http://www.contrib.andrew.cmu.edu/~shadow/sql.html' SQL Reference Page with a lot of interesting links. Examples of MySQL Use --------------------- `http://www.little6.com/about/linux/' Little6 Inc., An online contract and job finding site that is powered by *MySQL*, PHP3, and Linux. `http://www.delec.com/is/products/prep/examples/BookShelf/index.html' DELECis - A tool that makes it very easy to create an automatically generated table documentation. They have used *MySQL* as an example. `http://www.worldrecords.com' World Records - A search engine for information about music that uses *MySQL* and PHP. `http://www.webtechniques.com/archives/1998/01/note/' A Contact Database using *MySQL* and PHP. `http://modems.rosenet.net/mysql/' Web based interface and Community Calendar with PHP. `http://www.odbsoft.com/cook/sources.htm' Perl package to generate html from a SQL table structure and for generating SQL statements from an html form. `http://www.gusnet.cx/proj/telsql/' Basic telephone database using `DBI'/`DBD'. `http://tecfa.unige.ch/guides/java/staf2x/ex/jdbc/coffee-break' JDBC examples by Daniel K. Schneider. `http://www.spade.com/linux/howto/PostgreSQL-HOWTO-41.html' SQL BNF `http://www.ooc.com/' Object Oriented Concepts Inc; CORBA applications with examples in source. `http://www.pbc.ottawa.on.ca/' DBWiz; Includes an example of how to manage cursors in VB. `http://keilor.cs.umass.edu/pluribus/' Pluribus is a free search engine that learns to improve the quality of its results over time. Pluribus works by recording which pages a user prefers among those returned for a query. A user votes for a page by selecting it; Pluribus then uses that knowledge to improve the quality of the results when someone else submits the same (or similar) query. Uses PHP and *MySQL*. `http://www.stopbit.com/' Stopbit - A technology news site using *MySQL* and PHP. `http://www.linuxsupportline.com/~kalendar/' KDE based calendar manager - The calendar manager has both single user (file based) and multi-user (*MySQL* database) support. `http://tim.desert.net/~tim/imger/' Example of storing/retrieving images with *MySQL* and CGI. `http://www.penguinservices.com/scripts' Online shopping cart system. `http://www.city-gallery.com/album/' Old Photo Album - The album is a collaborative popular history of photography project that generates all pages from data stored in a *MySQL* database. Pages are dynamically generated through a php3 interface to the database content. Users contribute images and descriptions. Contributed images are stored on the web server to avoid storing them in the database as BLOBs. All other information is stored on the shared *MySQL* server. General Database Links ---------------------- `http://www.pcslink.com/~ej/dbweb.html' Database Jump Site `http://black.hole-in-the.net/guy/webdb/' Homepage of the webdb-l (Web Databases) mailing list. `http://www.symbolstone.org/technology/perl/DBI/index.html' Perl `DBI'/`DBD' modules homepage. `http://www.student.uni-koeln.de/cygwin/' Cygwin tools. Unix on top of Windows. `http://dbasecentral.com/' dbasecentral.com; Development and distribution of powerful and easy-to-use database applications and systems. `http://www.tek-tips.com/' Tek-Tips Forums are 800+ independent peer-to-peer non-commercial support forums for Computer Professionals. Features include automatic e-mail notification of responses, a links library, and member confidentiality guaranteed. `http://www.public.asu.edu/~peterjn/btree/' B-Trees: Balanced Tree Data Structures. `http://www.fit.qut.edu.au/~maire/baobab/lecture/sld001.htm' A lecture about B-Trees. There are also many Web pages that use *MySQL*. *Note Users::. Send any additions to this list to . We now require that you show a *MySQL* logo somewhere if you wish your site to be added. It is okay to have it on a "used tools" page or something similar. MySQL Mailing Lists ******************* This chapter introduces you to the *MySQL* mailing lists, and gives some guidelines as to how to use them. The MySQL Mailing Lists ======================= To subscribe to the main *MySQL* mailing list, send a message to the electronic mail address . To unsubscribe from the main *MySQL* mailing list, send a message to the electronic mail address . Only the address to which you send your messages is significant. The subject line and the body of the message are ignored. If your reply address is not valid, you can specify your address explicitly. Adding a hyphen to the subscribe or unsubscribe command word, followed by your address with the `@' character in your address replaced by a `='. For example, to subscribe `your_name@host.domain', send a message to `mysql-subscribe-your_name=host.domain@lists.mysql.com'. Mail to or is handled automatically by the ezmlm mailing list processor. Information about ezmlm is available at The ezmlm Website (http://www.ezmlm.org). To post a message to the list itself, send your message to `mysql@lists.mysql.com'. However, please _do not_ send mail about subscribing or unsubscribing to , because any mail sent to that address is distributed automatically to thousands of other users. Your local site may have many subscribers to . If so, it 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. The following *MySQL* mailing lists exist: ` announce' This is for announcement of new versions of *MySQL* and related programs. This is a low volume list all *MySQL* users should subscribe to. ` mysql' 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! ` mysql-digest' The `mysql' list in digest form. That means you get all individual messages, sent as one large mail message once a day. ` bugs' On this list you should only post a full, repeatable bug report using the `mysqlbug' script (if you are running on Windows, you should include a description of the operating system and the *MySQL* version). Preferably, you should test the problem using the latest stable or development version of *MySQL* before posting! Anyone should be able to repeat the bug by just using `mysql test < script' on the included test case. All bugs posted on this list will be corrected or documented in the next *MySQL* release! If there are only small code changes involved, we will also post a patch that fixes the problem. ` bugs-digest' The `bugs' list in digest form. ` internals' A list for people who work on the *MySQL* code. On this list one can also discuss *MySQL* development and post patches. ` internals-digest' A digest version of the `internals' list. ` java' Discussion about *MySQL* and Java. Mostly about the JDBC drivers. ` java-digest' A digest version of the `java' list. ` win32' All things concerning *MySQL* on Microsoft operating systems such as Win95, Win98, NT, and Win2000. ` win32-digest' A digest version of the `win32' list. ` myodbc' All things about connecting to *MySQL* with ODBC. ` myodbc-digest' A digest version of the `myodbc' list. ` plusplus' All things concerning programming with the C++ API to *MySQL*. ` plusplus-digest' A digest version of the `plusplus' list. ` msql-mysql-modules' A list about the Perl support in *MySQL*. msql-mysql-modules ` msql-mysql-modules-digest' A digest version of the `msql-mysql-modules' list. You subscribe or unsubscribe to all lists in the same way as described above. In your subscribe or unsubscribe message, just put the appropriate mailing list name rather than `mysql'. For example, to subscribe to or unsubscribe from the `myodbc' list, send a message to or . The following table shows some *MySQL* mailing in other languages than English. Note that these are not operated by *MySQL AB*, so we can't guarantee the quality on these. ` A French mailing list' ` A Korean mailing list' Email `subscribe mysql your@email.address' to this list. ` A German mailing list' Email `subscribe mysql-de your@email.address' to this list. You can find information about this mailing list at `http://www.4t2.com/mysql'. ` A Portugese mailing list' Email `subscribe mysql-br your@email.address' to this list. ` A Spanish mailing list' Email `subscribe mysql your@email.address' to this list. Asking Questions or Reporting Bugs ================================== Before posting a bug report or question, please do the following: * Start by searching the *MySQL* online manual at: `http://www.mysql.com/documentation/manual.php' We try to keep the manual up to date by updating it frequently with solutions to newly found problems! * Search the *MySQL* mailing list archives: `http://www.mysql.com/documentation/' * You can also use `http://www.mysql.com/search.html' to search all the Web pages (including the manual) that are located at `http://www.mysql.com/'. If you can't find an answer in the manual or the archives, check with your local *MySQL* expert. If you still can't find an answer to your question, go ahead and read the next section about how to send mail to . How to Report Bugs or Problems ============================== Writing a good bug report takes patience, but doing it right the first time saves time for us and for you. A good bug report containing a full test case for the bug will make it very likely that we will fix it in the next release. This section will help you write your report correctly so that you don't waste your time doing things that may not help us much or at all. We encourage everyone to use the `mysqlbug' script to generate a bug report (or a report about any problem), if possible. `mysqlbug' can be found in the `scripts' directory in the source distribution, or, for a binary distribution, in the `bin' directory under your *MySQL* installation directory. If you are unable to use `mysqlbug', you should still include all the necessary information listed in this section. The `mysqlbug' script helps you generate a report by determining much of the following information automatically, but if something important is missing, please include it with your message! Please read this section carefully and make sure that all the information described here is included in your report. The normal place to report bugs and problems is . If you can make a test case that clearly demonstrates the bug, you should post it to the list. Note that on this list you should only post a full, repeatable bug report using the `mysqlbug' script. If you are running on Windows, you should include a description of the operating system and the *MySQL* version. Preferably, you should test the problem using the latest stable or development version of *MySQL* before posting! Anyone should be able to repeat the bug by just using "`mysql test < script'" on the included test case or run the shell or perl script that is included in the bug report. All bugs posted on the `bugs' list will be corrected or documented in the next *MySQL* release! If there are only small code changes involved to correct this problem, we will also post a patch that fixes the problem. Remember that it is possible to respond to a message containing too much information, but not to one containing too little. Often people omit facts because they think they know the cause of a problem and assume that some details don't matter. A good principle is: if you are in doubt about stating something, state it! It is a thousand times faster and less troublesome to write a couple of lines more in your report than to be forced to ask again and wait for the answer because you didn't include enough information the first time. The most common errors are that people don't indicate the version number of the *MySQL* distribution they are using, or don't indicate what platform they have *MySQL* installed on (including the platform version number). This is highly relevant information, and in 99 cases out of 100 the bug report is useless without it! 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 already in newer *MySQL* versions. Sometimes the error is platform dependent; in such cases, it is next to impossible to fix anything without knowing the operating system and the version number of the platform. 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 or not your problem depends on your compiler, we need to know what compiler is used. Note that every compiling problem should be regarded as a bug report and reported accordingly. It is most helpful when a good description of the problem is included in the bug report. That is, a good example of all the things you did that led to the problem and the problem itself exactly described. The best reports are those that include a full example showing how to reproduce the bug or problem. *Note Reproduceable test case::. 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 using programs, it is better that the error message reported exactly matches the one that the program produces. (Even the case should be observed!) You should never try to remember what the error message was; instead, copy and paste the entire message into your report! If you have a problem with MyODBC, you should try to generate a MyODBC trace file. *Note MyODBC bug report::. Please remember that many of the people who will read your report will do so using an 80-column display. When generating reports or examples using the `mysql' command line tool, you should therefore use the `--vertical' option (or the `\G' statement terminator) for output that would exceed the available width for such a display (for example, with the `EXPLAIN SELECT' statement; see the example below). Please include the following information in your report: * The version number of the *MySQL* distribution you are using (for example, *MySQL* Version 3.22.22). You can find out which version you are running by executing `mysqladmin version'. `mysqladmin' can be found in the `bin' directory under your *MySQL* installation directory. * The manufacturer and model of the machine you are working on. * The operating system name and version. For most operating systems, you can get this information by executing the Unix 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 *MySQL*, the name and version number of the compiler used is needed. If you have a binary distribution, the distribution name is needed. * If the problem occurs during compilation, include the exact error message(s) and also a few lines of context around the offending code in the file where the error occurred. * If `mysqld' died, you should also report the query that crashed `mysqld'. You can usually find this out by running `mysqld' with logging enabled. *Note Using log files::. * If any database table is related to the problem, include the output from `mysqldump --no-data db_name tbl_name1 tbl_name2 ...'. This is very easy to do and is a powerful way to get information about any table in a database that will help us create a situation matching the one you have. * For speed-related bugs or problems with `SELECT' statements, you should always include the output of `EXPLAIN SELECT ...', and at least the number of rows that the `SELECT' statement produces. The more information you give about your situation, the more likely it is that someone can help you! For example, the following is an example of a very good bug report (it should of course be posted with the `mysqlbug' script): Example run using the `mysql' command line tool (note the use of the `\G' statement terminator for statements whose output width would otherwise exceed that of an 80-column display device): mysql> SHOW VARIABLES; mysql> SHOW COLUMNS FROM ...\G mysql> EXPLAIN SELECT ...\G mysql> FLUSH STATUS; mysql> SELECT ...; mysql> SHOW STATUS; * If a bug or problem occurs while running *mysqld*, try to provide an input script that will reproduce the anomaly. This script should include any necessary source files. The more closely the script can reproduce your situation, the better. If you can make a repeatable test case, you should post this to for a high priority treatment! If you can't provide a script, you should at least include the output from `mysqladmin variables extended-status processlist' in your mail to provide some information of how your system is performing! * If you can't produce a test case in a few rows, or if the test table is too big to be mailed to the mailing list (more than 10 rows), you should dump your tables using `mysqldump' and create a `README' file that describes your problem. Create a compressed archive of your files using `tar' and `gzip' or `zip', and use `ftp' to transfer the archive to `ftp://support.mysql.com/pub/mysql/secret/'. Then send a short description of the problem to . * If you think that *MySQL* produces a strange result from a query, include not only the result, but also your opinion of what the result should be, and an account describing the basis for your opinion. * When giving an example of the problem, it's better to use the variable names, table names, etc., that exist in your actual situation than to come up with new names. The problem could be related to the name of a variable or table! These cases are rare, perhaps, but it is better to be safe than sorry. After all, it should be easier for you to provide an example that uses your actual situation, and it is by all means better for us. In case you have data you don't want to show to others, you can use `ftp' to transfer it to `ftp://support.mysql.com/pub/mysql/secret/'. If the data are really top secret and you don't want to show them even to us, then go ahead and provide an example using other names, but please regard this as the last choice. * Include all the options given to the relevant programs, if possible. For example, indicate the options that you use when you start the `mysqld' daemon and that you use to run any *MySQL* client programs. The options to programs like `mysqld' and `mysql', and to the `configure' script, are often keys to answers and are very relevant! It is never a bad idea to include them anyway! If you use any modules, such as Perl or PHP, please include the version number(s) of those as well. * If your question is related to the privilege system, please include the output of `mysqlaccess', the output of `mysqladmin reload', and all the error messages you get when trying to connect! When you test your privileges, you should first run `mysqlaccess'. After this, execute `mysqladmin reload version' and try to connect with the program that gives you trouble. `mysqlaccess' can be found in the `bin' directory under your *MySQL* installation directory. * If you have a patch for a bug, that is good, but don't assume the patch is all we need, or that we will use it, if you don't provide some necessary information, such as test cases showing the bug that your patch fixes. We might find problems with your patch or we might not understand it at all; if so, we can't use it. If we can't verify exactly what the patch is meant for, we won't use it. Test cases will help us here. Show that the patch will handle all the situations that may occur. If we find a borderline case (even a rare one) where the patch won't work, it may be useless. * Guesses about what the bug is, why it occurs, or what it depends on, are usually wrong. Even the *MySQL* team can't guess such things without first using a debugger to determine the real cause of a bug. * Indicate in your mail message that you have checked the reference manual and mail archive so others know that you have tried to solve the problem yourself. * If you get a `parse error', please check your syntax closely! If you can't find something wrong with it, it's extremely likely that your current version of *MySQL* doesn't support the query you are using. If you are using the current version and the manual at `http://www.mysql.com/documentation/manual.php' doesn't cover the syntax you are using, *MySQL* doesn't support your query. In this case, your only options are to implement the syntax yourself or e-mail 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*, 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*. *Note News::. * If you have a problem such that your data appears corrupt or you get errors when you access some particular table, you should first check and then try repairing your tables with `myisamchk' or `CHECK TABLE' and `REPAIR TABLE'. *Note Maintenance::. * If you often get corrupted tables you should try to find out when and why this happens! In this case, the `mysql-data-directory/'hostname'.err' file may contain some information about what happened. *Note Error log::. Please include any relevant information from this file in your bug report! Normally `mysqld' should *NEVER* crash a table if nothing killed it in the middle of an update! If you can find the cause of `mysqld' dying, it's much easier for us to provide you with a fix for the problem! *Note What is crashing::. * If possible, download and install the most recent version of *MySQL* and check whether or not it solves your problem. All versions of *MySQL* are thoroughly tested and should work without problems! We believe in making everything as backward compatible as possible, and you should be able to switch *MySQL* versions in minutes! *Note Which version::. If you are a support customer, please cross-post the bug report to for higher priority treatment, as well as to the appropriate mailing list to see if someone else has experienced (and perhaps solved) the problem. For information on reporting bugs in *MyODBC*, see *Note ODBC Problems::. For solutions to some common problems, see *Note Problems::. 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! Guidelines for Answering Question on the Mailing List ===================================================== If you consider your answer to have broad interest, you may want to post it to the mailing 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. Please don't post mail messages from your browser with HTML mode turned on! Many users don't read mail with a browser! MySQL Licensing and Support *************************** This chapter describes *MySQL* support and licensing arrangements: * The copyrights under which *MySQL* is distributed (*note Copyright::) * Sample situations illustrating when a license is required (*note Licensing examples::) * Support costs (*note Cost::) and support benefits (*note Support::) * Commercial licensing costs MySQL Licensing Policy ====================== The formal terms of the GPL license can be found at *Note GPL license::. Basically, our licensing policy and interpretation of the GPL is as follows: Note that older versions of *MySQL* are still using a more strict license (http://www.mysql.com/support/arrangements/mypl.html). See the documentation for that version for more information. If you need a commercial *MySQL* license, because the GPL license doesn't suit your application, you can buy one at `https://order.mysql.com/license.htmy'. For normal internal use, *MySQL* costs nothing. You do not have to pay us if you do not want to. A license is required if: - You link a part of the of *MySQL* that has a GPL Copyright to a program that is not free software (embedded usage of the *MySQL* server). In this case your application would also become GPL through the clause in the GPL license that acts as a virus. By licensing *MySQL* from us under a commercial license you will avoid this problem. - You have a commercial application that ONLY works with *MySQL* and ships the application with the *MySQL* server. This is because we view this as linking even if it is done over the network. - You have a distribution of *MySQL* and you don't provide the source code for your copy of the *MySQL* server, as defined in the GPL license. A license is *NOT* required if: - You do not need a license to include the client code in commercial programs. The client part of *MySQL* licensed with the LGPL `GNU Library General Public License'. The `mysql' command-line client includes code from the `readline' library that is under the `GPL'. - If your use of *MySQL* does not require a license, but you like *MySQL* and want to encourage further development, you are certainly welcome to purchase a license or *MySQL* support anyway. - If you use *MySQL* in a commercial context such that you profit by its use, we ask that you further the development of *MySQL* by purchasing some level of support. We feel that if *MySQL* helps your business, it is reasonable to ask that you help *MySQL*. (Otherwise, if you ask us support questions, you are not only using for free something into which we've put a lot a work, you're asking us to provide free support, too.) For circumstances under which a *MySQL* license is required, you need a license per machine that runs the `mysqld' server. However, a multiple-CPU machine counts as a single machine, and there is no restriction on the number of *MySQL* servers that run on one machine, or on the number of clients concurrently connected to a server running on that machine! If you have any questions as to whether or not a license is required for your particular use of *MySQL*, please read this again and then contact us. *Note Contact information::. If you require a *MySQL* license, the easiest way to pay for it is to use the license form on *MySQL*'s secure server at `https://order.mysql.com/license.htmy'. Other forms of payment are discussed in *Note Payment information::. Copyrights Used by MySQL ======================== There are several different copyrights on the *MySQL* distribution: 1. The *MySQL*-specific source needed to build the `mysqlclient' library is licensed under the `LGPL' and programs in the `client' directory is GPL. Each file has a header that shows which copyright is used for that file. 2. The client library and the (GNU `getopt') library are covered by the "GNU LIBRARY GENERAL PUBLIC LICENSE." *Note LGPL license::. 3. Some parts of the source (the `regexp' library) are covered by a Berkeley-style copyright. 4. All the source in the server and the (GNU `readline') library is covered by the "GNU GENERAL PUBLIC LICENSE." *Note GPL license::. This is also available as the file `COPYING' in the distributions. One goal is that the SQL client library should be free enough that it is possible to add *MySQL* support into commercial products without a license. For this reason, we chose the LGPL license for the client code. This means that you can use *MySQL* for free with any program that uses any of the free software licenses. *MySQL* is also free for any end user for his own or company usage. However, if you use *MySQL* for something important to you, you may want to help secure its development by purchasing licenses or a support contract. *Note Support::. Copyright Changes ----------------- Version 3.22 of *MySQL* is still using a more strict license. See the documentation for that version for more information. Example Licensing Situations ============================ This section describes some situations illustrating whether or not you must license the *MySQL* server. Generally these examples involve providing *MySQL* as an integral part of a product. Note that a single *MySQL* license covers any number of CPUs and `mysqld' servers on a machine! There is no artificial limit on the number of clients that connect to the server in any way. Selling Products that use MySQL ------------------------------- To determine whether or not you need a *MySQL* license when selling your application, you should ask whether the proper functioning of your application is dependent on the use of *MySQL* and whether you include the *MySQL* server with your product. There are several cases to consider: * Does your application require *MySQL* to function properly? * If your product requires *MySQL*, you need a license for any machine that runs the `mysqld' server. For example, if you've designed your application around *MySQL*, then you've really made a commercial product that requires the engine, so you need a license. * If your application does not require *MySQL*, you do not need to obtain a license. For example, if using *MySQL* just adds some new optional features to your product (such as adding logging to a database if *MySQL* is used rather than logging to a text file), it should fall within normal use, and a license would not be required. * In other words, you need a license if you sell a product designed specifically for use with *MySQL* or that requires the *MySQL* server to function at all. This is true whether or not you provide *MySQL* for your client as part of your product distribution. * It also depends on what you're doing for the client. Do you plan to provide your client with detailed instructions on installing *MySQL* with your software? Then your product may be contingent on the use of *MySQL*; if so, you need to buy a license. If you are simply tying into a database that you expect already to have been installed by the time your software is purchased, then you probably don't need a license. ISP MySQL Services ------------------ Internet Service Providers (ISPs) often host *MySQL* servers for their customers. With the GPL license this does not require a license. On the other hand, we do encourage people to use ISPs that have *MySQL* support, as this will give them the confidence that if they have some problem with their *MySQL* installation, their ISP will be able to solve the problem for them (in some cases with the help from the *MySQL* development team). All ISPs that want to keep themselves up-to-date should subscribe to our `announce' mailing list so that they can be aware of fatal issues that may be relevant for their *MySQL* installations. Note that if the ISP doesn't have a license for *MySQL*, it should give its customers at least read access to the source of the *MySQL* installation so that its customer can verify that it is patched correctly. Running a Web Server Using MySQL -------------------------------- If you use *MySQL* in conjunction with a Web server on Unix, you don't have to pay for a license. This is true even if you run a commercial Web server that uses *MySQL*, because you are not selling an embedded *MySQL* version yourself. However, in this case we would like you to purchase *MySQL* support, because *MySQL* is helping your enterprise. MySQL Licensing and Support Costs ================================= Our current license prices are shown below. These prices are now under review because of the change to a GPL copyright. New prices and terms will be posted on the *MySQL* web site at `http://www.mysql.com/' as soon as they are ready. All prices are in US Dollars. If you pay by credit card, the currency is EURO (European Union Euro) so the prices will differ slightly. *Number of licenses* *Per copy* *Total* 1 200 EURO 200 EURO 10 pack 150 EURO 1500 EURO 50 pack 120 EURO 6000 EURO For high volume (OEM) purchases, the following prices apply: *Number of *Per copy* *Minimum * *Minimum payment* licenses* 100-999 40 EURO 100 4000 EURO 1000-2499 25 EURO 200 5000 EURO 2500-4999 20 EURO 400 8000 EURO For OEM purchases, you must act as the middle-man for eventual problems or extension requests from your users. We also require that OEM customers have at least an extended e-mail support contract. Note that OEM licenses only apply for products where the user doesn't have direct access to the *MySQL* server (embedded system). In other words, the *MySQL* server should only be used with the application that was supplied you. If you have a low-margin, high-volume product, you can always talk to us about other terms (for example, a percent of the sale price). If you do, please be informative about your product, pricing, market, and any other information that may be relevant. A full-price license is not a support agreement and includes very minimal support. This means that we try to answer any relevant questions. If the answer is in the documentation, we will direct you to the appropriate section. If you have not purchased a license or support, we probably will not answer at all. If you discover what we consider a real bug, we are likely to fix it in any case. But if you pay for support we will notify you about the fix status instead of just fixing it in a later release. More comprehensive support is sold separately. Descriptions of what each level of support includes are given in *Note Support::. Costs for the various types of commercial support are shown below. Support level prices are in EURO (European Union Euro). One EURO is about 1.06 USD. *Type of support* *Cost per year* Basic e-mail support. *Note Basic EURO 200 email support::. Extended e-mail support *Note EURO 1000 Extended email support::. Login support *Note Login EURO 2000 support::. Extended login support *Note EURO 5000 Extended login support::. Telephone support *Note Telephone EURO 12000 support::. You may upgrade from any lower level of support to a higher level of support for the difference in price between the two support levels. We do also provide telephone support (mostly emergency support but also 24/7 support). This support option doesn't however have a fixed price but is negotiated for case to case. If you are interested in this option you can email and tell us about your needs. Note that as our sales staff is very busy, it may take some time until your request is handled. Our support staff does however always answer promptly to support questions! Payment information ------------------- Currently we can take SWIFT payments, checks, or credit cards. Payment should be made to: Postgirot Bank AB 105 06 STOCKHOLM, SWEDEN MySQL AB BOX 6434 11382 STOCKHOLM, SWEDEN SWIFT address: PGSI SESS Account number: 96 77 06 - 3 Specify: license and/or support and your name and e-mail address. In Europe and Japan you can use EuroGiro (that should be less expensive) to the same account. If you want to pay by check, make it payable to "MySQL Finland AB" and mail it to the address below: MySQL AB BOX 6434, Torsgatan 21 11382 STOCKHOLM, SWEDEN If you want to pay by credit card over the Internet, you can use MySQL AB's secure license form (https://order.mysql.com/license.htmy). You can also print a copy of the license form, fill it in, and send it by fax to: +46-8-729 69 05 If you want us to bill you, you can use the license form and write "bill us" in the comment field. You can also mail a message to (*not* `mysql@lists.mysql.com'!) with your company information and ask us to bill you. Contact Information ------------------- For commercial licensing, please contact the *MySQL* licensing team. The much preferred method is by e-mail to . Fax is also possible but handling of these may take much longer (Fax +46-8-729 69 05). If you represent a business that is interested in partnering with *MySQL*, please send e-mail to . For timely, precise answers to technical questions about *MySQL* you should order (https://order.mysql.com/) one of our support contracts (http://www.mysql.com/support/arrangements/types.html). *MySQL* support is provided by the *MySQL* developers so the standard is extremely high. If you are interested in placing a banner advertisement on our Web site, please send e-mail to . If you are interested in any of the jobs listed in our jobs (http://www.mysql.com/development/jobs/) section, please send e-mail to . For general discussion amongst our many users, please direct your attention to the appropriate mailing list (http://www.mysql.com/documentation/lists.html). For general information inquires, please send e-mail to . For questions or comments about the workings or content of the Web site, please send e-mail to . Types of Commercial Support =========================== The following is true of all support options: * The support is per year. * We will fix, or provide a reasonable workaround for any repeatable bug. * We will give a reasonable effort to find and fix any other MySQL related bug. * The higher level of support contract the more effort we will put into finding a solution to your problems. * The following is true for all support contracts except Basic email support: For non-bug related things, like helping you optimize your queries or your system, extending MySQL with new functionality, etc., we charge 200 EURO/hour, which is deducted from your support contract. In other words, if you have login support (2000 EURO), you can expect us to work up to 10 hours to help you with things like this. Basic E-mail Support -------------------- Basic e-mail support is a very inexpensive support option and should be thought of more as a way to support our development of *MySQL* than as a real support option. We at *MySQL* do give a lot of free support in all the different *MySQL* lists, and the money we get from basic e-mail support is largely used to make this possible. At this support level, the *MySQL* mailing lists are the preferred means of communication. Questions normally should be mailed to the primary mailing list () or one of the other regular lists (for example, for Windows-related *MySQL* questions), as someone else already may have experienced and solved the problem you have. *Note Asking questions::. However, by purchasing basic e-mail support, you also have access to the support address , which is not available as part of the minimal support that you get by purchasing a *MySQL* license. This means that for especially critical questions, you can cross-post your message to . (If the message contains sensitive data, you should post only to .) *REMEMBER!* to ALWAYS include your registration number and expiration date when you send a message to . Note that if you have encountered a critical, repeatable bug, and follow the rules outlined in the manual section of how to report bugs and send it to , we promise to try to fix this as soon as possible, regardless of your support level! *Note Bug reports::. Basic e-mail support includes the following types of service: * If your question is already answered in the manual, we will inform you of the correct section in which you can find the answer. If the answer is not in the manual, we will point you in the right direction to solve your problem. * We guarantee a timely answer for your e-mail messages. We can't guarantee that we can solve any problem, but at least you will receive an answer if we can contact you by e-mail. * We will help with unexpected problems when you install *MySQL* from a binary distribution on supported platforms. This level of support does not cover installing *MySQL* from a source distribution. Supported platforms are those for which *MySQL* is known to work. *Note Which OS::. * We will help you with bugs and missing features. Any bugs that are found are fixed for the next *MySQL* release. If the bug is critical for you, we will mail you a patch for it as soon the bug is fixed. Critical bugs always have the highest priority for us, and we ensure that they are fixed as soon as possible. * Your suggestions for the further development of *MySQL* will be taken into consideration. By taking email support you have already helped the further development of *MySQL*. If you want to have more input, upgrade to a higher level of support. * If you want us to help optimize your system, you must upgrade to a higher level of support. Extended E-mail Support ----------------------- Extended e-mail support includes everything in basic e-mail support with these additions: * Your e-mail will be dealt with before mail from basic e-mail support users and non-registered users. * Your suggestions for the further development of *MySQL* will receive strong consideration. Simple extensions that suit the basic goals of *MySQL* are implemented in a matter of days. By taking extended e-mail support you have already helped the further development of *MySQL*. * Typical situations that are covered by extended e-mail support are: - We will answer and (within reason) solve questions that relate to possible bugs in *MySQL*. As soon as the bug is found and corrected, we will mail a patch for it. - We will help with unexpected problems when you install *MySQL* from a source or binary distribution on supported platforms. - We will answer questions about missing features and offer hints how to work around them. - We will provide hints on optimizing `mysqld' for your situation. * You are allowed to influence the priority of items on the *MySQL* TODO List. *Note TODO::. This will ensure that the features you really need will be implemented sooner than they might be otherwise. Login Support ------------- Login support includes everything in extended e-mail support with these additions: * Your e-mail will be dealt with even before e-mail from extended e-mail support users. * Your suggestions for the further development of *MySQL* will be taken into very high consideration. Realistic extensions that can be implemented in a couple of hours and that suit the basic goals of *MySQL* will be implemented as soon as possible. * If you have a very specific problem, we can try to log in on your system to solve the problem "in place." * Like any database vendor, we can't guarantee that we can rescue any data from crashed tables, but if the worst happens, we will help you rescue as much as possible. *MySQL* has proven itself very reliable, but anything is possible due to circumstances beyond our control (for example, if your system crashes or someone kills the server by executing a `kill -9' command). * We will provide hints on optimizing your system and your queries. * You are allowed to call a *MySQL* developer (in moderation) and discuss your *MySQL*-related problems. This option is however only to be used as a last result during an emergency after we have failed to grasp the total problem with email. To make efficient use of our time we need to first get all facts about the problem, before talking on phone, to be able to work as efficiently as possible on solving the problem. Extended Login Support ---------------------- Extended login support includes everything in login support with these additions: * Your e-mail has the highest possible priority. * We will actively examine your system and help you optimize it and your queries. We may also optimize and/or extend *MySQL* to better suit your needs. * You may also request special extensions just for you. For example: mysql> select MY_FUNC(col1,col2) from table; * We will provide a binary distribution of all important *MySQL* releases for your system, as long as we can get an account on a similar system. In the worst case, we may require access to your system to be able to create a binary distribution. * If you can provide accommodations and pay for traveler fares, you can even get a *MySQL* developer to visit you and offer you help with your troubles. Extended login support entitles you to one personal encounter per year, but we are always very flexible towards our customers! If the visit takes 16 hours or more, the first 8 hours is without charge. For the hours above 8 hours, you will be charged with a rate that is at least 20 % less than our standard rates. Telephone Support ----------------- Telephone support includes everything in extended login support with these additions: * We will provide you with a dynamic web page showing the current list of `MySQL' developers that you can phone when you have a critical problem. * For non critical problem, you can request a *MySQL* developer to phone back within 48 hours to discuss `MySQL' related issues. Support for other table handlers -------------------------------- To get support for `BDB' tables, `InnoDB' tables or `GEMINI' tables you have to pay an additional 30% on the standard support price for each of the table handlers you would like to have support for. We at `MySQL AB' will help you create a proper bug report for the table handler and submit it to the developers for the specific table handler. We will also do our best to ensure that you will get a timely answer or solution from the developers of the table handler. Even if we are quite confident that we can solve most problems within a timely manner, we can't guarantee a quick solution for any problems you can get with the different table handlers. We will however do our best to help you get the problem solved. Installing MySQL **************** This chapter describes how to obtain and install *MySQL*: * For a list of sites from which you can obtain *MySQL*, see *Note Getting *MySQL*: Getting MySQL. * To see which platforms are supported, see *Note Which OS::. Please note that not all supported system are equally good for running *MySQL* on them. On some it is much more robust and efficient than others - see *Note Which OS:: for details. * Several versions of *MySQL* are available in both binary and source distributions. We also provide public access to our current source tree for those who want to see our most recent developments and help us test new code. To determine which version and type of distribution you should use, see *Note Which version::. When in doubt, use the binary distribution. * Installation instructions for binary and source distributions are described in *Note Installing binary:: and *Note Installing source::. Each set of instructions includes a section on system-specific problems you may run into. * For post-installation procedures, see *Note Post-installation::. These procedures apply whether you install *MySQL* using a binary or source distribution. How to Get MySQL ================ Check the *MySQL* home page (http://www.mysql.com/) for information about the current version and for downloading instructions. Our main download mirror is located at: `http://download.sourceforge.net/mirrors/mysql/' If you are interested in becoming a *MySQL* mirror site, you may anonymously rsync with: `rsync://download.sourceforge.net/mysql/'. Please send e-mail to notifying us of your mirror to be added to the list below. If you have problems downloading from our main site, try using one of the mirrors listed below. Please report bad or out-of-date mirrors to . *Europe:* * Austria [Univ. of Technology/Vienna] WWW (http://gd.tuwien.ac.at/db/mysql/) FTP (ftp://gd.tuwien.ac.at/db/mysql/) * Bulgaria [online.bg/Sofia] WWW (http://mysql.online.bg/) FTP (ftp://mysql.online.bg/) * Czech Republic [Masaryk University in Brno] WWW (http://mysql.linux.cz/index.html) FTP (ftp://ftp.fi.muni.cz/pub/mysql/) * Czech Republic [www.sopik.cz] WWW (http://www.mysql.cz/) * Czech Republic [www.gin.cz] WWW (http://mysql.gin.cz/) FTP (ftp://ftp.gin.cz/pub/MIRRORS/www.mysql.com/) * Denmark [Borsen] WWW (http://mysql.borsen.dk/) * Denmark [SunSITE] WWW (http://SunSITE.auc.dk/mysql/) FTP (ftp://SunSITE.auc.dk/pub/databases/mysql/) * Estonia [OKinteractive] WWW (http://mysql.mirror.ok.ee) * France [mtesa.net] WWW (http://mysql.mtesa.net/) * Finland [tonnikala.net] WWW (http://mysql.tonnikala.org/) * Germany [Kernelnotes.de, Bonn] WWW (http://www.kernelnotes.de/mysql/) FTP (ftp://ftp.kernelnotes.de/pub/mirror/mysql.org/) * Germany [Wolfenbuettel] WWW (http://www.fh-wolfenbuettel.de/ftp/pub/database/mysql/) FTP (ftp://ftp.fh-wolfenbuettel.de/pub/database/mysql/) * Greece [NTUA, Athens] WWW (http://www.ntua.gr/mysql/) FTP (ftp://ftp.ntua.gr/pub/databases/mysql/) * Hungary [Xenia] WWW (http://mysql.sote.hu/) FTP (ftp://xenia.sote.hu/pub/mirrors/www.mysql.com/) * Hungary [TiszaneT] WWW (http://mysql.tiszanet.hu/) FTP (ftp://mysql.tiszanet.hu/pub/mirrors/mysql/) * Iceland [GM] WWW (http://mysql.gm.is/) FTP (ftp://ftp.gm.is/pub/mysql/) * Italy [feelinglinux.com] WWW (http://mysql.feelinglinux.com/) * Italy [Teta Srl] WWW (http://www.teta.it/mysql/) * Italy [tzone.it] WWW (http://mysql.tzone.it/) * Ireland [Esat Net] WWW (http://ftp.esat.net/mirrors/download.sourceforge.net/pub/mirrors/mysql/) FTP (ftp://ftp.esat.net/mirrors/download.sourceforge.net/pub/mirrors/mysql/) * Latvia [linux.lv] FTP (ftp://ftp.linux.lv/pub/software/mysql/) * Netherlands [Silverpoint] WWW (http://mysql.silverpoint.nl/) * Netherlands [Widexs BV] WWW (http://mysql.widexs.nl/) FTP (ftp://mysql.widexs.nl/pub/mysql/) * Netherlands [ProServe] WWW (http://mysql.proserve.nl/) * Poland [Sunsite] WWW (http://sunsite.icm.edu.pl/mysql/) FTP (ftp://sunsite.icm.edu.pl/pub/unix/mysql/) * Poland [ncservice.com/Gdansk] WWW (http://mysql.service.net.pl/) * Portugal [Netc] WWW (http://ftp.netc.pt/pub/mysql/) FTP (ftp://ftp.netc.pt/pub/mysql/) * Romania [roedu.net/Bucharest] FTP (ftp://ftp.roedu.net/pub/mirrors/ftp.mysql.com/) * Russia [DirectNet] WWW (http://mysql.directnet.ru/) FTP (ftp://ftp.dn.ru/pub/MySQL/) * Russia [Scientific Center/Chernogolovka] FTP (ftp://ftp.chg.ru/pub/databases/mysql/) * Switzerland [Sunsite] WWW (http://sunsite.cnlab-switch.ch/ftp/mirror/mysql/) FTP (ftp://sunsite.cnlab-switch.ch/mirror/mysql/) * UK [Omnipotent/UK] WWW (http://mysql.omnipotent.net/) FTP (ftp://mysql.omnipotent.net/) * UK [PLiG/UK] WWW (http://ftp.plig.org/pub/mysql/) FTP (ftp://ftp.plig.org/pub/mysql/) * UK [Telekon Internet/UK] FTP (ftp://ftp.telekon.co.uk/pub/mysql/) * Ukraine [PACO] WWW (http://mysql.paco.net.ua) FTP (ftp://mysql.paco.net.ua/) * Ukraine [ISP Alkar Teleport/Dnepropetrovsk] WWW (http://mysql.dp.ua/) *North America:* * Canada [Tryc] WWW (http://web.tryc.on.ca/mysql/) * USA [Hurricane Electric/San Jose] WWW (http://mysql.he.net/) * USA [ValueClick, Los Angeles CA] WWW (http://mysql.valueclick.com/) FTP (ftp://mysql.valueclick.com/mysql/) * USA [Wisconsin University/Wisconsin] WWW (http://mirror.sit.wisc.edu/mysql/) FTP (ftp://mirror.sit.wisc.edu/mirrors/mysql/) * USA [LinuxWired/Scottsdale, AZ] WWW (http://mysql.linuxwired.net/) FTP (ftp://ftp.linuxwired.net/pub/mirrors/mysql/) * USA [adgrafix.com/Boston, MA] WWW (http://mysql.adgrafix.com/) *South America:* * Argentina [bannerlandia.com] WWW (http://mysql.bannerlandia.com.ar/) FTP (ftp://mysql.bannerlandia.com.ar/mirrors/mysql/) * Chile [Vision] WWW (http://mysql.vision.cl/) * Chile [PSINet] WWW (http://mysql.psinet.cl/) FTP (ftp://ftp.psinet.cl/pub/database/mysql/) * Chile [Tecnoera] WWW (http://mysql.tecnoera.com/) *Asia:* * China [Freecode] WWW (http://www.freecode.net.cn/mirror/mysql/) * China [linuxforum.net] WWW (http://www2.linuxforum.net/mirror/mysql/) * China [ISL/Hong Kong] WWW (http://mysql.islnet.net) * China [xcyber.org/Hong Kong] WWW (http://mysql.xcyber.org/) * South Korea [Webiiz] WWW (http://mysql.webiiz.com/) * South Korea [PanworldNet] WWW (http://mysql.holywar.net/) * Japan [Soft Agency] WWW (http://www.softagency.co.jp/MySQL) * Japan [u-aizu.ac.jp/Aizu] FTP (ftp://ftp.u-aizu.ac.jp/ftp/pub/dbms/mysql/mysql.com) * Singapore [HJC] WWW (http://mysql.hjc.edu.sg) FTP (ftp://ftp.hjc.edu.sg/mysql) * Taiwan [TTN] WWW (http://mysql.ttn.net) * Taiwan [nctu.edu/HsinChu] WWW (http://mysql.nctu.edu.tw/) *Australia:* * Australia [AARNet/Queensland] WWW (http://mysql.mirror.aarnet.edu.au/) FTP (ftp://mysql.mirror.aarnet.edu.au/) *Africa:* * South-Africa [Mweb] WWW (http://www.mysql.mweb.co.za/) * South Africa [The Internet Solution/Johannesburg] FTP (ftp://ftp.is.co.za/linux/mysql/) Operating Systems Supported by MySQL ==================================== We use GNU Autoconf, so it is possible to port *MySQL* to all modern systems with working Posix threads and a C++ compiler. (To compile only the client code, a C++ compiler is required but not threads.) We use and develop the software ourselves primarily on Sun Solaris (Versions 2.5 - 2.7) and SuSE Linux Version 7.x. Note that for many operating systems, the native thread support works only in the latest versions. *MySQL* has been reported to compile successfully on the following operating system/thread package combinations: * AIX 4.x with native threads. *Note IBM-AIX::. * Amiga. * BSDI 2.x with the included MIT-pthreads package. *Note BSDI::. * BSDI 3.0, 3.1 and 4.x with native threads. *Note BSDI::. * DEC Unix 4.x with native threads. *Note Alpha-DEC-UNIX::. * FreeBSD 2.x with the included MIT-pthreads package. *Note FreeBSD::. * FreeBSD 3.x and 4.x with native threads. *Note FreeBSD::. * HP-UX 10.20 with the included MIT-pthreads package. *Note HP-UX 10.20::. * HP-UX 11.x with the native threads. *Note HP-UX 11.x::. * Linux 2.0+ with LinuxThreads 0.7.1+ or `glibc' 2.0.7+. *Note Linux::. * Mac OS X Server. *Note Mac OS X::. * NetBSD 1.3/1.4 Intel and NetBSD 1.3 Alpha (Requires GNU make). *Note NetBSD::. * OpenBSD > 2.5 with native therads. OpenBSD < 2.5 with the included MIT-pthreads package. *Note OpenBSD::. * OS/2 Warp 3, FixPack 29 and OS/2 Warp 4, FixPack 4. *Note OS/2::. * SGI Irix 6.x with native threads. *Note SGI-Irix::. * Solaris 2.5 and above with native threads on SPARC and x86. *Note Solaris::. * SunOS 4.x with the included MIT-pthreads package. *Note Solaris::. * SCO OpenServer with a recent port of the FSU Pthreads package. *Note SCO::. * SCO UnixWare 7.0.1. *Note SCO Unixware::. * Tru64 Unix * Win95, Win98, NT, and Win2000. *Note Windows::. Note that not all platforms are suited equally well for running *MySQL*. How well a certain platform is suited for a high-load mission critical *MySQL* server is determined by the following factors: * General stability of the thread library. A platform may have excellent reputation otherwise, but if the thread library is unstable in the code that is called by *MySQL*, even if everything else is perfect, *MySQL* will be only as stable as the thread library. * The ability of the kernel and/or thread library to take advantage of *SMP* on multi-processor systems. In other words, when a process creates a thread, it should be possible for that thread to run on a different CPU than the original process. * The ability of the kernel and/or the thread library to run many threads which acquire/release a mutex over a short critical region frequently without excessive context switches. In other words, if the implementation of `pthread_mutex_lock()' is too anxious to yield CPU, this will hurt *MySQL* tremendously. If this issue is not taken care of, adding extra CPUs will actually make *MySQL* slower. * General file system stability/performance. * Ability of the file system to deal with large files at all and deal with them efficiently, if your tables are big. * Our level of expertise here at *MySQL AB* with the platform. If we know a platform well, we introduce platform-specific optimizations/fixes enabled at compile time. We can also provide advice on configuring your system optimally for *MySQL*. * The amount of testing of similar configurations we have done internally. * The number of users that have successfully run *MySQL* on that platform in similar configurations. If this number is high, the chances of hitting some platform-specific surprise are much smaller. Based on the above criteria, the best platforms for running *MySQL* at this point are x86 with SuSE Linux 7.1, 2.4 kernel and ReiserFS (or any similar Linux distribution) and Sparc with Solaris 2.7 or 2.8. FreeBSD comes third, but we really hope it will join the top club once the thread library is improved. We also hope that at some point we will be able to include all other platforms on which *MySQL* compiles, runs ok, but not quite with the same level of stability and performance, into the top category. This will require some effort on our part in cooperation with the developers of the OS/library components *MySQL* depends upon. If you are interested in making one of those components better, are in a position to influence their development, and need more detailed instructions on what *MySQL* needs to run better, send an e-mail to . Please note that the comparison above is not to say that one OS is better or worse than the other in general. We are talking about choosing a particular OS for a dedicated purpose - running *MySQL*, and compare platforms in that regard only. With this in mind, the result of this comparison would be different if we included more issues into it. And in some cases, the reason one OS is better than the other could simply be that we have put forth more effort into testing on and optimizing for that particular platform. We are just stating our observations to help you make a decision on which platform to use *MySQL* on in your setup. Which MySQL Version to Use ========================== The first decision to make is whether you want to use the latest development release or the last stable release: * Normally, if you are beginning to use *MySQL* for the first time or trying to port it to some system for which there is no binary distribution, we recommend going with the stable release (currently Version 3.23.39. Note that all *MySQL* releases are checked with the *MySQL* benchmarks and an extensive test suite before each release. * Otherwise, if you are running an old system and want to upgrade, but don't want to take chances with a non-seamless upgrade, you should upgrade to the latest in the same branch you are using (where only the last version number is newer than yours). We have tried to fix only fatal bugs and make small, relatively safe changes to that version. The second decision to make is whether you want to use a source distribution or a binary distribution. In most cases you should probably use a binary distribution, if one exists for your platform, as this generally will be easier to install than a source distribution. In the following cases you probably will be better off with a source installation: * If you want to install *MySQL* at some explicit location. (The standard binary distributions are "ready to run" at any place, but you may want to get even more flexibility). * To be able to satisfy different user requirements, we are providing two different binary versions; One compiled with the non-transactional table handlers, (a small, fast binary), and one configured with the most important extended options like transaction-safe tables. Both versions are compiled from the same source distribution. All native `MySQL' clients can connect to both *MySQL* versions. The extended *MySQL* binary distribution is marked with the `-max' suffix and is configured with the same options as `mysqld-max'. *Note `mysqld-max': mysqld-max. If you want to use the `MySQL-Max' RPM, you must first install the standard `MySQL' RPM. * If you want to configure `mysqld' with some extra feature that are NOT in the standard binary distributions. Here is a list of the most common extra options that you may want to use: * -with-berkeley-db * -with-innodb * -with-raid * -with-libwrap * -with-named-z-lib (This is done for some of the binaries) * -with-debug[=full] * The default binary distribution is normally compiled with support for all characters sets and should work on a variety of processors from the same processor family. If you want a faster *MySQL* server you may want to recompile it with support for only the character sets you need, use a better compiler (like `pgcc') or use compiler options that are better optimized for your processor. * If you have found a bug and reported it to the *MySQL* development team you will probably receive a patch that you need to apply to the source distribution to get the bug fixed. * If you want to read (and/or modify) the C and C++ code that makes up *MySQL*, you should get a source distribution. The source code is always the ultimate manual. Source distributions also contain more tests and examples than binary distributions. The *MySQL* naming scheme uses release numbers that consist of three numbers and a suffix. For example, a release name like `mysql-3.21.17-beta' is interpreted like this: * The first number (`3') describes the file format. All Version 3 releases have the same file format. * The second number (`21') is the release level. Normally there are two to choose from. One is the release/stable branch (currently `23') and the other is the development branch (currently `4.0'). Normally both are stable, but the development version may have quirks, missing documentation on new features, or may fail to compile on some systems. * The third number (`17') is the version number within the release level. This is incremented for each new distribution. Usually you want the latest version for the release level you have chosen. * The suffix (`beta') indicates the stability level of the release. The possible suffixes are: - `alpha' indicates that the release contains some large section of new code that hasn't been 100% tested. Known bugs (usually there are none) should be documented in the News section. *Note News::. There are also new commands and extensions in most alpha releases. Active development that may involve major code changes can occur on an alpha release, but everything will be tested before doing a release. There should be no known bugs in any *MySQL* release. - `beta' means that all new code has been tested. No major new features that could cause corruption on old code are added. There should be no known bugs. A version changes from alpha to beta when there haven't been any reported fatal bugs within an alpha version for at least a month and we don't plan to add any features that could make any old command more unreliable. - `gamma' is a beta that has been around a while and seems to work fine. Only minor fixes are added. This is what many other companies call a release. - If there is no suffix, it means that the version has been run for a while at many different sites with no reports of bugs other than platform-specific bugs. Only critical bug fixes are applied to the release. This is what we call a stable release. All versions of *MySQL* are run through our standard tests and benchmarks to ensure that they are relatively safe to use. Because the standard tests are extended over time to check for all previously found bugs, the test suite keeps getting better. Note that all releases have been tested at least with: An internal test suite This is part of a production system for a customer. It has many tables with hundreds of megabytes of data. The *MySQL* benchmark suite This runs a range of common queries. It is also a test to see whether the latest batch of optimizations actually made the code faster. *Note Benchmarks::. The `crash-me' test This tries to determine what features the database supports and what its capabilities and limitations are. *Note Benchmarks::. Another test is that we use the newest *MySQL* version in our internal production environment, on at least one machine. We have more than 100 gigabytes of data to work with. How and When Updates Are Released ================================= *MySQL* is evolving quite rapidly here at *MySQL AB* and we want to share this with other *MySQL* users. We try to make a release when we have very useful features that others seem to have a need for. We also try to help out users who request features that are easy to implement. We take note of what our licensed users want to have, and we especially take note of what our extended e-mail supported customers want and try to help them out. No one has to download a new release. The News section will tell you if the new release has something you really want. *Note News::. We use the following policy when updating *M