站内搜索: 请输入搜索关键词
当前页面: 在线文档首页 > MySQL 5.0参考手册英文版

Appendix聽C.聽MySQL Change History - MySQL 5.0参考手册英文版

Appendix聽C.聽MySQL Change History

Table of Contents

C.1. Changes in release 5.1.x (Development)
C.1.1. Changes in release 5.1.18 (Not yet released)
C.1.2. Changes in release 5.1.17 (04 April 2007)
C.1.3. Changes in release 5.1.16 (26 February 2007)
C.1.4. Changes in release 5.1.15 (25 January 2007)
C.1.5. Changes in release 5.1.14 (05 December 2006)
C.1.6. Changes in release 5.1.13 (Not released)
C.1.7. Changes in release 5.1.12 (24 October 2006)
C.1.8. Changes in release 5.1.11 (26 May 2006)
C.1.9. Changes in release 5.1.10 (Not released)
C.1.10. Changes in release 5.1.9 (12 April 2006)
C.1.11. Changes in release 5.1.8 (Not released)
C.1.12. Changes in release 5.1.7 (27 February 2006)
C.1.13. Changes in release 5.1.6 (01 February 2006)
C.1.14. Changes in release 5.1.5 (10 January 2006)
C.1.15. Changes in release 5.1.4 (21 December 2005)
C.1.16. Changes in release 5.1.3 (29 November 2005)
C.1.17. Changes in release 5.1.2 (Not released)
C.1.18. Changes in release 5.1.1 (Not released)
C.2. MySQL Connector/ODBC (MyODBC) Change History
C.2.1. Changes in Connector/ODBC 5.0.11 (31 January 2007)
C.2.2. Changes in Connector/ODBC 5.0.10 (14 December 2006)
C.2.3. Changes in Connector/ODBC 5.0.9 (22 November 2006)
C.2.4. Changes in Connector/ODBC 5.0.8 (17 November 2006)
C.2.5. Changes in Connector/ODBC 5.0.7 (08 November 2006)
C.2.6. Changes in Connector/ODBC 5.0.6 (03 November 2006)
C.2.7. Changes in Connector/ODBC 5.0.5 (17 October 2006)
C.2.8. Changes in Connector/ODBC 5.0.3 (Connector/ODBC 5.0 Alpha 3) (20 June 2006)
C.2.9. Changes in Connector/ODBC 5.0.2 (Never released)
C.2.10. Changes in Connector/ODBC 5.0.1 (Connector/ODBC 5.0 Alpha 2) (05 June 2006)
C.2.11. Changes in Connector/ODBC 3.51.15 (Not yet released)
C.2.12. Changes in Connector/ODBC 3.51.14 (08 March 2007)
C.2.13. Changes in Connector/ODBC 3.51.13 (Never released)
C.2.14. Changes in Connector/ODBC 3.51.12
C.2.15. Changes in Connector/ODBC 3.51.11
C.3. Connector/NET Change History
C.3.1. Changes in MySQL Connector/NET Version 5.0.7 (Not yet released)
C.3.2. Changes in MySQL Connector/NET Version 5.0.6 (22 March 2007)
C.3.3. Changes in MySQL Connector/NET Version 5.0.5 (07 March 2007)
C.3.4. Changes in MySQL Connector/NET Version 5.0.4 (Not released)
C.3.5. Changes in MySQL Connector/NET Version 5.0.3 (05 January 2007)
C.3.6. Changes in MySQL Connector/NET Version 5.0.2 (06 November 2006)
C.3.7. Changes in MySQL Connector/NET Version 5.0.1 (01 October 2006)
C.3.8. Changes in MySQL Connector/NET Version 5.0.0 (08 August 2006)
C.3.9. Changes in MySQL Connector/NET Version 1.0.10 (Not yet released)
C.3.10. Changes in MySQL Connector/NET Version 1.0.9 (02 February 2007
C.3.11. Changes in MySQL Connector/NET Version 1.0.8 (20 October 2006)
C.3.12. Changes in MySQL Connector/NET Version 1.0.7 (21 November 2005)
C.3.13. Changes in MySQL Connector/NET Version 1.0.6 (03 October 2005)
C.3.14. Changes in MySQL Connector/NET Version 1.0.5 (29 August 2005)
C.3.15. Changes in MySQL Connector/NET Version 1.0.4 (20 January 2005)
C.3.16. Changes in MySQL Connector/NET Version 1.0.3-gamma (12 October 2004)
C.3.17. Changes in MySQL Connector/NET Version 1.0.2-gamma (15 November 2004)
C.3.18. Changes in MySQL Connector/NET Version 1.0.1-beta2 (27 October 2004)
C.3.19. Changes in MySQL Connector/NET Version 1.0.0 (01 September 2004)
C.3.20. Changes in MySQL Connector/NET Version 0.9.0 (30 August 2004)
C.3.21. Changes in MySQL Connector/NET Version 0.76
C.3.22. Changes in MySQL Connector/NET Version 0.75
C.3.23. Changes in MySQL Connector/NET Version 0.74
C.3.24. Changes in MySQL Connector/NET Version 0.71
C.3.25. Changes in MySQL Connector/NET Version 0.70
C.3.26. Changes in MySQL Connector/NET Version 0.68
C.3.27. Changes in MySQL Connector/NET Version 0.65
C.3.28. Changes in MySQL Connector/NET Version 0.60
C.3.29. Changes in MySQL Connector/NET Version 0.50
C.4. MySQL Visual Studio Plugin Change History
C.4.1. Changes in MySQL Visual Studio Plugin 1.1.3 (Not yet released)
C.4.2. Changes in MySQL Visual Studio Plugin 1.0.2 (Not yet released)
C.4.3. Changes in MySQL Visual Studio Plugin 1.0.1 (4 October 2006)
C.4.4. Changes in MySQL Visual Studio Plugin 1.0.0 (4 October 2006)
C.5. MySQL Connector/J Change History
C.5.1. Changes in MySQL Connector/J 5.1.x
C.5.2. Changes in MySQL Connector/J 5.0.x
C.5.3. Changes in MySQL Connector/J 3.1.x
C.5.4. Changes in MySQL Connector/J 3.0.x
C.5.5. Changes in MySQL Connector/J 2.0.x
C.5.6. Changes in MySQL Connector/J 1.2b (04 July 1999)
C.5.7. Changes in MySQL Connector/J 1.2.x and lower

This appendix lists the changes from version to version in the MySQL source code through the latest version of MySQL 5.1, which is currently MySQL 5.1.18-beta. Starting with MySQL 5.0, we began offering a new version of the Manual for each new series of MySQL releases (5.0, 5.1, and so on). For information about changes in previous release series of the MySQL database software, see the corresponding version of this Manual. For information about legacy versions of the MySQL software through the 4.1 series, see MySQL 3.23, 4.0, 4.1 Reference Manual.

We update this section as we add new features in the 5.1 series, so that everybody can follow the development process.

Note that we tend to update the manual at the same time we make changes to MySQL. If you find a recent version of MySQL listed here that you can't find on our download page (http://dev.mysql.com/downloads/), it means that the version has not yet been released.

The date mentioned with a release version is the date of the last BitKeeper ChangeSet on which the release was based, not the date when the packages were made available. The binaries are usually made available a few days after the date of the tagged ChangeSet, because building and testing all packages takes some time.

The manual included in the source and binary distributions may not be fully accurate when it comes to the release changelog entries, because the integration of the manual happens at build time. For the most up-to-date release changelog, please refer to the online version instead.

C.1.聽Changes in release 5.1.x (Development)

An overview of which features were added in MySQL 5.1 can be found here: Section聽1.6.1, 鈥淲hat's New in MySQL 5.1鈥.

For a full list of changes, please refer to the changelog sections for each individual 5.1.x release.

C.1.1.聽Changes in release 5.1.18 (Not yet released)

This is a new Beta development release, fixing recently discovered bugs.

NOTE: This Beta release, as any other pre-production release, should not be installed on production level systems or systems with critical data. It is good practice to back up your data before installing any new version of software. Although MySQL has worked very hard to ensure a high level of quality, protect your data by making a backup as you would for any software beta release. Please refer to our bug database at http://bugs.mysql.com/ for more details about the individual bugs fixed in this version.

This section documents all changes and bug fixes that have been applied since the last official MySQL release. If you would like to receive more fine-grained and personalized update alerts about fixes that are relevant to the version and features you use, please consider subscribing to MySQL Network (a commercial MySQL offering). For more details please see http://www.mysql.com/network/advisors.html.

Functionality added or changed:

  • The output of mysql --xml and mysqldump --xml now includes a valid XML namespace. (Bug#25946)

  • The mysql_create_system_tables script was removed because mysql_install_db no longer uses it in MySQL 5.1.

  • Renamed the old_mode system variable to old.

  • Added a MASTER_SSL_VERIFY_SERVER_CERT option for the CHANGE MASTER statement, and a Master_SSL_Verify_Server_Cert output column to the SHOW SLAVE STATUS statement. The option value also is written to the master.info file. (Bug#19991)

  • NDB Cluster: The behavior of the ndb_restore utility has been changed as follows:

    • It is now possible to restore selected databases or tables using ndb_restore. (Bug#26899)

    • Several options have been added for use with ndb_restore --print_data to facilitate the creation of structured data dump files. These options can be used to make dumps made using ndb_restore more like those produced by mysqldump. (Bug#26900)

    For details of these changes, see Section聽15.8.3, 鈥ndb_restore 鈥 Restore a Cluster Backup鈥.

  • NDB Cluster (Replication)/Incompatible Change: The definition of the mysql.ndb_apply_status table has changed such that an online upgrade is not possible from MySQL 5.1.17 or earlier for a replication slave cluster; you must shut down all SQL nodes as part of the upgrade procedure. See Section聽15.5.2, 鈥淐luster Upgrade and Downgrade Compatibility鈥 before upgrading for details.

    For more information about the changes to mysql.ndb_apply_status see Section聽15.10.4, 鈥淐luster Replication Schema and Tables鈥.

  • NDB Cluster (Replication): Some circular replication setups are now supported for MySQL Cluster. See Section聽15.10.3, 鈥淜nown Issues鈥, for detailed information. (Bug#25688, Bug#17095)

Bugs fixed:

  • Security fix: If a stored routine was declared using SQL SECURITY INVOKER, a user who invoked the routine could gain privileges. (Bug#27337)

  • Security fix: The requirement of the DROP privilege for RENAME TABLE was not being enforced. (Bug#27515)

  • Security fix: A user with only the ALTER privilege on a partitioned table could obtain information about the table that should require the SELECT privilege. (Bug#23675)

  • The patches for Bug#19370 and Bug#21789 were reverted.

  • NDB Cluster (Disk Data): When in single user mode, it was possible to create log file groups and tablespaces from any SQL node connected to the cluster. (Bug#27712)

  • NDB Cluster (Disk Data): Changing a column specification or issuing a TRUNCATE statement on a Disk Data table caused the table to become an in-memory table. (Bug#24667, Bug#25296)

    This fix supersedes an incomplete fix that was made for this issue in MySQL 5.1.15.

  • NDB Cluster (Replication): Setting SQL_LOG_BIN to zero did not disable binary logging. (Bug#27076)

    This issue affected only the NDB storage engine.

  • NDB Cluster (Replication): It was possible for API nodes to begin interacting with the cluster subscription manager before they were fully connected to the cluster. (Bug#27651)

  • NDB Cluster (Replication): Under very high loads, checkpoints could be read or written with checkpoint indexes out of order. (Bug#27651)

  • NDB Cluster: NDB tables having MEDIUMINT AUTO_INCREMENT columns were not restored correctly by ndb_restore, causing spurious duplicate key errors. This issue did not affect TINYINT, INT, or BIGINT columns with AUTO_INCREMENT. (Bug#27775)

  • NDB Cluster: NDB tables with indexes whose names contained space characters were not restored correctly by ndb_restore (the index names were truncated). (Bug#27758)

  • NDB Cluster (Disk Data): Changes to a Disk Data table made as part of a transaction could not be seen by the client performing the changes until the transaction had been committed. (Bug#27757)

  • NDB Cluster: An INSERT followed a delete DELETE on the same NDB table caused a memory leak. (Bug#27756)

    (This bug was introduced by the fix for Bug#20612.)

  • NDB Cluster: Some queries that updated multiple tables were not backed up or replicated correctly. (Bug#27748)

  • NDB Cluster: Joins on multiple tables containing BLOB columns could cause data nodes run out of memory, and to crash with the error NdbObjectIdMap::expand unable to expand. (Bug#26176)

  • NDB Cluster: When trying to create an NDB table after the server was started with --ndbcluster but without --ndb-connectstring, mysqld produced a memory allocation error. (Bug#27359)

  • NDB Cluster (APIs): Using NdbBlob::writeData() to write data in the middle of an existing blob value (that is, updating the value) could overwrite some data past the end of the data to be changed. (Bug#27018)

  • NDB Cluster (Replication): Trying to replicate a large number of frequent updates with a relatively small relay log (max-relay-log-size set to 1M or less) could cause the slave to crash. (Bug#27529)

  • NDB Cluster (Replication): An SQL node acting as a replication master server could be a single point of failure; that is, if it failed, the replication slave had no way of knowing this, which could result in a mismatch of data between the master and the slave. (Bug#21494)

  • NDB Cluster (Disk Data): CREATE TABLE ... LIKE disk_data_table created an in-memory NDB table. (Bug#25875)

  • NDB Cluster (Disk Data): Creating an excessive number of data files for a single tablespace caused data nodes to crash. (Bug#24521)

  • NDB Cluster: Under certain rare circumstances, DROP TABLE or TRUNCATE of an NDB table could cause a node failure or forced cluster shutdown. (Bug#27581)

  • NDB Cluster: Memory usage of a mysqld process grew even while idle. (Bug#27560)

  • NDB Cluster: Using more than 16GB for DataMemory caused problems with variable-size columns. (Bug#27512)

  • NDB Cluster: In an NDB table having a TIMESTAMP column using DEFAULT CURRENT_TIMESTAMP, that column would assume a random value when another column in the same row was updated. (Bug#27127)

  • NDB Cluster: Performing ALTER TABLE ... ENGINE=MERGE on an NDB table caused mysqld to crash. (Bug#26898)

  • NDB Cluster: The Cluster table handler did not set bits in null bytes correctly. (Bug#26591)

  • NDB Cluster: In some cases, AFTER UPDATE and AFTER DELETE triggers on NDB tables that referenced subject table did not see the results of operation which caused invocation of the trigger, but rather saw the row as it was prior to the update or delete operation.

    This was most noticeable when an update operation used a subquery to obtain the rows to be updated. An example would be UPDATE tbl1 SET col2 = val1 WHERE tbl1.col1 IN (SELECT col3 FROM tbl2 WHERE c4 = val2) where there was an AFTER UPDATE trigger on table tbl1. In such cases, the trigger would fail to execute.

    The problem occurred because the actual update or delete operations were deferred to be able to perform them later as one batch. The fix for this bug solves the problem by disabling this optimization for a given update or delete if the table has an AFTER trigger defined for this operation. (Bug#26242)

  • NDB Cluster: START BACKUP NOWAIT caused a spurious Out of backup record error in the management client (START BACKUP and START BACKUP WAIT STARTED performed normally). (Bug#25446)

  • NDB Cluster: When trying to create tables on an SQL node not connected to the cluster, a misleading error message Table 'tbl_name' already exists was generated. The error now generated is Could not connect to storage engine. (Bug#18676)

  • NDB Cluster: A data node failing while another data node was restarting could leave the cluster in an inconsistent state. In certain rare cases, this could lead to a race condition and the eventual forced shutdown of the cluster. (Bug#27466)

  • NDB Cluster: When using the MemReportFrequency configuration parameter to generate periodic reports of memory usage in the cluster log, DataMemory usage was not always reported for all data nodes. (Bug#27444)

  • NDB Cluster: Error messages displayed when running in single user mode were inconsistent. (Bug#27021)

  • NDB Cluster: On Solaris, the value of an NDB table column declared as BIT(33) was always displayed as 0. (Bug#26986)

  • NDB Cluster (Replication): An UPDATE on the master became a DELETE on slaves. (Bug#27378)

  • An interaction between SHOW TABLE STATUS and other concurrent statements that modify the table could result in a divide-by-zero error and a server crash. (Bug#27516)

  • The decimal.h header file was incorrectly omitted from binary distributions. (Bug#27456)

  • mysqldump could not connect using SSL. (Bug#27669)

  • yaSSL crashed on pre-Pentium Intel CPUs. (Bug#21765)

  • The test for the MYSQL_OPT_SSL_VERIFY_SERVER_CERT option for mysql_options() was performed incorrectly. Also changed as a result of this bugfix: The arg option for the mysql_options() C API function was changed from char * to void *. (Bug#24121)

  • Comparisons using row constructors could fail for rows containing NULL values. (Bug#27704)

  • Performing a UNION on two views that had had ORDER BY clauses resulted in an Unknown column error. (Bug#27786)

  • The CRC32() function returns an unsigned integer, but the metadata was signed, which could cause certain queries to return incorrect results. (For example, queries that selected a CRC32() value and used that value in the GROUP BY clause.) (Bug#27530)

  • A race condition between DROP TABLE and SHOW TABLE STATUS could cause the latter to display incorrect information. (Bug#27499)

  • mysqldump would not dump a view for which the DEFINER no longer exists. (Bug#26817)

  • Changing a utf8 column in an InnoDB table to a shorter length did not shorten the data values. (Bug#20095)

  • The server did not shut down cleanly. (Bug#27310)

  • Using SET GLOBAL to change the lc_time_names system variable had no effect on new connections. (Bug#22648)

  • The XML output representing an empty result was an empty string rather than an empty <resultset/> element. (Bug#27608)

  • The range optimizer could consume a combinatorial amount of memory for certain classes of WHERE clauses. (Bug#26624)

  • mysqlbinlog produced different output with the -R option than without it. (Bug#27171)

  • A stored function invocation in the WHERE clause was treated as a constant. (Bug#27354)

  • mysqldump could not dump the log tables. (Bug#26121)

  • Implicit conversion of 9912101 to DATE did not match CAST(9912101 AS DATE). (Bug#23093)

  • CURDATE() is less than NOW(), either when comparing CURDATE() directly (CURDATE() < NOW() is true) or when casting CURDATE() to DATE (CAST(CURDATE() AS DATE) < NOW() is true). However, storing CURDATE() in a DATE column and comparing col_name < NOW() incorrectly yielded false. This is fixed by comparing a DATE column as DATETIME for comparisons to a DATETIME constant. (Bug#21103)

  • For dates with 4-digit year parts less than 200, an incorrect implicit conversion to add a century was applied for date arithmetic performed with DATE_ADD(), DATE_SUB(), + INTERVAL, and - INTERVAL. (For example, DATE_ADD('0050-01-01 00:00:00', INTERVAL 0 SECOND) became '2050-01-01 00:00:00'.) (Bug#18997)

  • Some equi-joins containing a WHERE clause that included a NOT IN subquery caused a server crash. (Bug#27870)

  • A memory leak in the event scheduler that was uncovered by Valgrind was fixed. (Bug#27733)

  • For queries that used ORDER BY with InnoDB tables, if the optimizer chose an index for accessing the table but found a covering index that enabled the ORDER BY to be skipped, no results were returned. (Bug#24778)

  • Group relay log rotation updated only the log position and not the name, causing the slave to stop. (Bug#27583)

  • Conversion of DATETIME values in numeric contexts sometimes did not produce a double (YYYYMMDDHHMMSS.uuuuuu) value. (Bug#16546)

  • Passing nested row expressions with different structures to an IN predicate caused a server crash. (Bug#27484)

  • SELECT DISTINCT could return incorrect results if the select list contained duplicated columns. (Bug#27659)

  • A subquery could get incorrect values for references to outer query columns when it contained aggregate functions that were aggregated in outer context. (Bug#27321)

  • In some cases, the optimizer preferred a range or full index scan access method over lookup access methods when the latter were much cheaper. (Bug#19372)

  • Duplicates were not properly identified among (potentially) long strings used as arguments for GROUP_CONCAT(DISTINCT). (Bug#26815)

  • For InnoDB, fixed consistent-read behavior of the first read statement, if the read was served from the query cache, for the READ COMMITTED isolation level. (Bug#21409)

  • The binary log incompatiblity introduced by the fix for Bug#22583 was corrected. (Bug#27779)

  • Row-based replication of MyISAM to non-MyISAM tables did not work correctly for BIT columns. This has been corrected, but the fix introduces an incompatibility into the binary log format. (Bug#22583) (The incompatibility is corrected by the fix for Bug#27779.)

  • Duplicate members in SET definitions were not detected. Now they result in a warning; if strict SQL mode is enabled, an error occurs instead. (Bug#27069)

  • If the name of a table given to myisamchk -rq was a packed table and the name included the .MYI extension, myisamchk incorrectly created a file with a .MYI.MYI extension. (Bug#26782)

  • For INSERT INTO ... SELECT where index searches used column prefixes, insert errors could occur when key value type conversion was done. (Bug#26207)

  • For SHOW ENGINE INNODB STATUS, the LATEST DEADLOCK INFORMATION was not always cleared properly. (Bug#25494)

  • On Windows, if the server was installed as a service, it did not auto-detect the location of the data directory. (Bug#20376)

  • The FEDERATED engine did not allow the local and remote tables to have different names. (Bug#26257)

  • The NO_DIR_IN_CREATE server SQL mode was not enforced for partitioned tables. (Bug#24663)

  • On Windows, trying to use backslash (\) characters in paths for DATA DIRECTORY and INDEX DIRECTORY when creating partitioned tables caused MySQL to crash. (Bug#26074)

    (You must use / characters when specifying paths for these options, regardless of platform. See Section聽16.1, 鈥淥verview of Partitioning in MySQL鈥, for an example using absolute paths for DATA DIRECTORY and INDEX DIRECTORY when creating a partitioned table on Windows.)

  • A damaged or missing mysql.event table caused SHOW VARIABLES to fail. (Bug#23631)

  • Database and table names have a maximum length of 64 characters (even if they contain multi-byte characters), but were being truncated to 64 bytes. (Bug#21432)

  • If a rotate event occured in the middle of a non-transaction group, the group position would be updated by the rotate event indicating an illegal group start position that was effectively inside a group. This can happen if, for example, a rotate occurs between an Intvar event and the associated Query event, or between the table map events and the rows events when using row-based replication. (Bug#23171)

  • mysqldump could crash or exhibit incorrect behavior when some options were given very long values, such as --fields-terminated-by="some very long string". The code has been cleaned up to remove a number of fixed-sized buffers and to be more careful about error conditions in memory allocation. (Bug#26346)

  • Setting a column to NOT NULL with an ON DELETE SET NULL clause foreign key crashes the server. (Bug#25927)

  • The values displayed for the Innodb_row_lock_time, Innodb_row_lock_time_avg, and Innodb_row_lock_time_max status variables were incorrect. (Bug#23666)

  • COUNT(decimal_expr) sometimes generated a spurious truncation warning. (Bug#21976)

  • With NO_AUTO_VALUE_ON_ZERO SQL mode enabled, LOAD DATA operations could assign incorrect AUTO_INCREMENT values. (Bug#27586)

  • Incorrect results could be returned for some queries that contained a select list expression with IN or BETWEEN together with an ORDER BY or GROUP BY on the same expression using NOT IN or NOT BETWEEN. (Bug#27532)

  • For the INFORMATION_SCHEMA SESSION_STATUS and GLOBAL_STATUS tables, some status values were incorrectly converted to the data type of the VARIABLE_VALUE column. (Bug#27327)

  • Queries containing subqueries with COUNT(*) aggregated in an outer context returned incorrect results. This happened only if the subquery did not contain any references to outer columns. (Bug#27257)

  • Use of an aggregate function from an outer context as an argument to GROUP_CONCAT() caused a server crash. (Bug#27229)

  • Restoration of the default database after stored routine or trigger execution on a slave could cause replication to stop if the database no longer existed. (Bug#25082)

  • String truncation upon insertion into an integer or year column did not generate a warning (or an error in strict mode). (Bug#26359, Bug#27176)

  • In out-of-memory conditions, the server might crash or otherwise not report an error to the Windows event log. (Bug#27490)

  • The temporary file-creation code was cleaned up on Windows to improve server stability. (Bug#26233)

  • Out-of-memory errors were not reported. Now they are written to the error log. (Bug#26844)

  • mysqldump crashed for MERGE tables if the --complete-insert (-c) option was given. (Bug#25993)

  • Corrupted MyISAM tables that have different definitions in the .frm and .MYI tables might cause a server crash. (Bug#25908)

  • In certain situations, MATCH ... AGAINST returned false hits for NULL values produced by LEFT JOIN when no full-text index was available. (Bug#25729)

  • OPTIMIZE TABLE might fail on Windows when it attempts to rename a temporary file to the original name if the original file had been opened, resulting in loss of the .MYD file. (Bug#25521)

  • GRANT statements were not replicated if the server was started with the --replicate-ignore-table or --replicate-wild-ignore-table option. (Bug#25482)

  • MBROverlaps() returned incorrect values in some cases. (Bug#24563)

  • A problem in handling of aggregate functions in subqueries caused predicates containing aggregate functions to be ignored during query execution. (Bug#24484)

  • Improved out-of-memory detection when sending logs from a master server to slaves, and log a message when allocation fails. (Bug#26837)

  • MBRDisjoint(), MBRequal(), MBRIntersects(), MBROverlaps(), MBRTouches(), and MBRWithin() were inadvertently omitted from recent versions of MySQL (5.1.14 to 5.1.17). (Bug#24563)

  • SHOW CREATE VIEW qualified references to stored functions in the view definition with the function's database name, even when the database was the default database. This affected mysqldump (which uses SHOW CREATE VIEW to dump views) because the resulting dump file could not be used to reload the database into a different database. SHOW CREATE VIEW now suppresses the database name for references to functions in the default database. (Bug#23491)

  • When MySQL logged slow query information to a CSV table, it used an incorrect formula to calculate the query_time and lock_time values. (Bug#27638)

  • With innodb_file_per_table enabled, attempting to rename an InnoDB table to a non-existent database caused the server to exit. (Bug#27381)

  • mysql_install_db could terminate with an error after failing to determine that a system table already existed. (Bug#27022)

  • For InnoDB tables having a clustered index that began with a CHAR or VARCHAR column, deleting a record and then inserting another before the deleted record was purged could result in table corruption. (Bug#26835)

  • make_win_bin_dist neglected to copy some required MyISAM table files. (Bug#26922)

  • Fixed a possible buffer overflow in SHOW PROCEDURE CODE. (Bug#26303)

  • Selecting the result of AVG() within a UNION could produce incorrect values. (Bug#24791)

  • Access via my_pread() or my_pwrite() to table files larger than 2GB could fail on some systems. (Bug#24566)

  • An INTO OUTFILE clause is allowed only for the final SELECT of a UNION, but this restriction was not being enforced correctly. (Bug#23345)

  • Duplicate entries were not assessed correctly in a MEMORY table with a BTREE primary key on a utf8 ENUM column. (Bug#24985)

  • For MyISAM tables, COUNT(*) could return an incorrect value if the WHERE clause compared an indexed TEXT column to the empty string (''). This happened if the column contained empty strings and also strings starting with control characters such as tab or newline. (Bug#26231)

  • For DELETE FROM tbl_name ORDER BY col_name (with no WHERE or LIMIT clause), the server did not check whether col_name was a valid column in the table. (Bug#26186)

  • ALTER VIEW requires the CREATE VIEW and DROP privileges for the view. However, if the view was created by another user, the server erroneously required the SUPER privilege. (Bug#26813)

  • mysqlbinlog --base64-output produced invalid SQL. (Bug#26194)

  • In a view, a column that was defined using a GEOMETRY function was treated as having the LONGBLOB data type rather than the GEOMETRY type. (Bug#27300)

  • Some views could not be created even when the user had the requisite privileges. (Bug#24040)

  • With the NO_AUTO_VALUE_ON_ZERO SQL mode enabled, LAST_INSERT_ID() could return 0 after INSERT ... ON DUPLICATE KEY UPDATE. Additionally, the next rows inserted (by the same INSERT, or the following INSERT with or without ON DUPLICATE KEY UPDATE), would insert 0 for the auto-generated value if the value for the AUTO_INCREMENT column was NULL or missing. (Bug#23233)

  • Executing an INSERT ... SELECT ... FROM INFORMATION_SCHEMA.GLOBAL_STATUS statement from within an event caused a server crash. (Bug#26174)

  • Having the EXECUTE privilege for a routine in a database should make it possible to USE that database, but the server returned an error instead. This has been corrected. As a result of the change, SHOW TABLES for a database in which you have only the EXECUTE privilege returns an empty set rather than an error. (Bug#9504)

  • When RAND() was called multiple times inside a stored procedure, the server did not write the correct random seed values to the binary log, resulting in incorrect replication. (Bug#25543)

  • SOUNDEX() returned an invalid string for international characters in multi-byte character sets. (Bug#22638)

  • Row equalities in WHERE clauses could cause memory corruption. (Bug#27154)

  • GROUP BY on a ucs2 column caused a server crash when there was at least one empty string in the column. (Bug#27079)

  • Evaluation of an IN() predicate containing a decimal-valued argument caused a server crash. (Bug#27362)

  • Storing NULL values in spatial fields caused excessive memory allocation and crashes on some systems. (Bug#27164)

  • mysql_stmt_fetch() did an invalid memory deallocation when used with the embedded server. (Bug#25492)

  • For FEDERATED tables, SHOW CREATE TABLE could fail when the table name was longer than the connection name. (Bug#27036)

  • In a MEMORY table, using a BTREE index to scan for updatable rows could lead to an infinite loop. (Bug#26996)

  • The range optimizer could cause the server to run out of memory. (Bug#26625)

  • CREATE SERVER, DROP SERVER, and ALTER SERVER did not require any privileges. Now these statements require the SUPER privilege. (Bug#25671)

  • Concurrent CREATE SERVER and ALTER SERVER statements could cause a deadlock. (Bug#25721)

  • Difficult repair or optimization operations could cause an assertion failure, resulting in a server crash. (Bug#25289)

C.1.2.聽Changes in release 5.1.17 (04 April 2007)

This is a new Beta development release, fixing recently discovered bugs.

NOTE: This Beta release, as any other pre-production release, should not be installed on production level systems or systems with critical data. It is good practice to back up your data before installing any new version of software. Although MySQL has worked very hard to ensure a high level of quality, protect your data by making a backup as you would for any software beta release. Please refer to our bug database at http://bugs.mysql.com/ for more details about the individual bugs fixed in this version.

This section documents all changes and bug fixes that have been applied since the last official MySQL release. If you would like to receive more fine-grained and personalized update alerts about fixes that are relevant to the version and features you use, please consider subscribing to MySQL Network (a commercial MySQL offering). For more details please see http://www.mysql.com/network/advisors.html.

Functionality added or changed:

  • Incompatible change: Scheduled events now use the MySQL server time zone to determine their schedules, rather than UTC as in previous releases. Because of this change, scheduled event metadata now includes time zone information, which can be seen in the TIME_ZONE column of the INFORMATION_SCHEMA.EVENTS table and the Time zone column in the output of the SHOW EVENTS statement. These columns have been added in this release, along with a time_zone column in the mysql.event table. Due to these changes, events created in previous versions of MySQL cannot be created, viewed, or used until mysql.event has been upgraded. (Bug#16420)

  • Important change: The CREATE EVENT and ALTER EVENT statements now support a DEFINER clause, similar to that used in the CREATE TRIGGER statement. (Bug#16425)

    See Section聽20.2.2, 鈥CREATE EVENT Syntax鈥, for detailed information.

  • Important change: The following options for controlling replication master configuration on a slave are now deprecated.

    • --master-host

    • --master-user

    • --master-password

    • --master-port

    • --master-connect-retry

    • --master-ssl

    • --master-ssl-ca

    • --master-ssl-capath

    • --master-ssl-cert

    • --master-ssl-cipher

    • --master-ssl-key

    To change the master configuration on a slave you should use the CHANGE MASTER statement. (See also #21490)

  • Statements that affect mysql database tables now are written to the binary log using the following rules:

    • Data manipulation statements such as INSERT that change data in mysql database tables directly are logged according to the settings of the binlog_format system variable.

    • Statements such as GRANT that change the mysql database indirectly are logged as statements regardless of the value of binlog_format.

    For more details, see Section聽6.1.2.4, 鈥淟ogging Format for Changes to mysql Database Tables鈥. (Bug#25091)

  • Prepared statements now use the query cache under the conditions described in Section聽5.13.1, 鈥淗ow the Query Cache Operates鈥. (Bug#735)

  • Added the --secure-file-priv option for mysql-test-run.pl, which limits the effect of the load_file command for mysqltest and for the LOAD DATA and SELECT ... INTO OUTFILE statements to work with files in a given directory. (Bug#18628)

  • Added the innodb_stats_on_metadata system variable to enable control over whether InnoDB performs statistics gathering when metadata statements are executed. See Section聽14.5.4, 鈥InnoDB Startup Options and System Variables鈥. (Bug#26598)

  • Added the hostname system variable, which the server sets at startup to the server hostname.

  • The syntax for index hints has been extended to enable more fine-grained control over the optimizer's selection of an execution plan for various phases of query processing. See Section聽13.2.7.2, 鈥淚ndex Hint Syntax鈥. (Bug#21174)

  • Added the old_mode system variable to cause the server to revert to certain behaviors present in older versions. Currently, this variable affects handling of index hints. See Section聽13.2.7.2, 鈥淚ndex Hint Syntax鈥.

  • NDB Cluster: Added the --skip-table-check option (short form -s) for ndb_restore, which causes the restoration process to ignore any changes that may have occurred in table schemas after the backup was made. Previously, this was the default behavior. (Bug#24363)

    See Section聽15.8.3, 鈥ndb_restore 鈥 Restore a Cluster Backup鈥, for more information.

  • The server now includes a timestamp in error messages that are logged as a result of unhandled signals (such as mysqld got signal 11 messages). (Bug#24878)

  • Prefix lengths for columns in SPATIAL indexes no longer can be specified. For tables created in older versions of MySQL that have SPATIAL indexes containing prefixed columns, dumping and reloading the table causes the indexes to be created with no prefixes. (The full column width of each column is indexed.) (Bug#26794)

  • Added a --no-beep option to mysqladmin. It suppresses the warning beep that is emitted by default for errors such as a failure to connect to the server. (Bug#26964)

Bugs fixed:

  • Incompatible change: INSERT DELAYED statements are not supported for MERGE tables, but the MERGE storage engine was not rejecting such statements, resulting in table corruption. Applications previously using INSERT DELAYED into MERGE table will break when upgrading to versions with this fix. To avoid the problem, remove DELAYED from such statements. (Bug#26464)

  • Creating a table on one SQL node while in single user mode caused other SQL nodes to crash. (Bug#26997)

  • NDB Cluster: The output from ndb_restore --print_data was incorrect for a backup made of a database containing tables with TINYINT or SMALLINT columns. (Bug#26740)

  • NDB Cluster: After putting the cluster in single user mode from one MySQL server, trying to drop an NDB table from a second MySQL server also connected to the cluster would cause the second MySQL server to hang. (Bug#27254)

  • NDB Cluster (Cluster APIs): You can now use the ndb_mgm_check_connection() function to determine whether a management server is running. See ndb_mgm_check_connection().

  • NDB Cluster: mysqld could crash shortly after a data node failure following certain DML operations. (Bug#27169)

  • NDB Cluster: The management client command node_id STATUS displayed the message Node node_id: not connected when node_id was not the node ID of a data node. (Bug#21715)

    Note

    The ALL STATUS command in the cluster management client still displays status information for data nodes only. This is by design. See Section聽15.7.2, 鈥淐ommands in the MySQL Cluster Management Client鈥, for more information.

  • NDB Cluster (Cluster APIs): NAND and NOR operations with NdbScanFilter did not perform correctly. (Bug#24568)

  • NDB Cluster (Cluster Replication): The simultaneous failure of a data node and an SQL node could cause replication to fail. (Bug#27005)

  • NDB Cluster (Disk Data): Under some circumstances, a data node could fail during restart while flushing Disk Data UNDO logs. (Bug#27102)

  • NDB Cluster (Disk Data): Creating multiple Disk Data tables using different tablespaces could sometimes cause the cluster to fail. (Bug#25992)

  • NDB Cluster (Disk Data): ALTER TABLE ... ADD COLUMN ... on a Disk Data table moved data for existing non-indexed columns from the tablespace into memory. (Bug#25880)

  • NDB Cluster (Disk Data): DROP INDEX on a Disk Data table did not always move data from memory into the tablespace. (Bug#25877)

  • NDB Cluster (Disk Data): When creating a log file group, setting INITIAL_SIZE to less than UNDO_BUFFER_SIZE caused data nodes to crash. (Bug#25743)

  • NDB Cluster: It was not possible to set LockPagesInMainMemory equal to 0. (Bug#27291)

  • NDB Cluster: A race condition could sometimes occur if the node acting as master failed while node IDs were still being allocated during startup. (Bug#27286)

  • NDB Cluster: When a data node was taking over as the master node, a race condition could sometimes occur as the node was assuming responsibility for handling of global checkpoints. (Bug#27283)

  • NDB Cluster: A delete operation using a scan following by an insert using a scan could cause a data node to fail. (Bug#27203)

  • NDB Cluster: The same failed request from an API node could be handled by the cluster multiple times, resulting in reduced performance. (Bug#27087)

  • NDB Cluster: The failure of a data node while restarting could cause other data nodes to hang or crash. (Bug#27003)

  • NDB Cluster: mysqld processes would sometimes crash under high load. (Bug#26825)

  • NDB Cluster: When performing an upgrade or downgrade, no specific error information was made available when trying to upgrade data nodes or SQL nodes before upgrading management nodes. (Bug#21296)

  • NDB Cluster: Some values of MaxNoOfTables caused the error Job buffer congestion to occur. (Bug#19378)

  • NDB Cluster: An invalid pointer was returned following a FSCLOSECONF signal when accessing the REDO logs during a node restart or system restart. (Bug#26515)

  • NDB Cluster (Disk Data): A memory overflow could occur with tables having a large amount of data stored on disk, or with queries using a very high degree of parallelism on Disk Data tables. (Bug#26514)

  • NDB Cluster (Disk Data): Use of a tablespace whose INITIAL_SIZE was greater than 1 GB could cause the cluster to crash. (Bug#26487)

  • NDB Cluster: Using only the --print_data option (and no other options) with ndb_restore caused ndb_restore to fail. (Bug#26741)

    This bug was introduced by the fix for Bug#14612.

  • NDB Cluster: An infinite loop in an internal logging function could cause trace logs to fill up with Unknown Signal type error messages and thus grow to unreasonable sizes. (Bug#26720)

  • While preparing prepared statements, the server acquired unnecessary table write locks. (Bug#18326)

  • For some operations, system tables in the mysql database must be accessed. For example, the HELP statement requires the contents of the server-side help tables, and CONVERT_TZ() might need to read the time zone tables. However, to perform such operations while a LOCK TABLES statement is in effect, the server required you to also lock the requisite system tables explicitly or a lock error occurred:

    mysql> LOCK TABLE t1 READ;
    Query OK, 0 rows affected (0.02 sec)
    mysql> HELP HELP;
    ERROR 1100 (HY000) at line 4: Table 'help_topic' was not
    locked with LOCK TABLES
    

    Now, the server implicitly locks the system tables for reading as necessary so that you need not lock them explicitly. These tables are treated as just described:

    mysql.help_category
    mysql.help_keyword
    mysql.help_relation
    mysql.help_topic
    mysql.proc
    mysql.time_zone
    mysql.time_zone_leap_second
    mysql.time_zone_name
    mysql.time_zone_transition
    mysql.time_zone_transition_type
    

    If you want to explicitly place a WRITE lock on any of those tables with a LOCK TABLES statement, the table must be the only one locked; no other table can be locked with the same statement. (Bug#9953)

  • For a stored procedure containing a SELECT statement that used a complicated join with an ON expression, the expression could be ignored during re-execution of the procedure, yielding an incorrect result. (Bug#20492)

  • The parser accepted illegal code in SQL exception handlers, leading to a crash at runtime when executing the code. (Bug#26503)

  • On Windows, debug builds of mysqld could fail with heap assertions. (Bug#25765)

  • On Windows, debug builds of mysqlbinlog could fail with a memory error. (Bug#23736)

  • SELECT ... INTO OUTFILE with a long FIELDS ENCLOSED BY value could crash the server. (Bug#27231)

  • The server could hang during binary log rotation. (Bug#26079)

  • Increasing the width of a DECIMAL column could cause column values to be changed. (Bug#24558)

  • DOUBLE values such as 20070202191048.000000 were being treated as illegal arguments by WEEK(). (Bug#23616)

  • Replication between master and slave would infinitely retry binary log transmission where the max_allowed_packet on the master was larger than that on the slave if the size of the transfer was between these two values. (Bug#23775)

  • Setting event_scheduler=1 or event_scheduler=ON caused the server to crash if the server had been started with --skip-grant-tables. Starting the server with --skip-grant-tables now causes event_scheduler to be set to DISABLED automatically, overriding any other value that may have been set. (Bug#26807)

  • SHOW CREATE EVENT failed to display the STARTS and ENDS clauses for an event defined with STARTS NOW(), ENDS NOW(), or both. (Bug#26429)

  • Invalid optimization of pushdown conditions for queries where an outer join was guaranteed to read only one row from the outer table led to results with too few rows. (Bug#26963)

  • For INSERT ... ON DUPLICATE KEY UPDATE statements on tables containing AUTO_INCREMENT columns, LAST_INSERT_ID() was reset to 0 if no rows were successfully inserted or changed. 鈥Not changed鈥 includes the case where a row was updated to its current values, but in that case, LAST_INSERT_ID() should not be reset to 0. Now LAST_INSERT_ID() is reset to 0 only if no rows were successfully inserted or touched, whether or not touched rows were changed. (Bug#27033)

    This bug was introduced by the fix for Bug#19978.

  • AFTER UPDATE triggers were not activated by the update part of INSERT ... ON DUPLICATE KEY UPDATE statements. (Bug#27006, Bug#27210)

    This bug was introduced by the fix for Bug#19978.

  • For INSERT ... ON DUPLICATE KEY UPDATE statements where some AUTO_INCREMENT values were generated automatically for inserts and some rows were updated, one auto-generated value was lost per updated row, leading to faster exhaustion of the range of the AUTO_INCREMENT column. (Bug#24432)

    Because the original problem can affect replication (different values on master and slave), it is recommended that the master and its slaves be upgraded to the current version.

  • For an INSERT statement that should fail due to a column with no default value not being assigned a value, the statement succeeded with no error if the column was assigned a value in an ON DUPLICATE KEY UPDATE clause, even if that clause was not used. (Bug#26261)

  • A result set column formed by concatention of string literals was incomplete when the column was produced by a subquery in the FROM clause. (Bug#26738)

  • When using the result of SEC_TO_TIME() for time value greater than 24 hours in an ORDER BY clause, either directly or through a column alias, the rows were sorted incorrectly as strings. (Bug#26672)

  • If the server was started with --skip-grant-tables, Selecting from INFORMATION_SCHEMA tables causes a server crash. (Bug#26285)

  • Adding ORDER BY clause to a query on an InnoDB table could cause the statement to return no result if the optimizer chose a covering index that enabled it to skip the ORDER BY. (Bug#24778)

  • IN ((subquery)), IN (((subquery))), and so forth, are equivalent to IN (subquery), which is always interpreted as a table subquery (so that it is allowed to return more than one row). MySQL was treating the 鈥over-parenthesized鈥 subquery as a single-row subquery and rejecting it if it returned more than one row. This bug primarily affected automatically generated code (such as queries generated by Hibernate), because humans rarely write the over-parenthesized forms. (Bug#21904)

  • For MERGE tables defined on underlying tables that contained a short VARCHAR column (shorter than four characters), using ALTER TABLE on at least one but not all of the underlying tables caused the table definitions to be considered different from that of the MERGE table, even if the ALTER TABLE did not change the definition. (Bug#26881)

  • If a thread previously serviced a connection that was killed, excessive memory and CPU use by the thread occurred if it later serviced a connection that had to wait for a table lock. (Bug#25966)

  • CURDATE() is less than NOW(), either when comparing CURDATE() directly (CURDATE() < NOW() is true) or when casting CURDATE() to DATE (CAST(CURDATE() AS DATE) < NOW() is true). However, storing CURDATE() in a DATE column and comparing col_name < NOW() incorrectly yielded false. This is fixed by comparing a DATE column as DATETIME for comparisons to a DATETIME constant. (Bug#21103)

  • A view on a join is insertable for INSERT statements that store values into only one table of the join. However, inserts were being rejected if the inserted-into table was used in a self-join because MySQL incorrectly was considering the insert to modify multiple tables of the view. (Bug#25122)

  • Expressions involving SUM(), when used in an ORDER BY clause, could lead to out-of-order results. (Bug#25376)

  • LOAD DATA INFILE sent an okay to the client before writing the binary log and committing the changes to the table had finished, thus violating ACID requirements. (Bug#26050)

  • Views that used a scalar correlated subquery returned incorrect results. (Bug#26560)

  • IF(expr, unsigned_expr, unsigned_expr) was evaluated to a signed result, not unsigned. This has been corrected. The fix also affects constructs of the form IS [NOT] {TRUE|FALSE}, which were transformed internally into IF() expressions that evaluated to a signed result. (Bug#24532)

    For existing views that were defined using IS [NOT] {TRUE|FALSE} constructs, there is a related implication. The definitions of such views were stored using the IF() expression, not the original construct. This is manifest in that SHOW CREATE VIEW shows the transformed IF() expression, not the original one. Existing views will evaluate correctly after the fix, but if you want SHOW CREATE VIEW to display the original construct, you must drop the view and re-create it using its original definition. New views will retain the construct in their definition.

  • BENCHMARK() did not work correctly for expressions that produced a DECIMAL result. (Bug#26093)

  • For MEMORY tables, extending the length of a VARCHAR column with ALTER TABLE might result in an unusable table. (Bug#26080)

  • For some values of the position argument, the INSERT() function could insert a NUL byte into the result. (Bug#26281)

  • Creating a table with latin characters in the name caused the output of SHOW FULL TABLES to have ERROR for the table type. (Bug#25081)

  • Inserting utf8 data into a TEXT column that used a single-byte character set could result in spurious warnings about truncated data. (Bug#25815)

  • EXPLAIN EXTENDED did not show WHERE conditions that were optimized away. (Bug#22331)

  • INSERT DELAYED statements inserted incorrect values into BIT columns. (Bug#26238)

  • For expr IN(value_list), the result could be incorrect if BIGINT UNSIGNED values were used for expr or in the value list. (Bug#19342)

  • When a TIME_FORMAT() expression was used as a column in a GROUP BY clause, the expression result was truncated. (Bug#20293)

  • For SUBSTRING() evaluation using a temporary table, when SUBSTRING() was used on a LONGTEXT column, the max_length metadata value of the result was incorrectly calculated and set to 0. Consequently, an empty string was returned instead of the correct result. (Bug#15757)

  • Use of a GROUP BY clause that referred to a stored function result together with WITH ROLLUP caused incorrect results. (Bug#25373)

  • Use of a subquery containing GROUP BY and WITH ROLLUP caused a server crash. (Bug#26830)

  • Use of a subquery containing a UNION with an invalid ORDER BY clause caused a server crash. (Bug#26661)

  • In certain cases it could happen that deleting a row corrupted an RTREE index. This affected indexes on spatial columns. (Bug#25673)

  • SSL connections failed on Windows. (Bug#26678)

  • Added support for --debugger=dbx for mysql-test-run.pl and fixed support for --debugger=devenv, --debugger=DevEnv, and --debugger=/path/to/devenv. (Bug#26792)

  • X() IS NULL and Y() IS NULL comparisons failed when X() and Y() returned NULL. (Bug#26038)

  • UNHEX() IS NULL comparisons failed when UNHEX() returned NULL. (Bug#26537)

  • The REPEAT() function did not allow a column name as the count parameter. (Bug#25197)

  • On 64-bit Windows, large timestamp values could be handled incorrectly. (Bug#26536)

  • In some error messages, inconsistent format specifiers were used for the translations in different languages. comp_err (the error message compiler) now checks for mismatches. (Bug#26571)

  • On Windows, the server exhibited a file-handle leak after reaching the limit on the number of open file descriptors. (Bug#25222)

  • A reference to a non-existent column in the ORDER BY clause of an UPDATE ... ORDER BY statement could cause a server crash. (Bug#25126)

  • mysqlimport used a variable of the wrong type for the --use-threads option, which could cause a crash on some architectures. (Bug#23814)

  • A multiple-row delayed insert with an auto increment column could cause duplicate entries to be created on the slave in a replication environment. (Bug#25507, Bug#26116)

  • Using mysqlbinlog on a binary log would crash if there were a large number of row-based events related to a single statement. (Bug#25628)

  • Duplicating the usage of a user variable in a stored procedure or trigger would not be replicated correctly to the slave. (Bug#25167)

  • User defined variables used within stored procedures and triggers are not replicated correctly when operating in statement-based replication mode. (Bug#20141, Bug#14914)

  • Loading data using LOAD DATA INFILE may not replicate correctly (due to character set incompatibilities) if the character_set_database variable is set before the data is loaded. (Bug#15126)

  • DROP TRIGGER statements would not be filtered on the slave when using the replication-wild-do-table option. (Bug#24478)

  • SHOW ENGINE MUTEX STATUS failed to produce an Unknown table engine error. (Bug#24392)

    See Section聽13.5.4.12, 鈥SHOW ENGINE Syntax鈥.

  • MySQL would not compile when configured using --without-query-cache. (Bug#25075)

  • When using certain server SQL modes, the mysql.proc table was not created by mysql_install_db. In addition, the creation of this and other MySQL system tables was not checked for by mysql-test-run.pl. (Bug#23669, Bug#20166)

  • It was not possible to use XPath keywords as tag names for expressions used in the ExtractValue() function. (Bug#24747)

  • VIEW restrictions were applied to SELECT statements after a CREATE VIEW statement failed, as though the CREATE had succeeded. (Bug#25897)

  • An INSERT trigger invoking a stored routine that inserted into a table other than the one on which the trigger was defined would fail with a Table '...' doesn't exist referring to the second table when attempting to delete records from the first table. (Bug#21825)

  • A stored procedure that made use of cursors failed when the procedure was invoked from a stored function. (Bug#25345)

  • When nesting stored procedures within a trigger on a table, a false dependency error was thrown when one of the nested procedures contained a DROP TABLE statement. (Bug#22580)

  • When attempting to call a stored procedure creating a table from a trigger on a table tbl in a database db, the trigger failed with ERROR 1146 (42S02): Table 'db.tbl' doesn't exist. However, the actual reason that such a trigger fails is due to the fact that CREATE TABLE causes an implicit COMMIT, and so a trigger cannot invoke a stored routine containing this statement. A trigger which does so now fails with ERROR 1422 (HY000): Explicit or implicit commit is not allowed in stored function or trigger, which makes clear the reason for the trigger's failure. (Bug#18914)

  • Local variables in stored routines or triggers, when declared as the BIT type, were interpreted as strings. (Bug#12976)

  • When a stored routine attempted to execute a statement accessing a nonexistent table, the error was not caught by the routine's exception handler. (Bug#8407, Bug#20713)

  • NOW() returned the wrong value in statements executed at server startup with the --init-file option. (Bug#23240)

  • Instance Manager did not remove the angel PID file on a clean shutdown. (Bug#22511)

  • Setting the slow_query_log_file system variable caused log output to go tothe general log, not the slow query log. (Bug#23225)

  • The server could crash if two or more threads initiated query cache resize operation at moments very close in time. (Bug#23527)

  • The conditions checked by the optimizer to allow use of indexes in IN predicate calculations were unnecessarily tight and were relaxed. (Bug#20420)

  • Several deficiencies in resolution of column names for INSERT ... SELECT statements were corrected. (Bug#25831)

  • Indexes on TEXT columns were ignored when ref accesses were evaluated. (Bug#25971)

  • The update columns for INSERT ... SELECT ... ON DUPLICATE KEY UPDATE could be assigned incorrect values if a temporary table was used to evaluate the SELECT. (Bug#16630)

  • A user-defined variable could be assigned an incorrect value if a temporary table was employed in obtaining the result of the query used to determine its value. (Bug#24010)

  • Queries that used a temporary table for the outer query when evaluating a correlated subquery could return incorrect results. (Bug#23800)

  • For index reads, the BLACKHOLE engine did not return end-of-file (which it must because BLACKHOLE tables contain no rows), causing some queries to crash. (Bug#19717)

  • A query of type index_merge, and with a WHERE clause having the form WHERE indexed_column_1=value_1 OR indexed_column_2=value_2 on a partitioned table caused the server to crash. (Bug#26117)

C.1.3.聽Changes in release 5.1.16 (26 February 2007)

This is a new Beta development release, fixing recently discovered bugs.

NOTE: This Beta release, as any other pre-production release, should not be installed on production level systems or systems with critical data. It is good practice to back up your data before installing any new version of software. Although MySQL has worked very hard to ensure a high level of quality, protect your data by making a backup as you would for any software beta release. Please refer to our bug database at http://bugs.mysql.com/ for more details about the individual bugs fixed in this version.

Note

After release, a trigger failure problem was found to have been introduced. (Bug#27006) Users affected by this issue should upgrade to MySQL 5.1.17, which corrects the problem.

This section documents all changes and bug fixes that have been applied since the last official MySQL release. If you would like to receive more fine-grained and personalized update alerts about fixes that are relevant to the version and features you use, please consider subscribing to MySQL Enterprise (a commercial MySQL offering). For more details please see http://www.mysql.com/products/enterprise.

Functionality added or changed:

  • Incompatible change: TRUNCATE TABLE now requires the DROP privilege rather than the DELETE privilege. (Bug#23556).

  • NDB Cluster (Cluster APIs) / Incompatible change: The AbortOption type is now a member of the NdbOperation class; its values and behavior have also changed. NdbTransaction::AbortOption can no longer be used, and applications written against the NDB API may need to be rewritten and recompiled to accomodate these changes. For more information about this change, see The NdbOperation::AbortOption Type.

    This also affects the behavior of the NdbTransaction::execute() method, which now reports failure only if the transaction was actually aborted. See NdbTransaction::execute(), for more information.

  • NDB Cluster: A new configuration parameter MemReportFrequency allows for additional control of data node memory usage. Previously, only warnings at predetermined percentages of memory allocation were given; setting this parameter allows for that behavior to be overridden. For more information, see Section聽15.4.4.5, 鈥淒efining Data Nodes鈥.

  • NDB Cluster (Cluster APIs): A new ndb_mgm_get_clusterlog_loglevel() function was added to the MGM API.

    For more information, see ndb_mgm_get_clusterlog_loglevel().

  • NDB Cluster: Previously, when a data node failed more than 8 times in succession to start, this caused a forced shutdown of the cluster. Now, when a data node fails to start 7 consecutive times, the node will not start again until it is started with the --initial option, and a warning to this effect is written to the error log. (Bug#25984)

  • NDB Cluster: A number of new and more descriptive error messages covering transporter errors were added. (Bug#22025)

  • NDB Cluster: In the event that all cluster management and API nodes are configured with ArbitrationRank=0, ndb_mgmd now issues the following warning when starting: Cluster configuration warning: Neither MGM nor API nodes are configured with arbitrator, may cause complete cluster shutdown in case of host failure. (Bug#23546)

  • The localhost anonymous user account created during MySQL installation on Windows now has no global privileges. Formerly this account had all global privileges. For operations that require global privileges, the root account can be used instead. (Bug#24496)

  • In the INFORMATION_SCHEMA REFERENTIAL_CONSTRAINTS table, the UNIQUE_CONSTRAINT_NAME column incorrectly named the referenced table. Now it names the referenced constraint, and a new column, REFERENCED_TABLE_NAME, names the referenced table. (Bug#21713)

  • RAND() now allows non-constant initializers (such as a column name) as its argument. In this case, the seed is initialized with the value for each invocation of RAND(). (One implication of this is that for equal argument values, RAND() will return the same value each time.) (Bug#6172)

  • The bundled yaSSL library was upgraded to version 1.5.8.

  • CONNECTION is no longer treated as a reserved word. (Bug#12204)

Bugs fixed:

  • Security fix: Using an INFORMATION_SCHEMA table with ORDER BY in a subquery could cause a server crash. (CVE-2007-1420, Bug#24630, Bug#26556) We would like to thank Oren Isacson from Flowgate Security Consulting as well as well as Stefan Streichsbier from SEC Consult for informing us about this problem.

  • NDB Cluster: Condition pushdown did not work with prepared statements. (Bug#26225)

  • NDB Cluster (APIs): After defining a delete operation using (NdbOperation::deleteTuple()) on a nonexistent primary key of a table having a BLOB or TEXT column, invoking NdbTransaction::execute() caused the calling application to enter an endless loop rather than raising an error. (Bug#24028)

  • NDB Cluster: An inadvertent use of unaligned data caused ndb_restore to fail on some 64-bit platforms, including Sparc and Itanium-2. (Bug#26739)

  • NDB Cluster: The InvalidUndoBufferSize error used the same error code (763) as the IncompatibleVersions error. InvalidUndoBufferSize now uses its own error code (779). (Bug#26490)

  • NDB Cluster: Takeover for local checkpointing due to multiple failures of master nodes was sometimes incorrect handled. (Bug#26457)

  • NDB Cluster: The LockPagesInMemory parameter was not read until after distributed communication had already started between cluster nodes. When the value of this parameter was 1, this could sometimes result in data node failure due to missed heartbeats. (Bug#26454)

  • NDB Cluster: Under some circumstances, following the restart of a management, all cluster data nodes would connect to it normally, but some of them subsequently failed to log any events to the management node. (Bug#26293)

  • NDB Cluster: An error was produced when SHOW TABLE STATUS was used on an NDB table that had no AUTO_INCREMENT column. (Bug#21033)

    Note

    This improves on and supersedes an earlier fix that was made for this issue in MySQL 5.1.12.

  • NDB Cluster: When a node failed due to there being insufficient disk space to perform a local checkpoint, there was no indication that this was the source of the problem. Such a condition now produces an appropriate error message. (Bug#20121)

  • NDB Cluster (Cluster APIs): libndbclient.so was not versioned. (Bug#13522)

  • NDB Cluster: The ndb_size.tmpl file (necessary for using the ndb_size.pl script) was missing from binary distributions. (Bug#24191)

  • NDB Cluster (Cluster APIs / Disk Data): A delete and a read peformed in the same operation could cause one or more of the cluster's data nodes to crash. This could occur when the operation affected more than 5 columns concurrently, or when one or more of the columns was of the VARCHAR type and was stored on disk. (Bug#25794)

  • NDB Cluster (Replication): The error message Last_Errno: 4294967295, Error in Write_rows event now supplies a valid error code. (Bug#19896)

  • NDB Cluster (Replication): Under some circumstances, the binlog thread could shut down while the slave SQL thread was still using it. (Bug#26015, Bug#26019)

  • NDB Cluster: A query with an IN clause against an NDB table employing explicit user-defined partitioning did not always return all matching rows. (Bug#25821)

  • A memory leak could cause problems during a node or cluster shutdown or failure. (Bug#25997)

  • NDB Cluster: An appropriate error message was not provided when there was insufficient REDO log file space for the cluster to start. (Bug#25801)

  • NDB Cluster: An UPDATE using an IN clause on an NDB table on which there was a trigger caused mysqld to crash. (Bug#25522)

  • NDB Cluster: A memory allocation failure in the cluster Subscription Manager could cause the cluster to crash. (Bug#25239)

  • NDB Cluster: In the event that cluster backup parameters such as BackupWriteSize were incorrectly set, no appropriate error was issued to indicate that this was the case. (Bug#19146)

  • OPTIMIZE TABLE caused a race condition in the I/O cache. (Bug#19978)

  • If the duplicate key value was present in the table, INSERT ... ON DUPLICATE KEY UPDATE reported a row count indicating that a record was updated, even when no record actually changed due to the old and new values being the same. Now it reports a row count of zero. (Bug#19978)

  • Some UPDATE statements were slower than in previous versions when the search key could not be converted to a valid value for the type of the search column. (Bug#24035)

  • The WITH CHECK OPTION clause for views was ignored for updates of multiple-table views when the updates could not be performed on fly and the rows to update had to be put into temporary tables first. (Bug#25931)

  • Using ORDER BY or GROUP BY could yield different results when selecting from a view and selecting from the underlying table. (Bug#26209)

  • Storing values specified as hexadecimal values 64 or more bits long into BIT(64), BIGINT, or BIGINT UNSIGNED columns did not raise any warning or error if the value was out of range. (Bug#22533)

  • Inserting DEFAULT into a column with no default value could result in garbage in the column. Now the same result occurs as when inserting NULL into a NOT NULL column. (Bug#20691)

  • The presence of ORDER BY in a view definition prevented the MERGE algorithm from being used to resolve the view even if nothing else in the definition required the TEMPTABLE algorithm. (Bug#12122)

  • ISNULL(DATE(NULL)) and ISNULL(CAST(NULL AS DATE)) erroneously returned false. (Bug#23938)

  • If a slave server closed its relay log (for example, due to an error during log rotation), the I/O thread did not recognize this and still tried to write to the log, causing a server crash. (Bug#10798)

  • Collation for LEFT JOIN comparisons could be evaluated incorrectly, leading to improper query results. (Bug#26017)

  • For the IF() and COALESCE() function and CASE expressions, large unsigned integer values could be mishandled and result in warnings. (Bug#22026)

  • The number of setsockopt() calls performed for reads and writes to the network socket was reduced to decrease system call overhead. (Bug#22943)

  • A WHERE clause that used BETWEEN for DATETIME values could be treated differently for a SELECT and a view defined as that SELECT. (Bug#26124)

  • ORDER BY on DOUBLE values could change the set of rows returned by a query. (Bug#19690)

  • LOAD DATA INFILE did not work with pipes. (Bug#25807)

  • DISTINCT queries that were executed using a loose scan for an InnoDB table that had been emptied caused a server crash. (Bug#26159)

  • ALTER TABLE caused loss of CASCADE clauses for InnoDB tables. (Bug#24741)

  • Type conversion errors during formation of index search conditions were not correctly checked, leading to incorrect query results. (Bug#22344)

  • Within a stored routine, accessing a declared routine variable with PROCEDURE ANALYSE() caused a server crash. (Bug#23782)

  • Use of already freed memory caused SSL connections to hang forever. (Bug#19209)

  • mysql.server stop timed out too quickly (35 seconds) waiting for the server to exit. Now it waits up to 15 minutes, to ensure that the server exits. (Bug#25341)

  • A yaSSL program named test was installed, causing conflicts with the test system utility. It is no longer installed. (Bug#25417)

  • perror crashed on some platforms due to failure to handle a NULL pointer. (Bug#25344)

  • mysql_kill() caused a server crash when used on an SSL connection. (Bug#25203)

  • The readline library wrote to uninitialized memory, causing mysql to crash. (Bug#19474)

  • yaSSL was sensitive to the presence of whitespace at the ends of lines in PEM-encoded certificates, causing a server crash. (Bug#25189)

  • The SEC_TO_TIME() and QUARTER() functions sometimes did not handle NULL values correctly. (Bug#25643)

  • The optimizer used a filesort rather than a const table read in some cases when the latter was possible. (Bug#16590)

  • With ONLY_FULL_GROUP_BY enables, the server was too strict: Some expressions involving only aggregate values were rejected as non-aggregate (for example, MAX(a) - MIN(a)). (Bug#23417)

  • Indexes disabled with ALTER TABLE ... DISABLE KEYS could in some cases be used by specifying FORCE INDEX. (Bug#20604)

  • The arguments of the ENCODE() and the DECODE() functions were not printed correctly, causing problems in the output of EXPLAIN EXTENDED and in view definitions. (Bug#23409)

  • An error in the name resolution of nested JOIN ... USING constructs was corrected. (Bug#25575)

  • A return value of -1 from user-defined handlers was not handled well and could result in conflicts with server code. (Bug#24987)

  • The server might fail to use an appropriate index for DELETE when ORDER BY, LIMIT, and a non-restricting WHERE are present. (Bug#17711)

  • Use of ON DUPLICATE KEY UPDATE defeated the usual restriction against inserting into a join-based view unless only one of the underlying tables is used. (Bug#25123)

  • View definitions that used the ! operator were treated as containing the NOT operator, which has a different precedence and can produce different results. (Bug#25580).

  • Some queries against INFORMATION_SCHEMA that used subqueries failed. (Bug#23299).

  • For a UNIQUE index containing many NULL values, the optimizer would prefer the index for col IS NULL conditions over other more selective indexes. (Bug#25407).

  • GROUP BY and DISTINCT did not group NULL values for columns that have a UNIQUE index. (Bug#25551).

  • ALTER TABLE ... ENABLE KEYS acquired a global lock, preventing concurrent execution of other statements that use tables. (Bug#25044).

  • For an InnoDB table with any ON DELETE trigger, TRUNCATE TABLE mapped to DELETE and activated triggers. Now a fast truncation occurs and triggers are not activated. (Bug#23556).

  • For ALTER TABLE, using ORDER BY expression could cause a server crash. Now the ORDER BY clause allows only column names to be specified as sort criteria (which was the only documented syntax, anyway). (Bug#24562)

  • readline detection did not work correctly on NetBSD. (Bug#23293)

  • The --with-readline option for configure does not work for commercial source packages, but no error message was printed to that effect. Now a message is printed. (Bug#25530)

  • If an ORDER BY or GROUP BY list included a constant expression being optimized away and, at the same time, containing single-row subselects that return more that one row, no error was reported. If a query requires sorting by expressions containing single-row subselects that return more than one row, execution of the query may cause a server crash. (Bug#24653)

  • To enable installation of MySQL RPMs on Linux systems running RHEL 4 (which includes SE-Linux) additional information was provided to specify some actions that are allowed to the MySQL binaries. (Bug#12676)

  • Queries that evaluate NULL IN (SELECT ... UNION SELECT ...) could produce an incorrect result (FALSE instead of NULL). (Bug#24085)

  • Within stored routines or prepared statements, inconsistent results occurred with multiple use of INSERT ... SELECT ... ON DUPLICATE KEY UPDATE when the ON DUPLICATE KEY UPDATE clause erroneously tried to assign a value to a column mentioned only in its SELECT part. (Bug#24491)

  • Expressions of the form (a, b) IN (SELECT a, MIN(b) FROM t GROUP BY a) could produce incorrect results when column a of table t contained NULL values while column b did not. (Bug#24420)

  • Expressions of the form (a, b) IN (SELECT c, d ...) could produce incorrect results if a, b, or both were NULL. (Bug#24127)

  • An AFTER UPDATE trigger on an InnoDB table with a composite primary key caused the server to crash. (Bug#25398)

  • A query that contained an EXIST subquery with a UNION over correlated and uncorrelated SELECT queries could cause the server to crash. (Bug#25219)

  • A query with ORDER BY and GROUP BY clauses where the ORDER BY clause had more elements than the GROUP BY clause caused a memory overrun leading to a crash of the server. (Bug#25172)

  • Certain joins using Range checked for each record in the query execution plan could cause the server to crash. (Bug#24776)

  • If a prepared statement accessed a view, access to the tables listed in the query after that view was checked in the security context of the view. (Bug#24404)

  • A nested query on a partitioned table returned fewer records than on the corresponding non-partitioned table, when the subquery affected more than one partition. (Bug#24186)

  • Passing a NULL value to a user-defined function from within a stored procedure crashes the server. (Bug#25382)

C.1.4.聽Changes in release 5.1.15 (25 January 2007)

This is a new Beta development release, fixing recently discovered bugs.

NOTE: This Beta release, as any other pre-production release, should not be installed on production level systems or systems with critical data. It is good practice to back up your data before installing any new version of software. Although MySQL has worked very hard to ensure a high level of quality, protect your data by making a backup as you would for any software beta release. Please refer to our bug database at http://bugs.mysql.com/ for more details about the individual bugs fixed in this version.

This section documents all changes and bug fixes that have been applied since the last official MySQL release. If you would like to receive more fine-grained and personalized update alerts about fixes that are relevant to the version and features you use, please consider subscribing to MySQL Enterprise (a commercial MySQL offering). For more details please see http://www.mysql.com/products/enterprise.

Functionality added or changed:

  • Incompatible change: The following conditions apply to enabling the read_only system variable:

    • If you attempt to enable read_only while you have any explicit locks (acquired with LOCK TABLES or have a pending transaction, an error will occur.

    • If other clients hold explicit table locks or have pending transactions, the attempt to enable read_only blocks until the locks are released and the transactions end. While the attempt to enable read_only is pending, requests by other clients for table locks or to begin transactions also block until read_only has been set.

    • read_only can be enabled while you hold a global read lock (acquired with FLUSH TABLES WITH READ LOCK) because that does not involve table locks.

    Previously, the attempt to enable read_only would return immediately even if explicit locks or transactions were pending, so some data changes could occur for statements executing in the server at the same time. (Bug#11733, Bug#22009)

  • Incompatible change: Previously, the DATE_FORMAT() function returned a binary string. Now it returns a string with a character set and collation given by character_set_connection and collation_connection so that it can return month and weekday names containing non-ASCII characters. (Bug#22646)

  • Important: When using MERGE tables the definition of the MERGE table and the MyISAM tables are checked each time the tables are opened for access (including any SELECT or INSERT statement. Each table is compared for column order, types, sizes and associated. If there is a difference in any one of the tables then the statement will fail.

  • On Unix, when searching the standard locations for option files, MySQL programs now also look for /etc/mysql/my.cnf after checking for /etc/my.cnf and before checking the remaining locations. (Bug#25104)

  • Remote servers for use with the FEDERATED storage engine now can be managed with the new CREATE/ALTER/DROP SERVER syntax.

  • The --skip-thread-priority option now is enabled by default for binary Mac OS X distributions. Use of thread priorities degrades performance on Mac OS X. (Bug#18526)

  • Added the --disable-grant-options option to configure. If configure is run with this option, the --bootstrap, --skip-grant-tables, and --init-file options for mysqld are disabled and cannot be used. For Windows, the configure.js script recognizes the DISABLE_GRANT_OPTIONS flag, which has the same effect.

  • Partitioning of tables using the FEDERATED storage engine is no longer permitted. Attempting to create such a table or to modify an existing table so that is uses both partitioning and FEDERATED now fails with an error. (Bug#22451)

  • In MySQL 5.1, InnoDB rolls back only the last statement on a transaction timeout. A new option, --innodb_rollback_on_timeout, causes InnoDB to abort and roll back the entire transaction if a transaction timeout occurs (the same behavior as in MySQL 4.1). (Bug#24200)

  • The Com_create_user status variable was added (for counting CREATE USER statements). (Bug#22958)

  • The --memlock option relies on system calls that are unreliable on some operating systems. If a crash occurs, the server now checks whether --memlock was specified and if so issues some information about possible workarounds. (Bug#22860)

  • The default value of the max_connections variable has been increased to 151 in order that Websites running on Apache and using MySQL will not have more processes trying to access MySQL than the default number of connections available.

    (The maximum number of Apache processes is determined by the Apache MaxClient, which defaults to 256, but is usually set to 150 in the httpd.conf commonly distributed with Apache. For more information about MaxClient, see http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxclients.)

    (Bug#23883)

  • The bundled yaSSL library was upgraded to version 1.5.0.

  • Calling a non-deterministic stored routine when using statement-based replication now throws an error. Formerly, defining such a stored routine would cause an error to be thrown. (Bug#16456)

  • The (undocumented) UNIQUE_USERS() and GROUP_UNIQUE_USERS() functions were removed. (Bug#22687)

  • NDB Cluster: The LockPagesInMainMemory configuration parameter has changed its type and possible values. For more information, see LockPagesInMainMemory. (Bug#25686)

    Important: The values true and false are no longer accepted for this parameter. If you were using this parameter and had it set to false in a previous release, you must change it to 0. If you had this parameter set to true, you should instead use 1 to obtain the same behavior as previously, or 2 to take advantage of new functionality introduced with this release described in the section cited above.

Bugs fixed:

  • Incompatible change: For ENUM columns that had enumeration values containing commas, the commas were mapped to 0xff internally. However, this rendered the commas indistinguishable from true 0xff characters in the values. This no longer occurs. However, the fix requires that you dump and reload any tables that have ENUM columns containing true 0xff in their values: Dump the tables using mysqldump with the current server before upgrading from a version of MySQL 5.1 older than 5.1.15 to version 5.1.15 or newer. (Bug#24660)

  • mysqld_multi and mysqlaccess looked for option files in /etc even if the --sysconfdir option for configure had been given to specify a different directory. (Bug#24780)

  • SHOW COLUMNS reported some NOT NULL columns as NULL. (Bug#22377)

  • Attempts to access a MyISAM table with a corrupt column definition caused a server crash. (Bug#24401)

  • mysqltest_embedded crashed at startup. (Bug#25890)

  • Accessing a fixed record format table with a crashed key definition results in server/myisamchk segmentation fault. (Bug#24855)

  • When opening a corrupted .frm file during a query, the server crashes. (Bug#24358)

  • If there was insufficient memory to store or update a blob record in a MyISAM table then the table will marked as crashed. (Bug#23196)

  • When updating a table that used a JOIN of the table itself (for example, when building trees) and the table was modified on one side of the expression, the table would either be reported as crashed or the wrong rows in the table would be updated. (Bug#21310)

  • When SET PASSWORD was written to the binary log double quotes were included in the statement. If the slave was running in with the sql_mode set to ANSI_QUOTES the event would fail and halt the replication process. (Bug#24158)

  • Using CREATE TABLE ... SELECT and rolling back the transaction would leave an empty table on the master, but the instructions would not be recorded in the binary log and therefore replicated to the slave. This would result in a difference between the master and slave databases. An implicit commit has been added to ensure consistency. (Bug#22865)

  • When reading from the standard input on Windows, mysqlbinlog opened the input in text mode rather than binary mode and consequently misinterpreted some characters such as Control-Z. (Bug#23735)

  • No warning was issued for use of the DATA DIRECTORY or INDEX DIRECTORY table options on a platform that does not support them. (Bug#17498)

  • When a prepared statement failed during the prepare operation, the error code was not cleared when it was reused, even if the subsequent use was successful. (Bug#15518)

  • mysql_upgrade failed when called with a basedir pathname containing spaces. (Bug#22801)

  • Hebrew-to-Unicode conversion failed for some characters. Definitions for the following Hebrew characters (as specified by the ISO/IEC 8859-8:1999) were added: LEFT-TO-RIGHT MARK (LRM), RIGHT-TO-LEFT MARK (RLM) (Bug#24037)

  • If there was insufficient memory available to mysqld, this could sometimes cause the server to hang during startup. (Bug#24751)

  • Using row-based replication to replicate to a table having at least one extra BIT column with a default value on the slave as compared to the master could cause the slave to fail. (Bug#24490)

  • Optimizations that are legal only for subqueries without tables and WHERE conditions were applied for any subquery without tables. (Bug#24670)

  • A query using WHERE unsigned_column NOT IN ('negative_value') could cause the server to crash. (Bug#24261)

  • A FETCH statement using a cursor on a table which was not in the table cache could sometimes cause the server to crash. (Bug#24117)

  • CREATE TABLE ... SELECT statements were not rolled back correctly. As part of the fix, such a statement now causes an implicit commit before and after it is executed. However, it does not cause a commit when used to create a temporary table. (Bug#22864)

  • SSL connections could hang at connection shutdown. (Bug#24148, Bug#21781)

  • The STDDEV() function returned a positive value for data sets consisting of a single value. (Bug#22555)

  • mysqltest incorrectly tried to retrieve result sets for some queries where no result set was available. (Bug#19410)

  • mysqltest crashed with a stack overflow. (Bug#24498)

  • The server was built even when configure was run with the --without-server option. (Bug#23973)

  • mysqld_error.h was not installed when only the client libraries were built. (Bug#21265)

  • mysql_install_db did not create the mysql.plugin table if strict SQL mode was enabled. (Bug#24270)

  • The row count for MyISAM tables was not updated properly, causing SHOW TABLE STATUS to report incorrect values. (Bug#23526)

  • Using a view in combination with a USING clause caused column aliases to be ignored. (Bug#25106)

  • Using ALTER TABLE to convert a CSV table containing NULL values to MyISAM resulted in warnings. (Bug#21328)

  • A view was not handled correctly if the SELECT part contained 鈥\Z鈥. (Bug#24293)

  • Inserting a row into a table without specifying a value for a BINARY(N) NOT NULL column caused the column to be set to spaces, not zeroes. (Bug#14171)

  • An assertion failed incorrectly for prepared statements that contained a single-row non-correlated subquery that was used as an argument of the IS NULL predicate. (Bug#25027)

  • A table created with the ROW_FORMAT = FIXED table option loses the option if an index is added or dropped with CREATE INDEX or DROP INDEX. (Bug#23404)

  • Dropping a user-defined function sometimes did not remove the UDF entry from the mysql.proc table. (Bug#15439)

  • The BUILD/check-cpu script did not recognize Celeron processors. (Bug#20061)

  • Some problems uncovered by Valgrind were fixed. (Bug#25396)

  • mysql_fix_privilege_tables did not handle a password containing embedded space or apostrophe characters. (Bug#17700)

  • On Windows, the SLEEP() function could sleep too long, especially after a change to the system clock. (Bug#14094, Bug#17635, Bug#24686)

  • In the INFORMATION_SCHEMA.KEY_COLUMN_USAGE table, the value displayed for the REFERENCED_TABLE_NAME column was the table name as encoded for disk storage, not the actual table name. (Bug#25026)

  • Changing the value of MI_KEY_BLOCK_LENGTH in myisam.h and recompiling MySQL resulted in a myisamchk that saw existing MyISAM tables as corrupt. (Bug#22119)

  • A stored routine containing semicolon in its body could not be reloaded from a dump of a binary log. (Bug#20396)

  • For SET, SELECT, and DO statements that invoked a stored function from a database other than the default database, the function invocation could fail to be replicated. (Bug#19725)

  • SET lc_time_names = value allowed only exact literal values, not expression values. (Bug#22647)

  • Changes to the lc_time_names system variable were not replicated. (Bug#22645)

  • SELECT ... FOR UPDATE, SELECT ... LOCK IN SHARE MODE, DELETE, and UPDATE statements executed using a full table scan were not releasing locks on rows that did not satisfy the WHERE condition. (Bug#20390)

  • A stored procedure, executed from a connection using a binary character set, and which wrote multibyte data, would write incorrectly escaped entries to the binary log. This caused syntax errors, and caused replication to fail. (Bug#23619, Bug#24492)

  • mysqldump --order-by-primary failed if the primary key name was an identifier that required quoting. (Bug#13926)

  • Re-execution of CREATE DATABASE, CREATE TABLE, and ALTER TABLE statements in stored routines or as prepared statements caused incorrect results. (Bug#22060)

  • The internal functions for table preparation, creation, and alteration were not re-execution friendly, causing problems in code that: repeatedly altered a table; repeatedly created and dropped a table; opened and closed a cursor on a table, altered the table, and then reopened the cursor. (Bug#4968, Bug#6895, Bug#19182, Bug#19733)

  • A workaround was implemented to avoid a race condition in the NPTL pthread_exit() implementation. (Bug#24507)

  • The Instance Manager DROP INSTANCE command did not work. (Bug#23476)

  • The Instance Manager STOP INSTANCE command took too much time and caused Instance Manager to be unresponsive. (Bug#23215)

  • The Instance Manager STOP INSTANCE command could not be applied to instances in the Crashed, Failed, or Abandoned state. (Bug#22306)

  • Instance Manager could crash during shutdown. (Bug#19044)

  • A deadlock could occur, with the server hanging on Closing tables, with a sufficient number of concurrent INSERT DELAYED, FLUSH TABLES, and ALTER TABLE operations. (Bug#23312)

  • A user-defined variable could be assigned an incorrect value if a temporary table was employed in obtaining the result of the query used to determine its value. (Bug#16861)

  • The optimizer removes expressions from GROUP BY and DISTINCT clauses if they happen to participate in expression = constant predicates of the WHERE clause, the idea being that, if the expression is equal to a constant, then it cannot take on multiple values. However, for predicates where the expression and the constant item are of different result types (for example, when a string column is compared to 0), this is not valid, and can lead to invalid results in such cases. The optimizer now performs an additional check of the result types of the expression and the constant; if their types differ, then the expression is not removed from the GROUP BY list. (Bug#15881)

  • Referencing an ambiguous column alias in an expression in the ORDER BY clause of a query caused the server to crash. (Bug#25427)

  • Some CASE statements inside stored routines could lead to excessive resource usage or a crash of the server. (Bug#24854, Bug#19194)

  • Some joins in which one of the joined tables was a view could return erroneous results or crash the server. (Bug#24345)

  • OPTIMIZE TABLE tried to sort R-tree indexes such as spatial indexes, although this is not possible (see Section聽13.5.2.5, 鈥OPTIMIZE TABLE Syntax鈥). (Bug#23578)

  • User-defined variables could consume excess memory, leading to a crash caused by the exhaustion of resources available to the MEMORY storage engine, due to the fact that this engine is used by MySQL for variable storage and intermediate results of GROUP BY queries. Where SET had been used, such a condition could instead give rise to the misleading error message You may only use constant expressions with SET, rather than Out of memory (Needed NNNNNN bytes). (Bug#23443)

  • InnoDB: During a restart of the MySQL Server that followed the creation of a temporary table using the InnoDB storage engine, MySQL failed to clean up in such a way that InnoDB still attempted to find the files associated with such tables. (Bug#20867)

  • Under some circumstances, a REORGANIZE PARTITION statement could crash mysqld. (Bug#24502)

  • A multiple-table DELETE QUICK could sometimes cause one of the affected tables to become corrupted. (Bug#25048)

  • A compressed MyISAM table that became corrupted could crash myisamchk and possibly the MySQL Server. (Bug#23139)

  • Using INSTALL PLUGIN followed by a restart of the server caused an error due to memory not being properly initialized. (Bug#22694)

  • A crash of the MySQL Server could occur when unpacking a BLOB column from a row in a corrupted MyISAM table. This could happen when trying to repair a table using either REPAIR TABLE or myisamchk; it could also happen when trying to access such a 鈥broken鈥 row using statements like SELECT if the table was not marked as crashed. (Bug#22053)

  • The FEDERATED storage engine did not support the euckr character set. (Bug#21556)

  • The FEDERATED storage engine did not support the utf8 character set. (Bug#17044)

  • mysql_upgrade failed if the --password (or -p) option was given. (Bug#24896)

  • For a nonexistent table, DROP TEMPORARY TABLE failed with an incorrect error message if read_only was enabled. (Bug#22077)

  • The code for generating USE statements for binary logging of CREATE PROCEDURE statements resulted in confusing output from mysqlbinlog for DROP PROCEDURE statements. (Bug#22043)

  • The REPEAT() function could return NULL when passed a column for the count argument. (Bug#24947)

  • Accuracy was improved for comparisons between DECIMAL columns and numbers represented as strings. (Bug#23260)

  • InnoDB crashed while performing XA recovery of prepared transactions. (Bug#21468)

  • ROW_COUNT() did not work properly as an argument to a stored procedure. (Bug#23760)

  • It was possible to use DATETIME values whose year, month, and day parts were all zeroes but whose hour, minute, and second parts contained nonzero values, an example of such an illegal DATETIME being '0000-00-00 11:23:45'. (Bug#21789)

    This patch was reverted in MySQL 5.1.18.

  • It was possible to set the backslash character (鈥 \ 鈥) as the delimiter character using DELIMITER, but not actually possible to use it as the delimiter. (Bug#21412)

  • ALTER ENABLE KEYS or ALTER TABLE DISABLE KEYS combined with another ALTER TABLE option other than RENAME TO did nothing. In addition, if ALTER TABLE was used on a table having disabled keys, the keys of the resulting table were enabled. (Bug#24395)

  • An ALTER TABLE statement that used a RENAME clause in combination with a MODIFY or CHANGE that did not actually change the table (for example, when it changed a column's type from INT to INT). The behavior caused by this bug differed according to whether or not the storage engine used by the table was transactional or non-transactional. For transactional tables (such as those using the InnoDB storage engine), the statement simply failed; for non-transactional tables (such as those using the MyISAM storage engine), the ALTER TABLE statement succeeding renaming the table, but subsequent SELECT statements against the renamed table would fail. (Bug#22369)

  • Queries of the form SELECT ... WHERE string = ANY(...) failed when the server used a single-byte character set and the client used a multi-byte character set. (Bug#20835)

  • A partitioned table that used the DATA DIRECTORY option, where the data directory was the same as the directory in which the table definition file resided, became corrupted following ALTER TABLE ENGINE=ARCHIVE. This was actually due to an issue with the ARCHIVE storage engine, and not with partitioned tables in general. (Bug#22634)

  • NDB Cluster (Cluster APIs): Deletion of an Ndb_cluster_connection object took a very long time. (Bug#25487)

  • NDB Cluster (Replication): Certain errors in replication setups could lead to subsequent node failures. (Bug#25755)

  • NDB Cluster (Replication): Connecting a mysqld to a cluster where not all nodes were running, starting the remaining cluster nodes, and then disconnecting from the cluster caused the mysqld process to crash. (Bug#25387)

  • NDB Cluster (Replication): Connecting an API node to the cluster during a node restart while performing database operations could cause the restarting node to fail. (Bug#25329)

  • NDB Cluster (Disk Data): Following 3 or more missed local checkpoints by a cluster node, a restart of the node caused incorrect undo information to be used for Disk Data tables. (Bug#25636)

  • NDB Cluster: It was not possible to create an NDB table with a key on two VARCHAR columns where both columns had a storage length in excess of 256. (Bug#25746)

  • NDB Cluster: Hosts in clusters with a large number of nodes could experience excessive CPU usage while obtaining configuration data. (Bug#25711)

  • NDB Cluster: In some circumstances, shutting down the cluster could cause connected mysqld processes to crash. (Bug#25668)

  • NDB Cluster: Non-32-bit, non-aligned columns were not handled correctly in explicitly partitioned NDB tables. (Bug#25587)

  • NDB Cluster: Some aggregate queries such as SELECT COUNT(*) performed a table scan on NDB tables rather than checking table statistics, causing such queries to perform much more slowly in MySQL Cluster 5.1 than in 5.0. (Bug#25567)

  • NDB Cluster: Memory allocations for TEXT columns were calculated incorrectly, resulting in space being wasted and other issues. (Bug#25562)

  • NDB Cluster: The failure of a master node during a node restart could lead to a resource leak, causing later node failures. (Bug#25554)

  • NDB Cluster: The failure of a node during a local checkpoint could lead to other node failures. (Bug#25468)

  • NDB Cluster: A node shutdown occurred if the master failed during a commit. (Bug#25364)

  • NDB Cluster: Creating a non-unique index with the USING HASH clause silently created an ordered index instead of issuing a warning. (Bug#24820)

  • NDB Cluster: The management server did not handle logging of node shutdown events correctly in certain cases. (Bug#22013)

  • NDB Cluster: A potential memory leak in the NDB storage engine's handling of file operations was uncovered. (Bug#21858)

  • NDB Cluster: When stopping and restarting multiple data nodes, the last node to be restarted would sometimes hang in Phase 100. (Bug#19645)

  • NDB Cluster (NDB API): Invoking the NdbTransaction::execute() method using execution type Commit and abort option AO_IgnoreError could lead to a crash of the transaction coordinator (DBTC). (Bug#25090)

  • NDB Cluster (NDB API): A unique index lookup on a non-existent tuple could lead to a data node timeout (error 4012). (Bug#25059)

  • NDB Cluster (NDB API): Due to an error in the computation of table fragment arrays, some transactions might not be executed from the correct starting point. (Bug#24914)

  • NDB Cluster (Replication): Following a restart of the master cluster, the latest GCI was set to 0 upon reconnection to the slave. (Bug#21806)

  • NDB Cluster (Disk Data): A MEDIUMTEXT column of a Disk Data table was stored in memory rather than on disk, even if the column was not indexed. (Bug#25001)

  • NDB Cluster (Disk Data): Performing a node restart with a newly dropped Disk Data table could lead to failure of the node during the restart. (Bug#24917)

  • NDB Cluster (Disk Data): When restoring from backup a cluster containing any Disk Data tables with hidden primary keys, a node failure resulted which could lead to a crash of the cluster. (Bug#24166)

  • NDB Cluster (Disk Data): Repeated CREATE, DROP, or TRUNCATE in various combinations with system restarts between these operations could lead to the eventual failure of a system restart. (Bug#21948)

  • NDB Cluster (Disk Data): Extents that should have been available for re-use following a DROP TABLE operation were not actually made available again until after the cluster performed a local checkpoint. (Bug#17605)

  • NDB Cluster: Under certain rare circumstances, local checkpoints were not performed properly, leading to an inability to restart one or more data nodes. (Bug#24664)

  • NDB Cluster (NDB API): When using the NdbTransaction::execute() method, a very long timeout (greater than 5 minutes) could result if the last data node being polled was disconnected from the cluster. (Bug#24949)

  • NDB Cluster: When a data node was shut down using the management client STOP command, a connection event (NDB_LE_Connected) was logged instead of a disconnection event (NDB_LE_Disconnected). (Bug#22773)

  • NDB Cluster: SELECT statements with a BLOB or TEXT column in the selected column list and a WHERE condition including a primary key lookup on a VARCHAR primary key produced empty result sets. (Bug#19956)

  • NDB Cluster: ndb_config failed when trying to use 2 management servers and node IDs. (Bug#23887)

  • STR_TO_DATE() returned NULL if the format string contained a space following a non-format character. (Bug#22029)

  • yaSSL crashed on pre-Pentium Intel CPUs. (Bug#21765)

  • Selecting into variables sometimes returned incorrect wrong results. (Bug#20836)

  • mysql_fix_privilege_tables.sql altered the table_privs.table_priv column to contain too few privileges, causing loss of the CREATE VIEW and SHOW VIEW privileges. (Bug#20589)

  • A server crash occurred when using LOAD DATA to load a table containing a NOT NULL spatial column, when the statement did not load the spatial column. Now a NULL supplied to NOT NULL column error occurs. (Bug#22372)

  • Unsigned BIGINT values treated as signed values by the MOD() function. (Bug#19955)

  • Compiling PHP 5.1 with the MySQL static libraries failed on some versions of Linux. (Bug#19817)

  • The DELIMITER statement did not work correctly when used in an SQL file run using the SOURCE statement. (Bug#19799)

  • VARBINARY column values inserted on a MySQL 4.1 server had trailing zeroes following upgrade to MySQL 5.0 or later. (Bug#19371)

  • Subqueries of the form NULL IN (SELECT ...) returned invalid results. (Bug#8804, Bug#23485)

  • The --extern option for mysql-test-run.pl did not function correctly. (Bug#24354)

  • ALTER TABLE statements that performed both RENAME TO and {ENABLE|DISABLE} KEYS operations caused a server crash. (Bug#24089)

  • The MySQL 5.1.12 binaries for Windows were missing the FEDERATED, EXAMPLE, and BLACKHOLE storage engines. (Bug#23900)

  • myisampack wrote to unallocated memory, causing a crash. (Bug#17951)

  • Some small double precision numbers (such as 1.00000001e-300) that should have been accepted were truncated to zero. (Bug#22129)

  • The mysql.server script used the source command, which is less portable than the . command; it now uses . instead. (Bug#24294)

  • DATE_ADD() requires complete dates with no 鈥zero鈥 parts, but sometimes did not return NULL when given such a date. (Bug#22229)

  • Using FLUSH TABLES in one connection while another connection is using HANDLER statements caused a server crash. (Bug#21587)

  • FLUSH LOGS or mysqladmin flush-logs caused a server crash if the binary log was not open. (Bug#17733)

  • On HP-UX, mysqltest (non-thread-safe) crashed due to being linked against a thread-safe libmysys library. (Bug#23984)

C.1.5.聽Changes in release 5.1.14 (05 December 2006)

This is a new Beta development release, fixing recently discovered bugs.

NOTE: This Beta release, as any other pre-production release, should not be installed on production level systems or systems with critical data. It is good practice to back up your data before installing any new version of software. Although MySQL has worked very hard to ensure a high level of quality, protect your data by making a backup as you would for any software beta release. Please refer to our bug database at http://bugs.mysql.com/ for more details about the individual bugs fixed in this version.

This section documents all changes and bug fixes that have been applied since the last official MySQL release. If you would like to receive more fine-grained and personalized update alerts about fixes that are relevant to the version and features you use, please consider subscribing to MySQL Enterprise (a commercial MySQL offering). For more details please see http://www.mysql.com/products/enterprise.

Functionality added or changed:

  • Incompatible change: Previously, you could create a user-defined function (UDF) or stored function with the same name as a built-in function, but could not invoke the UDF. Now an error occurs if you try to create such a UDF. The server also now generates a warning if you create a stored function with the same name as a built-in function. It is not considered an error to create a stored function with the same name as a built-in function because you can invoke the function using db_name.func_name() syntax. However, the server now generates a warning in this case. (Bug#22619, Bug#18239)

    See Section聽9.2.4, 鈥淔unction Name Parsing and Resolution鈥, for the rules describing how the server interprets references to different kinds of functions.

  • Incompatible change: The prepared_stmt_count system variable has been converted to the Prepared_stmt_count global status variable (viewable with the SHOW GLOBAL STATUS statement). (Bug#23159)

  • NDB Cluster: Two major changes have taken place with regard to the MySQL Cluster system tables. These are:

    1. Incompatible change: The cluster database is no longer used. The tables formerly found in the cluster database are now in the mysql database, and have been renamed as ndb_binlog_index, ndb_apply_status, and ndb_schema.

    2. The mysql.ndb_apply_status and mysql.ndb_schema tables (formerly cluster.apply_status and cluster.schema are now created by ndb_restore, in the event that they do not already exist on the slave cluster. (Bug#14612)

    Note: When upgrading from versions of MySQL previous to 5.1.14 to 5.1.14 or later, mysql_fix_privilege_tables merely creates a new mysql.ndb_binlog_index table, but does not remove the existing cluster database (or, if upgrading from MySQL 5.1.7 or earlier, the existing cluster_replication database), nor any of the tables in it.

    For more information, see Section聽15.10.4, 鈥淐luster Replication Schema and Tables鈥.

  • NDB Cluster: It is now possible to create a unique hashed index on a column that is not defined as NOT NULL. Note that this change applies only to tables using the NDB storage engine.

    Unique indexes on columns in NDB tables do not store null values because they are mapped to primary keys in an internal index table (and primary keys cannot contain nulls).

    Normally, an additional ordered index is created when one creates unique indexes on NDB table columns; this can be used to search for NULL values. However, if USING HASH is specified when such an index is created, no ordered index is created.

    The reason for permitting unique hash indexes with null values is that, in some cases, the user wants to save space if a large number of records are pre-allocated but not fully initialized. This also assumes that the user will not try to search for null values. Since MySQL does not support indexes that are not allowed to be searched in some cases, the NDB storage engine uses a full table scan with pushed conditions for the referenced index columns to return the correct result.

    Note that a warning is returned if one creates a unique nullable hash index, since the query optimizer should be provided a hint not to use it with NULL values if this can be avoided.

    (Bug#21507)

  • NDB Cluster: Backup messages are now printed to the Cluster log. (Bug#24544)

  • NDB Cluster: The error message Management server closed connection, when recorded in the MySQL error log, now includes a timestamp indicating when the error took place. (Bug#21519)

  • NDB Cluster (Disk Data): The output of mysqldump now includes by default all tablespace and logfile group definitions used by any tables or databases that are dumped. (Bug#20839)

    Note: The working of the --all-tablespaces or -Y option for mysqldump remains unaffected by this change.

  • Direct and indirect usage of stored routines, user-defined functions, and table references is now prohibited in CREATE EVENT and ALTER EVENT statements. (Bug#22830)

    See Section聽20.2.2, 鈥CREATE EVENT Syntax鈥, and Section聽20.2.1, 鈥ALTER EVENT Syntax鈥, for more specific information.

  • DROP TRIGGER now supports an IF EXISTS clause. (Bug#23703)

  • All standard XPath comparison operators are now supported for use with the ExtractValue() and UpdateXML() functions. (Bug#22823)

Bugs fixed:

  • NDB Cluster: If the value set for MaxNoOfAttributes is excessive, a suitable error message is now returned. (Bug#19352)

  • NDB Cluster: Setting the configuration parameter LockPagesInMainMemory had no effect. (Bug#24461)

  • NDB Cluster: Multiple occurrences of error conditions were logged with duplicat error messages rather than being reported with a single error message stating that the error was encountered N times. (Bug#22313)

  • NDB Cluster: Sudden disconnection of an SQL or data node could lead to shutdown of data nodes with the error failed ndbrequire. (Bug#24447)

  • NDB Cluster: Different error messages were returned for similar cases involving failure to allocate memory for Cluster operations. (Bug#19203)

  • NDB Cluster: Some values of MaxNoOfTriggers could cause the server to become inaccessible following startup of the data nodes. (Bug#19454)

  • NDB Cluster (Replication): If errors occurred during purging of the binary logs, extraneous rows could remain left in the binlog_index table. (Bug#15021)

  • NDB Cluster (Disk Data): ndb_restore could sometimes fail when attempting to restore Disk Data tables due to data node failure caused by accessing unitialized memory. (Bug#24331)

  • NDB Cluster (Disk Data): Excessive fragmentation of Disk Data files (including log files and data files) could occur during the course of normal use. (Bug#24143)

  • NDB Cluster (Disk Data): It was possible to execute a statement for creating a Disk Data table that referred to a nonexistent tablespace, in which case the table was an in-memory NDB table. Such a statement instead now fails with an appropriate error message. (Bug#23576)

  • NDB Cluster (Disk Data): Under some circumstances, a DELETE from a Disk Data table could cause mysqld to crash. (Bug#23542)

  • NDB Cluster (Cluster APIs): Using BIT values with any of the comparison methods of the NdbScanFilter class caused the cluster's data nodes to fail. (Bug#24503)

  • NDB Cluster: A value equal to or greater than the allowed maximum for LongMessageBuffer caused all data nodes to crash. (Bug#22547)

  • NDB Cluster: The failure of a data node failure during a schema operation could lead to additional node failures. (Bug#24752)

  • NDB Cluster: A committed read could be attempted before a data node had time to connect, causing a timeout error. (Bug#24717)

  • NDB Cluster: The simultaneous shutdown of mysqld and ndbd processes caused unnecessary locking. (Bug#24655)

  • NDB Cluster: The failure of the master node in a node group during the allocation of node IDs could cause ndb_mgmd to hang. (Bug#24543)

  • NDB Cluster: In certain rare cases, a data node could crash due to a typographical error in the MySQL Cluster source code. (Bug#24476)

  • NDB Cluster: Creating a new tables containing a BLOB column when the server was short of memory could cause the server to crash. (Bug#24470)

  • NDB Cluster: Any statement following the execution of CREATE TABLE ... LIKE ndb_table (where ndb_table was a table using the NDB storage engine), would cause the mysql client to hang. (Bug#24301)

  • NDB Cluster: When the management client command ALL RESTART -i was executed while one data node was not running, all data nodes in the cluster were shut down. (Bug#24105)

  • NDB Cluster: A query using an index scan followed by a delete operation, and then a rollback could cause one or more data nodes to crash. (Bug#24039)

  • NDB Cluster (Cluster APIs): Some MGM API function calls could yield incorrect return values in certain cases where the cluster was operating under a very high load, or experienced timeouts in inter-node communications. (Bug#24011)

  • NDB Cluster: It was possible for the sum of the MaxNoOfTables, MaxNoOfOrderedIndexes, and MaxNoOfUniqueHashIndexes configuration parameters, plus the number of system tables to exceed the maximum value for a Uint32 number. In such a case, the cluster's data nodes failed to start, and no reason for this could easily be determined from the error messages provided. (Bug#22548)

  • NDB Cluster: Given a table mytbl in a database mydb on a MySQL Server acting as an SQL node in a MySQL Cluster, then, following multiple ALTER TABLE mytbl ENGINE=engine statements 鈥 first, to change the storage engine used for a table to NDB, and then again to change the table to use a non-NDB storage engine 鈥 a DROP DATABASE mydb statement executed on any SQL node in the cluster would cause mydb to be dropped on all SQL nodes in the cluster, even if mydb contained non-NDB tables. (Bug#21495)

  • NDB Cluster: An incorrect error message was displayed in the event that the value of the MaxNoOfOrderedIndexes parameter was set too low. (Bug#20065)

  • NDB Cluster: An incorrect error message was displayed in the event that the value of the DataMemory parameter was insufficient for the amount of data to be stored by the cluster. (Bug#19808)

  • NDB Cluster: A unique constraint violation was not ignored by an UPDATE IGNORE statement when the constraint violation occurred on a non-primary key. (Bug#18487, Bug#24303)

  • The stack size for NetWare binaries was increased to 128KB to prevent problems caused by insufficient stack size. (Bug#23504)

  • Attempting to use a view containing DEFINER information for a non-existent user resulted in an error message that revealed the definer account. Now the definer is revealed only to superusers. Other users receive only an access denied message. (Bug#17254)

  • The size of MEMORY tables and internal temporary tables was limited to 4GB on 64-bit Windows systems. (Bug#24052)

  • For debug builds, mysqladmin shutdown displayed an extraneous skipped 9 bytes from file: socket (3) message. (Bug#21428)

  • For queries that select from a view, the server was returning MYSQL_FIELD metadata inconsistently for view names and table names. For view columns, the server now returns the view name in the table field and, if the column selects from an underlying table, the table name in the org_table field. (Bug#20191)

  • CREATE FUNCTION X() and CREATE FUNCTION Y() failed with a syntax error instead of warning the user that these function names are already used (for GIS functions). (Bug#21025)

  • The loose index scan optimization for GROUP BY with MIN or MAX was not applied within other queries, such as CREATE TABLE ... SELECT ..., INSERT ... SELECT ..., or in the FROM clauses of subqueries. (Bug#24156)

  • Queries using a column alias in an expression as part of an ORDER BY clause failed, an example of such a query being SELECT mycol + 1 AS mynum FROM mytable ORDER BY 30 - mynum. (Bug#22457)

  • Trailing spaces were not removed from Unicode CHAR column values when used in indexes. This resulted in excessive usage of storage space, and could affect the results of some ORDER BY queries that made use of such indexes.

    Note: When upgrading, it is necessary to re-create any existing indexes on Unicode CHAR columns in order to take advantage of the fix. This can be done by using a REPAIR TABLE statement on each affected table.

    (Bug#22052)

  • Warnings were generated when explicitly casting a character to a number (for example, CAST('x' AS SIGNED)), but not for implicit conversions in simple arithmetic operations (such as 'x' + 0). Now warnings are generated in all cases. (Bug#11927)

  • BENCHMARK, ENCODE, DECODE, and FORMAT could only accept a constant for some parameters, and could not be used in prepared statements. (Bug#22684)

  • A query with a subquery that references columns of a view from the outer SELECT could return an incorrect result if used from a prepared statement. (Bug#20327)

  • Constant expressions and some numeric constants used as input parameters to user-defined functions were not treated as constants. (Bug#18761)

  • INET_ATON() returned a signed BIGINT value, not an unsigned value. (Bug#21466)

  • In some cases, the parser failed to distinguish a user-defined function from a stored function. (Bug#21809)

  • In some cases, a function that should be parsed as a user-defined function was parsed as a stored function. (Bug#24736)

  • Subqueries for which a pushed-down condition did not produce exactly one key field could cause a server crash. (Bug#24056)

  • LAST_DAY('0000-00-00') could cause a server crash. (Bug#23653)

  • Through the C API, the member strings in MYSQL_FIELD for a query that contains expressions may return incorrect results. (Bug#21635)

  • mysql_affected_rows() could return values different from mysql_stmt_affected_rows() for the same sequence of statements. (Bug#23383)

  • IN() and CHAR() can return NULL, but did not signal that to the query processor, causing incorrect results for IS NULL operations. (Bug#17047)

  • Instance Manager option-parsing code caused memory-allocation errors. (Bug#22242)

  • A trigger that invoked a stored function could cause a server crash when activated by different client connections. (Bug#23651)

  • CONCURRENT did not work correctly for LOAD DATA INFILE. (Bug#20637)

  • The server source code had multiple exportable definitions of the field_in_record_is_null() function. These are now all declared static. (Bug#24190)

  • Inserting a default or invalid value into a spatial column could fail with Unknown error rather than a more appropriate error. (Bug#21790)

  • The server could send incorrect column count information to the client for queries that produce a larger number of columns than can fit in a two-byte number. (Bug#19216)

  • Evaluation of subqueries that require the filesort algorithm were allocating and freeing the sort_buffer_size buffer many times, resulting in slow performance. Now the buffer is allocated once and reused. (Bug#21727)

  • SQL statements close to the size of max_allowed_packet could produce binary log events larger than max_allowed_packet that could not be read by slave servers. (Bug#19402)

  • View columns were always handled as having implicit derivation, leading to illegal mix of collation errors for some views in UNION operations. Now view column derivation comes from the original expression given in the view definition. (Bug#21505)

  • If elements in a non-top-level IN subquery were accessed by an index and the subquery result set included a NULL value, the quantified predicate that contained the subquery was evaluated to NULL when it should return a non-NULL value. (Bug#23478)

  • Calculation of COUNT(DISTINCT), AVG(DISTINCT), or SUM(DISTINCT) when they are referenced more than once in a single query with GROUP BY could cause a server crash. (Bug#23184)

  • For a cast of a DATETIME value containing microseconds to DECIMAL, the microseconds part was truncated without generating a warning. Now the microseconds part is preserved. (Bug#19491)

  • Metadata for columns calculated from scalar subqueries was limited to integer, double, or string, even if the actual type of the column was different. (Bug#11032)

  • The result for CAST() when casting a value to UNSIGNED was limited to the maximum signed BIGINT value, not the maximum unsigned value. (Bug#8663)

  • Some unnecessary Valgrind warnings were removed from the server. (Bug#24488, Bug#24533).

  • Using EXPLAIN caused a server crash for queries that selected from INFORMATION_SCHEMA in a subquery in the FROM clause. (Bug#22413)

  • Invalidating the query cache caused a server crash for INSERT INTO ... SELECT statements that selected from a view. (Bug#20045)

  • With row-based binary logging, replicated multiple-statement transaction deadlocks did not return the correct error code, causing the slave SQL thread to stop rather than roll back and re-execute. (Bug#23831)

  • With row-based binary logging, for CREATE TABLE IF NOT EXISTS LIKE temporary_table statements, the IF NOT EXISTS clause was not logged. (Bug#22762)

  • With row-based binary logging, CREATE TABLE IF NOT EXISTS SELECT statements were not logged properly. (Bug#22027)

  • On slave servers, transactions that exceeded the lock wait timeout failed to roll back properly. (Bug#20697)

  • Changes to character set variables prior to an action on a replication-ignored table were forgotten by slave servers. (Bug#22877)

  • With lower_case_table_names set to 1, SHOW CREATE TABLE printed incorrect output for table names containing Turkish I (LATIN CAPITAL LETTER I WITH DOT ABOVE). (Bug#20404)

  • When applying the group_concat_max_len limit, GROUP_CONCAT() could truncate multi-byte characters in the middle. (Bug#23451)

  • For view renaming, the table name to filename encoding was not performed. (Bug#21370)

  • For some problems relating to character set conversion or incorrect string values for INSERT or UPDATE, the server was reporting truncation or length errors instead. (Bug#18908)

  • The XPath operators < and >, as implemented in the ExtractValue() function, operated in reverse. (Bug#22823)

C.1.6.聽Changes in release 5.1.13 (Not released)

This is a new Beta development release, fixing recently discovered bugs.

NOTE: This Beta release, as any other pre-production release, should not be installed on production level systems or systems with critical data. It is good practice to back up your data before installing any new version of software. Although MySQL has worked very hard to ensure a high level of quality, protect your data by making a backup as you would for any software beta release. Please refer to our bug database at http://bugs.mysql.com/ for more details about the individual bugs fixed in this version.

This section documents all changes and bug fixes that have been applied since the last official MySQL release. If you would like to receive more fine-grained and personalized update alerts about fixes that are relevant to the version and features you use, please consider subscribing to MySQL Enterprise (a commercial MySQL offering). For more details please see http://www.mysql.com/products/enterprise.

Functionality added or changed:

  • Incompatible change: The number of function names affected by IGNORE_SPACE was reduced significantly in MySQL 5.1.13, from about 200 to about 30. (For details about IGNORE_SPACE, see Section聽9.2.4, 鈥淔unction Name Parsing and Resolution鈥.) This change improves the consistency of parser operation. However, it also introduces the possibility of incompatibility for old SQL code that relies on the following conditions:

    • IGNORE_SPACE is disabled.

    • The presence or absence of whitespace following a function name is used to distinguish between a built-in function and stored function that have the same name (for example, PI() versus PI ()).

    For functions that are no longer affected by IGNORE_SPACE as of MySQL 5.1.13, that strategy no longer works. Either of the following approaches can be used if you have code that is subject to the preceding incompatibility:

    • If a stored function has a name that conflicts with a built-in function, refer to the stored function with a schema name qualifier, regardless of whether whitespace is present. For example, write schema_name.PI() or schema_name.PI ().

    • Alternatively, rename the stored function to use a non-conflicting name and change invocations of the function to use the new name.

    (Bug#21114)

  • If the user specified the server options --max-connections=N or --table-open-cache=M, a warning would be given in some cases that some values were recalculated, with the result that --table-open-cache could be assigned greater value.

    It should be noted that, in such cases, both the warning and the increase in the --table-open-cache value were completely harmless. Note also that it is not possible for the MySQL Server to predict or to control limitations on the maximum number of open files, since this is determined by the operating system.

    The recalculation code has now been fixed to ensure that the value of --table-open-cache is no longer increased automatically, and that a warning is now given only if some values had to be decreased due to operating system limits.

    (Bug#21915)

  • Binary distributions of MySQL 5.1.12 were built without support for partitioning. This has been corrected except for NetWare. (Bug#23949)

  • A change in the interfaces for the INFORMATION_SCHEMA.FILES table has made the table accessible to storage engines other than NDB. (Bug#23013)

  • mysqldump --single-transaction now uses START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */ rather than BEGIN to start a transaction, so that a consistent snapshot will be used on those servers that support it. (Bug#19660)

  • mysql_upgrade now passes all the parameters specified on the command line to both mysqlcheck and mysql using the upgrade_defaults file. (Bug#20100)

  • For the CALL statement, stored procedures that take no arguments now can be invoked without parentheses. That is, CALL p() and CALL p are equivalent. (Bug#21462)

Bugs fixed:

  • MySQL 5.0.26 introduced an ABI incompatibility, which this release reverts. Programs compiled against 5.0.26 are not compatible with any other version and must be recompiled. (Bug#23427)

  • Several string functions could return incorrect results when given very large length arguments. (Bug#10963)

  • If an init_connect SQL statement produced an error, the connection was silently terminated with no error message. Now the server writes a warning to the error log. (Bug#22158)

  • If a table contains an AUTO_INCREMENT column, inserting into an insertable view on the table that does not include the AUTO_INCREMENT column should not change the value of LAST_INSERT_ID(), because the side effects of inserting default values into columns not part of the view should not be visible. MySQL was incorrectly setting LAST_INSERT_ID() to zero. (Bug#22584)

  • M % 0 returns NULL, but (M % 0) IS NULL evaluated to false. (Bug#23411)

  • Within a stored routine, a view definition cannot refer to routine parameters or local variables. However, an error did not occur until the routine was called. Now it occurs during parsing of the routine creation statement. (Bug#20953)

    Note: A side effect of this fix is that if you have already created such routines, and error will occur if you execute SHOW CREATE PROCEDURE or SHOW CREATE FUNCTION. You should drop these routines because they are erroneous.

  • A client library crash was caused by executing a statement such as SELECT * FROM t1 PROCEDURE ANALYSE() using a server side cursor on a table t1 that does not have the same number of columns as the output from PROCEDURE ANALYSE(). (Bug#17039)

  • mysql did not check for errors when fetching data during result set printing. (Bug#22913)

  • Adding a day, month, or year interval to a DATE value produced a DATE, but adding a week interval produced a DATETIME value. Now all produce a DATE value. (Bug#21811)

  • The column default value in the output from SHOW COLUMNS or SELECT FROM INFORMATION_SCHEMA.COLUMNS was truncated to 64 characters. (Bug#23037)

  • For not-yet-authenticated connections, the Time column in SHOW PROCESSLIST was a random value rather than NULL. (Bug#23379)

  • The Host column in SHOW PROCESSLIST output was blank when the server was started with the --skip-grant-tables option. (Bug#22728)

  • The Handler_rollback status variable sometimes was incremented when no rollback had taken place. (Bug#22728)

  • Within a prepared statement, SELECT (COUNT(*) = 1) (or similar use of other aggregate functions) did not return the correct result for statement re-execution. (Bug#21354)

  • Lack of validation for input and output TIME values resulted in several problems: SEC_TO_TIME() within subqueries incorrectly clipped large values; SEC_TO_TIME() treated BIGINT UNSIGNED values as signed; only truncation warnings were produced when both truncation and out-of-range TIME values occurred. (Bug#11655, Bug#20927)

  • Range searches on columns with an index prefix could miss records. (Bug#20732)

  • With SQL_MODE=TRADITIONAL, MySQL incorrectly aborted on warnings within stored routines and triggers. (Bug#20028)

  • In mysql, invoking connect or \r with very long db_name or host_name parameters caused buffer overflow. (Bug#20894)

  • mysqldump --xml produced invalid XML for BLOB data. (Bug#19745)

  • For a debug server, a reference to an undefined user variable in a prepared statment executed with EXECUTE caused an assertion failure. (Bug#19356)

  • Within a trigger for a base table, selecting from a view on that base table failed. (Bug#19111)

  • DELETE IGNORE could hang for foreign key parent deletes. (Bug#18819)

  • Transient errors in replication from master to slave may trigger multiple Got fatal error 1236: 'binlog truncated in the middle of event' errors on the slave. (Bug#4053)

  • The value of the warning_count system variable was not being calculated correctly (also affecting SHOW COUNT(*) WARNINGS). (Bug#19024)

  • InnoDB showed substandard performance with multiple queries running concurrently. (Bug#15815)

  • There was a race condition in the InnoDB fil_flush_file_spaces() function. (Bug#24098)

  • FROM_UNIXTIME() did not accept arguments up to POWER(2,31)-1, which it had previously. (Bug#9191)

  • Some yaSSL-related memory leaks detected by Valgrind were fixed. (Bug#23981)

  • If COMPRESS() returned NULL, subsequent invocations of COMPRESS() within a result set or within a trigger also returned NULL. (Bug#23254)

  • mysql would lose its connection to the server if its standard output was not writable. (Bug#17583)

  • mysql-test-run did not work correctly for RPM-based installations. (Bug#17194)

  • The return value from my_seek() was ignored. (Bug#22828)

  • Use of PREPARE with a CREATE PROCEDURE statement that contained a syntax error caused a server crash. (Bug#21868)

  • Use of a DES-encrypted SSL certificate file caused a server crash. (Bug#21868)

  • Column names were not quoted properly for replicated views. (Bug#19736)

  • InnoDB used table locks (not row locks) within stored functions. (Bug#18077)

  • InnoDB crashed when trying to display an error message about a foreign key constraint violation when the two tables are in different schemas. (Bug#23368)

  • Statements such as DROP PROCEDURE and DROP VIEW were written to the binary log too late due to a race condition. (Bug#14262)

  • At shutdown, Instance Manager told guarded server instances to stop, but did not wait until they actually stopped. (Bug#17486)

  • It was not possible to do an atomic rename of the log tables without the possibility of losing rows. Now you can do this:

    USE mysql;
    CREATE TABLE IF NOT EXISTS general_log2 LIKE general_log;
    RENAME TABLE general_log TO general_log_backup, general_log2 TO general_log;
    

    (Bug#17544, Bug#21785)

  • NDB Cluster (Disk Data): In the event of an aborted multiple update, the space in the Disk Data log buffer to be freed as a result was actually freed twice, which could eventually lead to a crash. (Bug#23430)

  • NDB Cluster: An NDB source file included a memset() call with reversed arguments. (Bug#23169)

  • NDB Cluster: Under some conditions, the data distribution could become unbalanced in a MySQL Cluster with 2 or more node groups following the creation of a new table. (Bug#21690)

    As part of the fix for this bug, two new NDB API methods were added to the NdbDictionary::Object::Table class. See the MySQL Cluster API documentation for details.

  • Incorrect warnings occurred for use of CREATE TABLE ... LIKE or REPAIR TABLE with the log tables. (Bug#21966)

  • MySQL failed to build on the Alpha platform. (Bug#23256)

  • The optimizer failed to use equality propagation for BETWEEN and IN predicates with string arguments. (Bug#22753)

  • The optimizer used the ref join type rather than eq_ref for a simple join on strings. (Bug#22367)

  • The WITH CHECK OPTION for a view failed to prevent storing invalid column values for UPDATE statements. (Bug#16813)

  • A literal string in a GROUP BY clause could be interpreted as a column name. (Bug#14019)

  • Some queries that used MAX() and GROUP BY could incorrectly return an empty result. (Bug#22342)

  • WITH ROLLUP could group unequal values. (Bug#20825)

  • Use of a subquery that invoked a function in the column list of the outer query resulted in a memory leak. (Bug#21798)

  • LIKE searches failed for indexed utf8 character columns. (Bug#20471)

  • FLUSH INSTANCES in Instance Manager triggered an assertion failure. (Bug#19368)

  • ALTER TABLE was not able to rename a view. (Bug#14959)

  • The optimizer sometimes mishandled R-tree indexes for GEOMETRY data types, resulting in a server crash. (Bug#21888)

  • An unhandled NULL pointer caused a server crash. (Bug#22138)

  • Use of SQL_BIG_RESULT did not influence the sort plan for query execution. (Bug#22781)

  • The server did not allocate sufficient memory for some queries for which a DISTINCT to GROUP BY conversion is possible and an ORDER BY clause is present, resulting in a server crash. (Bug#20503)

  • The range analysis optimizer did not take into account predicates for which an index could be used after reading const tables. In some cases this resulted in non-optimal execution plans. (Bug#19579)

  • Entries in the slow query log could have an incorrect Rows_examined value. (Bug#12240)

  • Insufficient memory (myisam_sort_buffer_size) could cause a server crash for several operations on MyISAM tables: repair table, create index by sort, repair by sort, parallel repair, bulk insert. (Bug#23175)

  • OPTIMIZE TABLE with myisam_repair_threads > 1 could result in MyISAM table corruption. (Bug#8283)

  • NDB Cluster: Restoring a cluster failed if there were any tables with 128 or more columns. (Bug#23494, Bug#23502)

  • NDB Cluster: Cluster backups would fail when there were more than 2048 schema objects in the cluster. (Bug#23499)

  • NDB Cluster: The management client command ALL DUMP 1000 would cause the cluster to crash if data nodes were connected to the cluster but not yret fully started. (Bug#23203)

  • NDB Cluster: INSERT ... ON DUPLICATE KEY UPDATE on an NDB table could lead to deadlocks and memory leaks. (Bug#23200)

  • NDB Cluster: If a node restart could not be performed from the REDO log, no node takeover took place. This could cause partitions to be left empty during a system restart. (Bug#22893)

  • NDB Cluster: Multiple node restarts in rapid succession could cause a system restart to fail (Bug#22892), or induce a race condition (Bug#23210).

  • NDB Cluster: Attempting to create a unique constraint with USING HASH on an NDB table caused mysqld to crash. (Bug#21873)

  • NDB Cluster: When inserting a row into an NDB table with a duplicate value for a non-primary unique key, the error issued would reference the wrong key. (Bug#21072)

  • NDB Cluster (NDB API): When multiple processes or threads in parallel performed the same ordered scan with exclusive lock and updating the retrieved records, the scan could skip some records, which were not updated as the result. (Bug#20446)

  • NDB Cluster: Aborting a cluster backup too soon after starting it caused a forced shutdown of the data nodes. (Bug#19148)

C.1.7.聽Changes in release 5.1.12 (24 October 2006)

This is a new Beta development release, fixing recently discovered bugs.

This section documents all changes and bug fixes that have been applied since the last official MySQL release. If you would like to receive more fine-grained and personalized update alerts about fixes that are relevant to the version and features you use, please consider subscribing to MySQL Enterprise (a commercial MySQL offering). For more details please see http://www.mysql.com/products/enterprise.

Functionality added or changed:

  • Incompatible change: Support for the BerkeleyDB (BDB) engine has been dropped from this release. Any existing tables that are in BDB format will not be readable from within MySQL from 5.1.12 or newer. You should convert your tables to another storage engine before upgrading to 5.1.12.

    Because of this change, the SHOW [BDB] LOGS statement has been dropped.

  • Incompatible change: The namespace for scheduled events has changed, such that events are no longer unique to individual users. This also means that a user with the EVENT privilege on a given database can now view, alter, or drop any events defined on that database.

    If you used scheduled events in an earlier MySQL 5.1 release, you should rename any of them having the same name and defined on the same database but belonging to different users 鈥 so that all events in a given database have unique names 鈥 before upgrading to 5.1.12 (or newer).

    For additional information, see Section聽20.5, 鈥淭he Event Scheduler and MySQL Privileges鈥.

  • Incompatible change: The permitted values for and behaviour of the event_scheduler system variable have changed. Permitted values are now ON, OFF, and DISABLED, with OFF being the default. It is not possible to change its value to or from DISABLED while the server is running.

    For details, see Section聽20.1, 鈥淓vent Scheduler Overview鈥.

  • Incompatible change: The plugin interface has changed: The st_mysql_plugin structure has a new license member to indicate the license type. (The allowable values are defined in mysql/plugin.h.) This change is not backward compatible, so the API version (MYSQL_PLUGIN_INTERFACE_VERSION) has changed. For additional information, see Section聽26.2.5, 鈥淲riting Plugins鈥.

  • Incompatible change: The full-text parser plugin interface has changed in two ways:

    • The MYSQL_FTPARSER_PARAM structure has a new flags member. This is zero if there are no special flags, or MYSQL_FTFLAGS_NEED_COPY, which means that mysql_add_word() must save a copy of the word (that is, it cannot use a pointer to the word because the word is in a buffer that will be overwritten.)

      This flag might be set or reset by MySQL before calling the parser plugin, by the parser plugin itself, or by the mysql_parse() function.

    • The mysql_parse() and mysql_add_word() functions now take a MYSQL_FTPARSER_PARAM as their first argument, not a MYSQL_FTPARSER_PARAM::mysql_ftparam as before.

    These changes are not backward compatible, so the API version (MYSQL_FTPARSER_INTERFACE_VERSION) has changed. For additional information, see Section聽26.2.5, 鈥淲riting Plugins鈥.

  • Incompatible change: In the INFORMATION_SCHEMA.EVENTS table, the EVENT_DEFINITION column now contains the SQL executed by a scheduled event.

    The EVENT_BODY column now contains the language used for the statement or statements shown in EVENT_DEFINITION. In MySQL 5.1, the value shown in EVENT_BODY is always SQL.

    These changes were made to bring this table into line with the INFORMATION_SCHEMA.ROUTINES table, and that table's ROUTINE_BODY and ROUTINE_DEFINITION columns. (Bug#16992)

  • Incompatible change: MySQL Cluster node and system restarts formerly required that all fragments use the same local checkpoint (LCP); beginning with this version, it is now possible for different fragments to use different LCPs during restarts. This means that data node filesystems must be rebuilt as part of any upgrade to this version by restarting all data nodes with the --initial option. (Bug#21271, Bug#21478)

    See Section聽15.5.2, 鈥淐luster Upgrade and Downgrade Compatibility鈥, and related sections of the Manual before upgrading a MySQL Cluster to version 5.1.12 or later.

  • Incompatible change: A number of MySQL constructs are now prohibited in partitioning expressions, beginning with this release. These include:

    • A number of MySQL functions.

      You can find a complete list of these functions under Partitioning Limitations.

    • The bit operators |, &, ^, <<, >>, and ~.

    • Nested function calls.

    • Calls to stored routines, UDFs, or plugins.

    • Character-to-integer conversions involving non-8-bit character sets or any of the latin1_german2_ci, latin2_czech_cs, or cp1250_czech_cs collations.

    These restrictions were added in part as a result of Bug#18198 and related bug reports.

    For more information about these and other restrictions on partitioned tables in MySQL, see Section聽16.5, 鈥淩estrictions and Limitations on Partitioning鈥.

  • Binary MySQL distributions no longer include a mysqld-max server. Instead, distributions contain a binary that includes the features previously included in the mysqld-max binary.

  • The default binary log format (as used during replication) is now Mixed based, automatically using a combination of row-based and statement based log events as appropriate.

  • The general query log and slow query logs now can be enabled or disabled at runtime with the general_log and slow_query_log system variables, and the name of the log files can be changed by setting the general_log_file and slow_query_log_file system variables. See Section聽5.11.3, 鈥淭he General Query Log鈥, and Section聽5.11.5, 鈥淭he Slow Query Log鈥.

  • The output generated by the server when using the --xml option has changed with regard to null values. It now matches the output from mysqldump --xml. That is, a column containing a NULL value is now reported as

    <field name="column_name" xsi:nil="true" />
    

    whereas a column containing the string value 'NULL' is reported as

    <field name="column_name">NULL</field>
    

    and a column containing an empty string is reported as

    <field name="column_name">>/field>
    

    (Bug#21263)

  • The following statements now can be executed as prepared statements (using PREPARE plus EXECUTE):

    CACHE INDEX
    CHANGE MASTER
    CHECKSUM {TABLE | TABLES}
    {CREATE | RENAME | DROP} DATABASE
    {CREATE | RENAME | DROP} USER
    FLUSH {TABLE | TABLES | TABLES WITH READ LOCK | HOSTS | PRIVILEGES
      | LOGS | STATUS | MASTER | SLAVE | DES_KEY_FILE | USER_RESOURCES}
    GRANT
    REVOKE
    KILL
    LOAD INDEX INTO CACHE
    RESET {MASTER | SLAVE | QUERY CACHE}
    SHOW BINLOG EVENTS
    SHOW CREATE {PROCEDURE | FUNCTION | EVENT | TABLE | VIEW}
    SHOW {AUTHORS | CONTRIBUTORS | WARNINGS | ERRORS}
    SHOW {MASTER | BINARY} LOGS
    SHOW {MASTER | SLAVE} STATUS
    SLAVE {START | STOP}
    INSTALL PLUGIN
    UNINSTALL PLUGIN
    

    (Bug#20665)

  • The Instance Manager --passwd option has been renamed to --print-password-line. Other options were added to enable management of the IM password file from the command line: --add-user, --drop-user, --edit-user, --list-users, --check-password-file, --clean-password-file, --username, and --password. The --mysql-safe-compatible option was added to cause the Instance Manner to act similarly to mysqld_safe.

  • On Windows, typing Control-C caused the mysql client to crash. Now it causes mysql to attempt to kill the current statement. If this cannot be done, or Control-C is typed again before the statement is killed, mysql exits. (Bug#17926; see also Bug#1989)

  • TEXT and BLOB columns do not support DEFAULT values. However, when a default of '' was specified, the specification was silently ignored. This now results in a warning, or an error in strict mode. (Bug#19498)

  • The mysql client now allows \l in the prompt command argument to insert the current delimiter into the prompt. (Bug#14448)

  • Log table changes: By default, the log tables use the CSV storage engine, as before. But now the log tables can be altered to use the MyISAM storage engine. You cannot use ALTER TABLE to alter a log table that is in use. The log must be disabled first. No engines other than CSV or MyISAM are legal for the log tables. The use of DROP TABLE for log tables is similarly restricted: It cannot be used to drop a log table that is in use. The log must be disabled first. (These changes also correct a deadlock that occurred for an attempt to drop an in-use log table.) (Bug#18559)

  • The LEFT() and RIGHT() functions return NULL if any argument is NULL. (Bug#11728)

  • EXPLAIN EXTENDED now shows a filtered column that is an estimated percentage of the examined rows that will be joined with the previous tables. (Bug#14940)

  • For mysqlshow, if a database name argument contains wildcard characters (such as 鈥_鈥) but matches a single database name exactly, treat the name as a literal name. This allows a command such as mysqlshow information_schema work without having to escape the wildcard character. (Bug#19147)

  • If a DROP VIEW statement named multiple views, it stopped with an error if a non-existent view was named and did not drop the remaining views. Now it continues on and reports an error at the end, similar to DROP TABLE. (Bug#16614)

  • SHOW CREATE TABLE now shows constraints for InnoDB tables. (Bug#16614)

  • Added the --set-charset option to mysqlbinlog to allow the character set to be specified for processing binary log files. (Bug#18351)

  • NDB Cluster: Backup messages are no longer printed to the Cluster log.

  • NDB Cluster: The HELP command in the Cluster management client now provides command-specific help. For example, HELP RESTART in ndb_mgm provides detailed information about the START command. (Bug#19620)

  • NDB Cluster: Inserting into an NDB table failed when the table had no primary key but had a unique key added after table was created on one or more NOT NULL columns. This occurred when the unique key had been adding using either ALTER TABLE or CREATE UNIQUE KEY. (Bug#22838)

  • NDB Cluster: The ndb_config utility now accepts -c as a short form of the --ndb-connectstring option. (Bug#22295)

  • NDB Cluster: Added the --bind-address option for ndbd. This allows a data node process to be bound to a specific network interface. (Bug#22195)

  • NDB Cluster: The Ndb_number_of_storage_nodes system variable was renamed to Ndb_number_of_data_nodes. (Bug#20848)

  • Added the --ndb-use-copying-alter-table option to mysqld to provide a fallback in case of problems with online ALTER TABLE operations on NDBCluster tables.

  • Added the SHOW CONTRIBUTORS statement.

  • It is no longer possible to create partitioned tables using the CSV storage engine.

  • NDB Cluster: The status variables Ndb_connected_host and Ndb_connected_port were renamed to Ndb_config_from_host and Ndb_config_from_port, respectively.

  • NDB Cluster: A number of erroneous, misleading, or missing error messages have been corrected. (Bug#17297 & Bug#19543)

  • NDB Cluster: It is no longer possible to create Cluster tables using any partitioning type other than [LINEAR] KEY. Attempting to do so now raises an error.

  • The ExtractValue() function now produces an error when passed an XML fragment that is not well-formed. (Bug#18201)

    (Previously, the function allowed invalid XML fragments to be used.)

  • There were several issues regarding how SHOW STATUS affected some status variables and logging which could impact monitoring the MySQL Server. The behavior of this statement has been modified in two ways:

    • SHOW STATUS is no longer logged to the slow query log.

    • SHOW STATUS no longer updates any session status variables, except for com_show_status.

    However, SHOW STATUS continues to update global status variables to allow monitoring of what the server is actually doing. This is because SHOW STATUS creates temporary tables that may affect performance if it is called excessively often. (Bug#10210, Bug#19764)

  • The mysqldumpslow script has been moved from client RPM packages to server RPM packages. This corrects a problem where mysqldumpslow could not be used with a client-only RPM install, because it depends on my_print_defaults which is in the server RPM. (Bug#20216)

  • The bundled yaSSL library was upgraded to version 1.3.7.

  • The bundled yaSSL library licensing has added a FLOSS exception similar to MySQL to resolve licensing incompatibilities with MySQL. (See the extra/yassl/FLOSS-EXCEPTIONS file in a MySQL source distribution for details.) (Bug#16755)

  • mysqlslap threads now try to connect up to 10 times if the initial connect attempt fails. (Bug#21297)

  • For a successful dump, mysqldump now writes a SQL comment to the end of the dump file in the following format:

    -- Dump completed on YYYY-MM-DD hh:mm:ss
    

    (Bug#10877)

  • The mysqld and mysqlmanager manpages have been reclassified from volume 1 to volume 8. (Bug#21220)

  • In the INFORMATION_SCHEMA.ROUTINES table the ROUTINE_DEFINITION column now is defined as NULL rather than NOT NULL. Also, NULL rather than the empty string is returned as the column value if the user does not have sufficient privileges to see the routine definition. (Bug#20230)

  • configure now defines the symbol DBUG_ON in config.h to indicate whether the source tree is configured to be compiled with debugging support. (Bug#19517)

  • The MySQL distribution now compiles on UnixWare 7.13. (Bug#20190)

  • The mysql client used the default character set if it automatically reconnected to the server, which is incorrect if the character set had been changed. To enable the character set to remain synchronized on the client and server, the mysql command charset (or \C) that changes the default character set and now also issues a SET NAMES statement. The changed character set is used for reconnects. (Bug#11972)

  • The STATE column of the INFORMATION_SCHEMA.PROCESSLIST table was increased from 30 to 64 characters to accommodate longer state values. (Bug#21652)

  • TIMESTAMP columns that are NOT NULL now are reported that way by SHOW COLUMNS and INFORMATION_SCHEMA. (Bug#20910)

  • INFORMATION_SCHEMA contains new tables, GLOBAL_STATUS, SESSION_STATUS, GLOBAL_VARIABLES, and SESSION_VARIABLES, that correspond to the output from the SHOW {GLOBAL|SESSION} STATUS and SHOW {GLOBAL|SESSION} VARIABLES statements.

  • The BINARY keyword now is forbidden as a data type attribute in stored routines (for example, DECLARE v1 VARCHAR(25) BINARY), because DECLARE does not support collations, and in this context BINARY specifies the binary collation of the variable's character set. (Bug#20701)

  • The source distribution has been updated so that the UDF example can be compiled under Windows with CMake. See Section聽26.3.4.5, 鈥淐ompiling and Installing User-Defined Functions鈥. (Bug#19121)

  • LOAD DATA INFILE no longer causes an implicit commit for all storage engines. It now causes an implicit commit only for tables using the NDB storage engine. (Bug#11151)

  • The LOAD DATA FROM MASTER and LOAD TABLE FROM MASTER statements are deprecated. See Section聽13.6.2.2, 鈥LOAD DATA FROM MASTER Syntax鈥, for recommended alternatives. (Bug#18822, Bug#9125, Bug#12187, Bug#14399, Bug#15025, Bug#20596)

  • mysqldump now has a --flush-privileges option. It causes mysqldump to emit a FLUSH PRIVILEGES statement after dumping the mysql database. This option should be used any time the dump contains the mysql database and any other database that depends on the data in the mysql database for proper restoration. (Bug#21424)

  • The default value of the tmp_table_size system variable was lowered from 32MB to 16MB because it is bounded by the value of max_heap_table_size, which has a default of 16MB. (Bug#18875)

  • The number of InnoDB threads is no longer limited to 1,000 on Windows. (Bug#22268)

  • Memory consumption of the InnoDB data dictionary cache was roughly halved by cleaning up the data structures. (Bug#20877)

  • Using --with-debug to configure MySQL with debugging support enables you to use the --debug="d,parser_debug" option when you start the server. This causes the Bison parser that is used to process SQL statements to dump a parser trace to the server's standard error output. Typically, this output is written to the error log.

  • A new system variable, lc_time_names, specifies the locale that controls the language used to display day and month names and abbreviations. This variable affects the output from the DATE_FORMAT(), DAYNAME() and MONTHNAME() functions. See Section聽5.10.9, 鈥淢ySQL Server Locale Support鈥.

Bugs fixed:

  • Security fix: On Linux, and possibly other platforms using case-sensitive filesystems, it was possible for a user granted rights on a database to create or access a database whose name differed only from that of the first by the case of one or more letters. (CVE-2006-4226, Bug#17647)

  • Security fix: If a user has access to MyISAM table t, that user can create a MERGE table m that accesses t. However, if the user's privileges on t are subsequently revoked, the user can continue to access t by doing so through m. If this behavior is undesirable, you can start the server with the new --skip-merge option to disable the MERGE storage engine. (Bug#15195)

  • Security fix: A stored routine created by one user and then made accessible to a different user using GRANT EXECUTE could be executed by that user with the privileges of the routine's definer. (CVE-2006-4227, Bug#18630)

  • Incompatible change: For utf8 columns, the full-text parser incorrectly considered several non-word punctuation and whitespace characters as word characters, causing some searches to return incorrect results. (Bug#19580)

    The fix involves a change to the full-text parser, so any tables that have FULLTEXT indexes on utf8 columns must be repaired with REPAIR TABLE:

    REPAIR TABLE tbl_name QUICK;
    
  • An invalid GRANT statement for which Ok was returned on a replication master caused an error on the slave and replication to fail. (Bug#6774)

  • InnoDB locking was improved by removing a gap lock for the case that you try to delete the same row twice within a transaction. (Bug#13544)

  • Deleting entries from a large MyISAM index could cause index corruption when it needed to shrink. Deletes from an index can happen when a record is deleted, when a key changes and must be moved, and when a key must be un-inserted because of a duplicate key. This can also happen in REPAIR TABLE when a duplicate key is found and in myisamchk when sorting the records by an index. (Bug#22384)

  • Setting myisam_repair_threads caused any repair operation on a MyISAM table to fail to update the cardinality of indexes, instead making them always equal to 1. (Bug#18874)

  • ALTER EVENT statements including only a COMMENT clause failed with a syntax error on two platforms: Linux for S/390, and OS X 10.4 for 64-bit PPC. (Bug#23423)

  • For row-based replication, log rotation could occur at an improper time. (Bug#21474)

  • For row-based replication, the BINLOG command did not lock tables properly, causing a crash for some table types. (Bug#19459)

  • The parser rejected queries that selected from a table twice using a UNION within a subquery. The parser now supports arbitrary subquery, join, and parenthesis operations within EXISTS subqueries. A limitation still exists for scalar subqueries: If the subquery contains UNION, the first SELECT of the UNION cannot be within parentheses. For example, SELECT (SELECT a FROM t1 UNION SELECT b FROM t2) will work, but SELECT ((SELECT a FROM t1) UNION (SELECT b FROM t2)) will not. (Bug#14654)

  • Incorrect type aggregation for IN and CASE expressions could lead to an incorrect result. (Bug#18360)

  • When using row based replication, a CREATE TABLE...SELECT statement would be replicated, even if the table creation failed on the master (for example, due to a duplicate key failure). (Bug#20265)

  • The optimizer did not take advantage of indexes on columns used for the second or third arguments of BETWEEN. (Bug#18165)

  • Subqueries with aggregate functions but no FROM clause could return incorrect results. (Bug#21540)

  • The CSV storage engine failed to detect some table corruption. (Bug#22080)

  • For multiple-table UPDATE statements, storage engines were not notified of duplicate-key errors. (Bug#21381)

  • Successive invocations of a COUNT(*) query containing a join on two MyISAM tables and a WHERE clause of the form WHERE (table1.column1 = table2.column2) OR table2.column2 IS NULL yielded different results. (Bug#21019)

  • It was possible to provide the ExtractValue() function with input containing 鈥tags鈥 that were not valid XML; for example, it was possible to use tag names beginning with a digit, which are disallowed by the W3C's XML 1.0 specification. Such cases caused the function to return 鈥junk鈥 output rather than an error message signalling the user as to the true nature of the problem. (Bug#20854)

  • The presence of a subquery in the ON clause of a join in a view definition prevented the MERGE algorithm from being used for the view in cases where it should be allowed. (Bug#21646)

  • BIT columns were not replicated properly under row-based replication. (Bug#22550)

  • Conversion of values inserted into a BIT column could affect adjacent columns. (Bug#22271)

  • The URL into the online manual that is printed in the stack trace message by the server was out of date. (Bug#21449)

  • Incorrect results could be obtained from re-execution of a parametrized prepared statement or a stored routine with a SELECT that uses LEFT JOIN with a second table having only one row. (Bug#21081)

  • PROCEDURE ANALYSE() returned incorrect values of M FLOAT(M, D) and DOUBLE(M, D). (Bug#20305)

  • Join conditions using index prefixes on utf8 columns of InnoDB tables incorrectly ignored rows where the length of the actual value was greater than the length of the index prefix. (Bug#19960)

  • On an INSERT into an updatable but non-insertable view, an error message was issued stating that the view was not updatable. Now the message says the view is not insertable-into. (Bug#5505)

  • INSERT DELAYED did not honor SET INSERT_ID or the auto_increment_* system variables. (Bug#20627, Bug#20830)

  • For character sets having a mbmaxlen value of 2, any ALTER TABLE statement changed TEXT columns to MEDIUMTEXT. (Bug#21620)

  • A query that used GROUP BY and an ALL or ANY quantified subquery in a HAVING clause could trigger an assertion failure. (Bug#21853)

  • For an ENUM column that used the ucs2 character set, using ALTER TABLE to modify the column definition caused the default value to be lost. (Bug#20108)

  • An UPDATE that referred to a key column in the WHERE clause and activated a trigger that modified the column resulted in a loop. (Bug#20670)

  • A loaded storage engine plugin did not load after a server restart. (Bug#21610)

  • Creating a TEMPORARY table with the same name as an existing table that was locked by another client could result in a lock conflict for DROP TEMPORARY TABLE because the server unnecessarily tried to acquire a name lock. (Bug#21096)

  • After FLUSH TABLES WITH READ LOCK followed by UNLOCK TABLES, attempts to drop or alter a stored routine failed with an error that the routine did not exist, and attempts to execute the routine failed with a lock conflict error. (Bug#21414)

  • mysql_com.h unnecessarily referred to the ulong type. (Bug#22227)

  • Incorporated some portability fixes into the definition of __attribute__ in my_global.h. (Bug#2717)

  • Linking the pthreads library to single-threaded MySQL libraries caused dlopen() to fail at runtime on HP-UX. (Bug#18267)

  • Loading a plugin caused any an existing plugin with the same name to be lost. (Bug#20615)

  • In the package of pre-built time zone tables that is available for download at http://dev.mysql.com/downloads/timezones.html, the tables now explicitly use the utf8 character set so that they work the same way regardless of the system character set value. (Bug#21208)

  • The build process incorrectly tried to overwrite sql/lex_hash.h. This caused the build to fail when using a shadow link tree pointing to original sources that were owned by another account. (Bug#18888)

  • mysql_ftdump produced bad counts for common words. (Bug#22326)

  • The optimizer could make an incorrect index choice for indexes with a skewed key distribution. (Bug#22393)

  • When records are merged from the insert buffer and the page needs to be reorganized, InnoDB used incorrect column length information when interpreting the records of the page. This caused a server crash due to apparent corruption of secondary indexes in ROW_FORMAT=COMPACT that contain prefix indexes of fixed-length columns. Data files should not be corrupted, but the crash was likely to repeat every time the server was restarted. (Bug#21638)

  • Instance Manager didn't close the client socket file when starting a new mysqld instance. mysqld inherited the socket, causing clients connected to Instance Manager to hang. (Bug#12751)

  • Using GROUP_CONCAT() on the result of a subquery in the FROM clause that itself used GROUP_CONCAT() could cause a server crash. (Bug#22015)

  • Instance Manager had a race condition involving mysqld PID file removal. (Bug#22379)

  • Execution of a prepared statement that uses an IN subquery with aggregate functions in the HAVING clause could cause a server crash. (Bug#22085)

  • Selecting from a MERGE table could result in a server crash if the underlying tables had fewer indexes than the MERGE table itself. (Bug#21617, Bug#22937)

  • A locking safety check in InnoDB reported a spurious error stored_select_lock_type is 0 inside ::start_stmt() for INSERT ... SELECT statements in innodb_locks_unsafe_for_binlog mode. The safety check was removed. (Bug#10746)

  • make install tried to build files that should already have been built by make all, causing a failure if installation was performed using a different account than the one used for the initial build. (Bug#19738)

  • The source distribution would not build on Windows due to a spurious dependency on ib_config.h. (Bug#22224)

  • It was possible for a stored routine with a non-latin1 name to cause a stack overrun. (Bug#21311)

  • The server returns a more informative error message when it attempts to open a MERGE table that has been defined to use non-MyISAM tables. (Bug#10974)

  • Within stored routines, some error messages were printed incorrectly. A non-null-terminated string was passed to a message-printing routine that expected a null-terminated string. (Bug#20778)

  • SUBSTR() results sometimes were stored improperly into a temporary table when multi-byte character sets were used. (Bug#20204)

  • Certain malformed INSERT statements could crash the mysql client. (Bug#21142)

  • EXPLAIN EXTENDED now shows a filtered column that is an estimated percentage of the examined rows that will be joined with the previous tables. This was added while dealing with a problem of MySQL choosing the wrong index for some queries. (Bug#14940)

  • On Mac OS X, zero-byte read() or write() calls to an SMB-mounted filesystem could return a non-standard return value, leading to data corruption. Now such calls are avoided. (Bug#12620)

  • With TRADITIONAL SQL mode, assignment of out-of-bound values and rounding of assigned values was done correctly, but assignment of the same numbers represented as strings sometimes was handled differently. (Bug#6147)

  • The source distribution failed to compile when configured with the --without-geometry option. (Bug#12991)

  • The source distribution failed to compile when configured with the --with-libwrap option. (Bug#18246)

  • The feature of being able to recover a temporary table named #sql_id in InnoDB by creating a table named rsql_id_recover_innodb_tmp_table was broken by the introduction of the new identifier encoding in MySQL 5.1.6 (Bug#21313)

  • ALTER EVENT in the body of a stored procedure led to a crash when the procedure was called. This affected only those ALTER EVENT statements which changed the interval of the event. (Bug#22397)

  • A DATE can be represented as an integer (such as 20060101) or as a string (such as '2006.01.01'). When a DATE (or TIME) column is compared in one SELECT against both representations, constant propagation by the optimizer led to comparison of DATE as a string against DATE as an integer. This could result in integer comparisons such as 2006 against 20060101, erroneously producing a false result. (Bug#21475)

  • When a statement used a stored function that inserted into an AUTO_INCREMENT column, the generated AUTO_INCREMENT value was not written into the binary log, so a different value could in some cases be inserted on the slave. (Bug#20341)

  • A stored procedure that used LAST_INSERT_ID() did not replicate properly using statement-based binary logging. (Bug#20339)

  • Use of the --no-pager option caused mysql to crash. (Bug#19363)

  • For INSERT ... ON DUPLICATE KEY UPDATE, use of VALUES(col_name) within the UPDATE clause sometimes was handled incorrectly. (Bug#21555)

  • When event_scheduler was set to DISABLED, its value was not displayed correctly by SHOW VARIABLES or SELECT @@global.event_scheduler. (Bug#22662)

  • Row equalities (such as WHERE (a,b) = (c,d) were not taken into account by the optimizer, resulting in slow query execution. Now they are treated as conjunctions of equalities between row elements. (Bug#16081)

  • If the binary logging format was changed between the times when a locked table was modified and when it was unlocked, the binary log contents were incorrect. (Bug#20863)

  • Column names supplied for a view created on a master server could be lost on a slave server. (Bug#19419)

  • For a MyISAM table locked with LOCK TABLES ...WRITE, queries optimized using the index_merge method did not show rows inserted with the lock in place. (Bug#20256)

  • Table aliases in multiple-table DELETE statements sometimes were not resolved. (Bug#21392)

  • A query result could be sorted improperly when using ORDER BY for the second table in a join. (Bug#21302)

  • The --collation-server server option was being ignored. With the fix for this problem, if you choose a non-default character set with --character-set-server, you should also use --collation-server to specify the collation. (Bug#15276)

  • A function result in a comparison was replaced with a constant by the optimizer under some circumstances when this optimization was invalid. (Bug#21698)

  • A subquery that uses an index for both the WHERE and ORDER BY clauses produced an empty result. (Bug#21180)

  • If the auto_increment_offset setting causes MySQL to generate a value larger than the column's maximum possible value, the INSERT statement is accepted in strict SQL mode, whereas but should fail with an error. (Bug#20573)

  • Queries containing a subquery that used aggregate functions could return incorrect results. (Bug#16792)

  • Row-based replication failed when the query cache was enabled on the slave. (Bug#17620)

  • The index_merge/Intersection optimizer could have a memory overrrun when the number of table columns covered by an index is sufficiently large, possibly resulting in a server crash. (Bug#16201)

  • The MD5(), SHA1(), and ENCRYPT() functions should return a binary string, but the result sometimes was converted to the character set of the argument. MAKE_SET() and EXPORT_SET() now use the correct character set for their default separators, resulting in consistent result strings which can be coerced according to normal character set rules. (Bug#20536)

  • EXPLAIN sometimes returned an incorrect select_type for a SELECT from a view, compared to the select_type for the equivalent SELECT from the base table. (Bug#5500)

  • An InnoDB mutex was not aquired and released under the same condition, leading to deadlock in some rare situations involving XA transactions. (Bug#21833)

  • With row-based replication, replicating a statement to a slave where the table had additional columns relative to the master table did not work. (Bug#19069)

  • For a MyISAM table with a FULLTEXT index, compression with myisampack or a check with myisamchk after compression resulted in table corruption. (Bug#19702)

  • With max_sp_recursion set to 0, a stored procedure that executed a SHOW CREATE PROCEDURE statement for itself triggered a recursion limit exceeded error, though the statement involves no recursion. (Bug#21416)

  • mysqldump did not add version-specific comments around WITH PARSER and TABLESPACE ... STORAGE DISK clauses for CREATE TABLE statements, causing the dump file to fail when loaded into older servers. (Bug#20841)

  • BIN(), OCT(), and CONV() did not work with BIT values. (Bug#15583)

  • The optimizer could produce an incorrect result after AND with collations such as latin1_german2_ci, utf8_czech_ci, and utf8_lithianian_ci. (Bug#9509)

  • The server could crash for the second execution of a function containing a SELECT statement that uses an aggregating IN subquery. (Bug#21493)

  • UPGRADE was treated as a reserved word, although it is not. (Bug#21772)

  • Database and table names have a maximum length of 64 characters (even if they contain multi-byte characters), but were being truncated to 64 bytes. (Bug#21432) An additional fix was made in MySQL 5.1.18.

  • Usernames have a maximum length of 16 characters (even if they contain multi-byte characters), but were being truncated to 16 bytes. (Bug#20393)

  • A query could produce different results with and without and index, if the WHERE clause contained a range condition that used an invalid DATETIME constant. (Bug#16249)

  • COUNT(*) queries with ORDER BY and LIMIT could return the wrong result. (Bug#21787)

    Note: This problem was introduced by the fix for Bug#9676, which limited the rows stored in a temporary table to the LIMIT clause. This optimization is not applicable to non-group queries with aggregate functions. The current fix disables the optimization in such cases.

  • Memory overruns could occur for certain kinds of subqueries. (Bug#21477)

  • Adding ORDER BY to a SELECT DISTINCT(expr) query could produce incorrect results. (Bug#21456)

  • Memory used by scheduled events was not freed when the events were dropped. (Bug#18683)

  • A scheduled event that took longer to execute than the length of time scheduled between successive executions could 鈥skip鈥 executions. For example, an event defined with EVERY 1 SECOND 鈥 but which required longer than 1 second to complete 鈥 might be executed only once every 2 seconds. (Bug#16417)

  • When used in the DO clause of a CREATE EVENT statement, the statements CREATE EVENT, CREATE FUNCTION, and CREATE PROCEDURE caused the server to crash. (These statements are not permitted inside CREATE EVENT.) (Bug#16409, Bug#18896)

  • A subselect used in the ON SCHEDULE clause of a CREATE EVENT or ALTER EVENT statement caused the server to crash, rather than producing an error as expected. (Bug#16394)

  • mysql displayed an empty string for NULL values. (Bug#21618)

  • mysql_upgrade produced a malformed upgrade_defaults file by overwriting the [client] group header with a password option. This prevented mysqlcheck from running successfully when invoked by mysql_upgrade. (Bug#21011)

  • mysql_config --libmysqld-libs did not produce any SSL options necessary for linking libmysqld with SSL support enabled. (Bug#21239)

  • yaSSL had a conflicting definition for socklen_t on hurd-i386 systems. (Bug#22326)

  • On Windows, inserting into a MERGE table after renaming an underlying MyISAM table caused a server crash. (Bug#20789)

  • character_set_results can be NULL to signify 鈥no conversion,鈥 but some code did not check for NULL, resulting in a server crash. (Bug#21913)

  • If a partitioned InnoDB table contained an AUTO_INCREMENT column, a SHOW statement could cause an assertion failure with more than one connection. (Bug#20493)

  • Running InnoDB with many concurrent threads could cause memory corruption and a seg fault due to a bug introduced in MySQL 5.1.11. (Bug#20213)

  • Using DROP TABLE with concurrent queries causes mysqld to crash. (Bug#21784)

  • The ExtractValue() function did not accept XML tag names containing a period (.) character. (Bug#20795)

  • For table-format output, mysql did not always calculate columns widths correctly for columns containing multi-byte characters in the column name or contents. (Bug#17939)

  • Identifiers with embedded escape characters were not handled correctly by some SHOW statements due to some old code that was doing some extra unescaping. (Bug#19874)

  • InnoDB was slow with more than 100,000 .idb files. (Bug#21112)

  • SHOW INNODB STATUS contained some duplicate output. (Bug#21113)

  • After an INSERT ... ON DUPLICATE KEY UPDATE statement that updated an existing row, LAST_INSERT_ID() could return a value not in the table. (Bug#11460)

  • Selecting from INFORMATION_SCHEMA.FILES could crash the server. (Bug#21676)

  • Using cursors with READ COMMITTED isolation level could cause InnoDB to crash. (Bug#19834)

  • A server or network failure with an open client connection would cause the client to hang even though the server was no longer available. (Bug#9678)

  • Using ALTER TABLE ... REORGANIZE PARTITIONS to reduce the number of subpartitions to 1 caused the server to crash. (Bug#21210)

  • NDB Cluster: Data nodes added while the cluster was running in single user mode were all assigned node ID 0, which could later cause multiple node failures. Adding of nodes in single user mode is no longer possible. (Bug#20395)

  • NDB Cluster: Attempting to create an NDB table on a MySQL with an existing non-Cluster table with the same name in the same database could result in data loss or corruption. Now, if such a table is encountered during autodiscovery, a warning is written to the error log of the affected mysqld, and the local table is overwritten. (Bug#21378)

  • NDB Cluster (NDB API): Inacivity timeouts for scans were not correctly handled. (Bug#23107)

  • NDB Cluster (NDB API): Attempting to read a nonexistent tuple using Commit mode for NdbTransaction::execute() caused node failures. (Bug#22672)

  • NDB Cluster (NDB API): The inclusion of my_config.h in NdbApi.h required anyone wishing to write NDB API applications against MySQL 5.1 to have a complete copy of the 5.1 sources. (Bug#21253)

  • NDB Cluster (NDB API): The NdbOperation::getBlobHandle() method, when called with the name of a nonexistent column, caused a segmentation fault. (Bug#21036)

  • NDB Cluster: The --help output from NDB binaries did not include file-related options. (Bug#21994)

  • NDB Cluster: The node recovery algorithm was missing a version check for tables in the ALTER_TABLE_COMMITTED state (as opposed to the TABLE_ADD_COMMITTED state, which has the version check). This could cause inconsistent schemas across nodes following node recovery. (Bug#21756)

  • NDB Cluster: The output for the --help option used with NDB executable programs (ndbd, ndb_mgm, ndb_restore, ndb_config, and so on) referred to the Ndb.cfg file, instead of my.cnf. (Bug#21585)

  • NDB Cluster: Partition distribution keys were updated only for the primary and starting replicas during node recovery. This could lead to node failure recovery for clusters having an odd number of replicas. (Bug#21535)

    Note: We recommend values for NumberOfReplicas that are even powers of 2, for best results.

  • NDB Cluster: The ndb_mgm management client did not set the exit status on errors, always returning 0 instead. (Bug#21530)

  • NDB Cluster: Cluster logs were not rotated following the first rotation cycle. (Bug#21345)

  • NDB Cluster: Condition pushdown did not work correctly with DATETIME columns. (Bug#21056)

  • NDB Cluster: Under some circumstances, local checkpointing would hang, keeping any unstarted nodes from being started. (Bug#20895)

  • NDB Cluster: Using an invalid node ID with the management client STOP command could cause ndb_mgm to hang. (Bug#20575)

  • NDB Cluster: In some cases where SELECT COUNT(*) from an NDB table should have yielded an error, MAX_INT was returned instead. (Bug#19914)

  • NDB Cluster: Following the restart of an MGM node, the Cluster management client did not automatically reconnect. (Bug#19873)

  • NDB Cluster: Error messages given when trying to make online changes parameters such as NoOfReplicas thast can only be changed via a complete shutdown and restart of the cluster did not indicate the true nature of the problem. (Bug#19787)

  • NDB Cluster: ndb_restore did not always make clear that it had recovered successfully from temporary errors while restoring a cluster backup. (Bug#19651)

  • NDB Cluster: In rare situations with resource shortages, a crash could result from insufficient IndexScanOperations. (Bug#19198)

  • NDB Cluster: ndb_mgm -e show | head would hang after displaying the first 10 lines of output. (Bug#19047)

  • NDB Cluster: The error returned by the cluster when too many nodes were defined did not make clear the nature of the problem. (Bug#19045)

  • NDB Cluster: A problem with takeover during a system restart caused ordered indexes to be rebuilt incorrectly. This also adversely affected Cluster Replication. (Bug#15303)

  • NDB Cluster: Some queries involving joins on very large NDB tables could crash the MySQL server. (Bug#21059)

  • NDB Cluster (Disk Data): mysqldump did not back up tablespace or log file group information for Disk Data tables correctly. (Specifically, UNDO_BUFFER_SIZE and INITIAL_SIZE values were misreported.) Trying to restore from such a backup would produce error 1296 (Got error 1504 'Out of logbuffer memory' from NDB). (Bug#20809)

  • NDB Cluster (Disk Data): The INFORMATION_SCHEMA.FILES table showed incorrect values in the EXTENT_SIZE, FREE_EXTENTS, and TOTAL_EXTENTS columns for UNDO log files. (Bug#20073)

  • NDB Cluster (Disk Data): Deletes from Disk Data tables used a non-optimal scan to find the rows to be deleted, resulting in poor performance. The fix causes disk order rather than memory order to be used, and can improve performance of Disk Data deletes by up to ~300% in some cases. (Bug#17929)

  • NDB Cluster: A scan timeout returned Error 4028 (Node failure caused abort of transaction) instead of Error 4008 (Node failure caused abort of transaction...). (Bug#21799)

  • NDB Cluster: The message Error 0 in readAutoIncrementValue(): no Error was written to the error log whenever SHOW TABLE STATUS was performed on a Cluster table that did not have an AUTO_INCREMENT column. (Bug#21033)

  • NDB Cluster (Direct APIs): The storage/ndb directory was missing from the server binary distribution, making it impossible to compile NDB API and MGM API applications. This directory can be found as /usr/include/storage/ndb after installing that distribution. (Bug#21955)

  • NDB Cluster: ndb_size.pl and ndb_error_reporter were missing from RPM packages. (Bug#20426)

  • The ndb_mgm program was included in both the MySQL-ndb-tools and MySQL-ndb-management RPM packages, resulting in a conflict if both were installed. Now ndb_mgm is included only in MySQL-ndb-tools. (Bug#21058)

  • libmysqld produced some warnings to stderr which could not be silenced. These warnings now are suppressed. (Bug#13717)

  • If a column definition contained a character set declaration, but a DEFAULT value began with an introducer, the introducer character set was used as the column character set. (Bug#20695)

  • If a query had a condition of the form tableX.key = tableY.key, which participated in equality propagation and also was used for ref access, then early ref-access NULL filtering was not peformed for the condition. This could make query execution slower. (Bug#19649)

  • The optimizer sometimes produced an incorrect row-count estimate after elimination of const tables. This resulted in choosing extremely inefficient execution plans in same cases when distribution of data in joins were skewed. (Bug#21390)

  • Query results could be incorrect if the WHERE clause contained t.key_part NOT IN (val_list), where val_list is a list of more than 1000 constants. (Bug#21282)

  • STR_TO_DATE() sometimes would return NULL if the %D format specifier was not the last specifier in the format string. (Bug#20987)

  • On Windows, a definition for mysql_set_server_option() was missing from the C client library. (Bug#16513)

  • The myisam_stats_method variable was mishandled when set from an option file or on the command line. (Bug#21054)

  • The optimizer assumed that if (a=x AND b=x) is true, (a=x AND b=x) AND a=b is also true. But that is not always so if a and b have different data types. (Bug#21159)

  • InnoDB did not honor IGNORE INDEX, which prevented using IGNORE INDEX in cases where an index sort would be slower than a filesort. (Bug#21174)

  • For connections that required a SUBJECT value, a check was performed to verify that the value was correct, but the connection was not refused if not. (Bug#20411)

  • Some Linux-x86_64-icc packages (of previous releases) mistakenly contained 32-bit binaries. Only ICC builds are affected, not gcc builds. Solaris and FreeBSD x86_64 builds are not affected. (Bug#22238)

  • INSERT ... SELECT sometimes generated a spurious Column count doesn't match value count error. (Bug#21774)

  • Some user-level errors were being written to the server's error log, which is for server errors. (Bug#20402)

  • to the client could have an empty column name. When using tables created under MySQL 4.1 with a 5.0 server, if the tables contained VARCHAR columns, for some queries the metadata sent to the client could have an empty column name. (Bug#14897)

  • On 64-bit systems, use of the cp1250 character set with a primary key column in a LIKE clause caused a server crash for patterns having letters in the range 128..255. (Bug#19741)

  • ORDER BY RAND() LIMIT 1 always set a user variable to the last possible value from the table. (Bug#16861)

  • N'xxx' and _utf8'xxx' were not treated as equivalent because N'xxx' failed to unescape backslashes (\) and doubled apostrophe/single quote characters (''). (Bug#17313)

  • A subquery in the WHERE clause of the outer query and using IN and GROUP BY returned an incorrect result. (Bug#16255)

  • When NOW() was used in a BETWEEN clause of the definition for a view, it was replaced with a constant in the view. (Bug#15950)

  • A stored procedure with a CONTINUE handler that encountered an error continued to execute a statement that caused an error, rather with the next statement following the one that caused the error. (Bug#8153)

  • libmysqlclient defined a symbol BN_bin2bn which belongs to OpenSSL. This could break applications that also linked against OpenSSL's libcrypto library. The fix required correcting an error in a build script that was failing to add rename macros for some functions. (Bug#21930)

  • Queries that used the index_merge and sort_union methods to access an InnoDB table could produce inaccurate results. This issue was introduced in MySQL 5.1.10 when a new handler and bitmap interface was implemented. (Bug#21277)

  • The SELECT privilege was required for an insert on a view, instead of the INSERT privilege. (Bug#21261)

    Note: This fixes a regression that was introduced by the fix for Bug#20989.

  • Running SHOW MASTER LOGS at the same time as binary log files were being switched would cause mysqld to hang. (Bug#21965)

  • Building mysql on Windows with CMake 2.4 would fail to create libmysqld correctly. (Bug#20907)

  • The server's handling of the number of partitions or subpartitions specified in a PARTITIONS or SUBPARTITIONS clause was changed. Beginning with this release, the number of partitions must:

    • be a positive, non-zero integer

    • not have any leading zeroes

    • not be an expression

    Also beginning with this version, no attempt is made to convert, truncate, or evaluate a PARTITIONS or SUBPARTITIONS value; instead, the CREATE TABLE or ALTER TABLE statement containing the PARTITIONS or SUBPARTITIONS clause now fails with an appropriate error message. (Bug#15890)

  • A misleading error message was displayed when attempting to define a unique key that was not valid for a partitioned table. (Bug#21862)

  • Errors could be generated during the execution of certain prepared statements that ran queries on partitioned tables. (Bug#21658)

  • Using relative paths for DATA DIRECTORY or INDEX DIRECTORY with a partitioned table generated a warning rather than an error, and caused 鈥junk鈥 files to be created in the server's data directory. (Bug#21350)

  • Using EXPLAIN PARTITIONS with a query on a table whose partitioning expression was based on the value of a DATE column could sometimes cause the server to crash. (Bug#21339)

  • Running SHOW TABLE STATUS on any InnoDB table having at least one record could crash the server. Note that this was not due to any issue in the InnoDB storage engine, but rather with AUTO_INCREMENT handling in the partitioning code 鈥 however, the table did not have to have an AUTO_INCREMENT column for the bug to manifest. (Bug#21173)

  • Some ALTER TABLE statements affecting a table's subpartitioning could hang. (Bug#21143)

  • Scheduled events that invoked stored procedures executing DDL operations on partitioned tables could crash the server. (Bug#20548)

  • The yaSSL library bundled with libmysqlclient had some conflicts with OpenSSL. Now macros are used to rename the conflicting symbols to have a prefix of ya. (Bug#19810)

  • It is possible to create MERGE tables into which data cannot be inserted (by not specifying a UNION clause. However, when an insert was attempted, the error message was confusing. Now an error occurs indicating that the table is read-only. (Bug#17766)

  • User-created tables having a name beginning with #sql were not visible to SHOW TABLES and could collide with internal temporary table names. Now they are not hidden and do not collide. (Bug#1405)

  • A NUL byte within a prepared statement string caused the rest of the string not to be written to the query log, allowing logging to be bypassed. (Bug#21813)

  • mysql_upgrade created temporary files in a possibly insecure way. (Bug#21224)

  • Some prepared statements caused a server crash when executed a second time. (Bug#21166)

  • With query_cache_type set to 0, RESET QUERY CACHE was very slow and other threads were blocked during the operation. Now a cache reset is faster and non-blocking. (Bug#21051)

  • When DROP DATABASE or SHOW OPEN TABLES was issued while concurrently issuing DROP TABLE (or RENAME TABLE, CREATE TABLE LIKE or any other statement that required a name lock) in another connection, the server crashed. (Bug#19403, Bug#21216)

  • Use of zero-length variable names caused a server crash. (Bug#20908)

  • Prepared statements caused general log and server memory corruption. (Bug#14346)

  • mysqldump incorrectly tried to use LOCK TABLES for tables in the INFORMATION_SCHEMA database. (Bug#21527)

  • Use of the --prompt option or prompt command caused mysql to be unable to connect to the Instance Manager. (Bug#17485)

  • The server crashed if it tried to access a CSV table for which the data file had been removed. (Bug#15205)

  • CREATE USER did not respect the 16-character username limit. (Bug#10668)

  • Creating a partitioned table that used the InnoDB storage engine and then restarting mysqld with --skip-innodb caused MySQL to crash. (Bug#20871)

  • In mixed-format binary logging mode, stored functions, triggers, and views that use functions in their body that require row-based logging did not replicate reliably because the logging did not switch from statement-based to row-based format. For example, INSERT INTO t SELECT FROM v, where v is a view that selects UUID() could cause problems. This limitation has been removed. (Bug#20930)

  • For user-defined functions created with CREATE FUNCTION, the DEFINER clause is not legal, but no error was generated. (Bug#21269)

  • mysqld --flush failed to flush MyISAM table changes to disk following an UPDATE statement for which no updated column had an index. (Bug#20060)

  • In mixed-format binary logging mode, stored functions, triggers, and views that use functions in their body that require row-based logging did not replicate reliably because the logging did not switch from statement-based to row-based format. For example, INSERT INTO t SELECT FROM v, where v is a view that selects UUID() could cause problems. This limitation has been removed. (Bug#20930)

  • When not running in strict mode, the server failed to convert the invalid years portion of a DATE or DATETIME value to '0000' when inserting it into a table. (Bug#19370)

    This patch was reverted in MySQL 5.1.18.

  • The dropping of a temporary table whose name contained a backtick ('`') character was not correctly written to the binary log, which also caused it not to be replicated correctly. (Bug#19188)

  • Intermediate tables created during the execution of an ALTER TABLE statement were visible in the output of SHOW TABLES. (Bug#18775)

  • When setting a column to its implicit default value as the result of inserting a NULL into a NOT NULL column as part of a multi-row insert or LOAD DATA operation, the server returned a misleading warning message. (Bug#14770)

  • The --with-collation option was not honored for client connections. (Bug#7192)

  • Users who had the SHOW VIEW privilege for a view and privileges on one of the view's base table could not see records in INFORMATION_SCHEMA tables relating to the base table. (Bug#20543)

  • An issue with yaSSL prevented Connector/J clients from connecting to the server using a certificate. (Bug#19705)

  • Some server errors were not reported to the client, causing both to try to read from the connection until a hang or crash resulted. (Bug#16581)

  • FEDERATED tables raised invalid duplicate key errors when attempting on one server to insert rows having the same primary key values as rows that had been deleted from the linked table on the other server. (Bug#18764)

  • The C API failed to return a status message when invoking a stored procedure. (Bug#15752)

  • AUTHORS and CONTRIBUTORS were not treated as reserved words. (Bug#19939)

  • Stored procedures did not use the character set defined for the database in which they were created. (Bug#16676)

  • CREATE PROCEDURE, CREATE FUNTION, CREATE TRIGGER, and CREATE VIEW statements containing multi-line comments (/* ... */) could not be replicated. (Bug#20438)

  • The final parenthesis of a CREATE INDEX statement occurring in a stored procedure was omitted from the binary log when the stored procedure was called. (Bug#19207)

  • Attempting to insert a string of greater than 4096 bytes into a FEDERATED table resulted in the error ERROR 1296 (HY000) at line 2: Got error 10000 'Error on remote system: 1054: Unknown column 'string-value' from FEDERATED. This error was raised regardless of the type of column involved (VARCHAR, TEXT, and so on.) (Bug#17608)

  • Performance during an import on a table with a trigger that called a stored procedure was severely degraded. (Bug#21013)

  • Repeated DROP TABLE statements in a stored procedure could sometimes cause the server to crash. (Bug#19399)

  • On 64-bit Windows, a missing table generated error 1017, not the correct value of 1146. (Bug#21396)

  • The same trigger error message was produced under two conditions: The trigger duplicated an existing trigger name, or the trigger duplicated an existing combination of action and event. Now different messages are produced for the two conditions so as to be more informative. (Bug#10946)

  • The value returned by a stored function returning a string value was not of the declared character set. (Bug#16211)

  • FLUSH TABLES followed by a LOCK TABLES statement to lock a log table and a non-log table caused an infinite loop and high CPU use. Now FLUSH TABLES ignores log tables. To flush the log tables, use FLUSH LOGS instead. (Bug#20139)

  • If a filename was specified for the --log or --log-slow_queries options but the server was logging to tables and not files, the server produced no error message. (Bug#17599)

  • mysqlcheck tried to check views instead of ignoring them. (Bug#16502)

  • Long multiple-row INSERT statements could take a very long time for some multi-byte character sets. (Bug#15811)

  • For mysql, escaping with backslash sometimes did not work. (Bug#20103)

  • Under certain circumstances, AVG(key_val) returned a value but MAX(key_val) returned an empty set due to incorrect application of MIN()/MAX() optimization. (Bug#20954)

  • Using aggregate functions in subqueries yielded incorrect results under certain circumstances due to incorrect application of MIN()/MAX() optimization. (Bug#20792)

  • A query using WHERE column = constant OR column IS NULL did not return consistent results on successive invocations. The column in each part of the WHERE clause could be either the same column, or two different columns, for the effect to be observed. (Bug#21019)

  • The PASSWORD() function returned invalid results when used in some UNION queries. (Bug#16881)

  • USE did not refresh database privileges when employed to re-select the current database. (Bug#10979)

  • A query using WHERE NOT (column < ANY (subquery)) yielded a different result from the same query using the same column and subquery with WHERE (column > ANY (subquery)). (Bug#20975)

  • A user variable set to a value selected from an unsigned column was stored as a signed value. (Bug#7498)

  • SELECT statements using GROUP BY against a view could have missing columns in the output when there was a trigger defined on one of the base tables for the view. (Bug#20466)

  • A SELECT with a subquery that was bound to the outer query over multiple columns returned different results when a constant was used instead of one of the dependant columns. (Bug#18925)

  • InnoDB: Quoted Unicode identifiers were not handled correctly. This included names of tables, columns, and foreign keys. (Bug#18800)

  • A stored procedure that created and invoked a prepared statement was not executed when called in a mysqld init-file. (Bug#17843)

  • Using the extended syntax for TRIM() 鈥 that is, TRIM(... FROM ...) 鈥 in a SELECT statement defining a view caused an invalid syntax error when selecting from the view. (Bug#17526)

  • Assignments of values to variables of type TEXT were handled incorrectly in stored routines. (Bug#17225)

  • When performing a GROUP_CONCAT(), the server transformed BLOB columns VARCHAR columns, which could cause erroneous results when using Connector/J and possibly other MySQL APIs. (Bug#16712)

  • The type of the value returned by the VARIANCE() function varied according to the type of the input value. The function should always return a DOUBLE value. (Bug#10966)

  • Performing an INSERT on a view that was defined using a SELECT that specified a collation and a column alias caused the server to crash (Bug#21086).

  • A query of the form shown here caused the server to crash:

    SELECT * FROM t1 NATURAL JOIN (
        t2 JOIN (
            t3 NATURAL JOIN t4,
            t5 NATURAL JOIN t6
        )
        ON (t3.id3 = t2.id3 AND t5.id5 = t2.id5)
      );

    (Bug#21007)

  • myisam_ftdump would fail when trying to open a MyISAM index file that you did not have write permissions to access, even though the command would only be reading from the file. (Bug#17122)

  • REPLACE ... SELECT for a view required the INSERT privilege for tables other than the table being modified. (Bug#20989)

  • mysqldump sometimes did not select the correct database before trying to dump views from it, resulting in an empty result set that caused mysqldump to die with a segmentation fault. (Bug#21014)

  • With mixed-format binary logging, INSERT DELAYED statements were logged using statement-based logging, and they did not replicate properly for statements that used values such as UUID(), RAND(), or user-defined variables that require row-based logging. To correct this, the DELAYED handler thread how switches to row-based logging if the logging format is mixed. (Bug#20633, Bug#20649)

  • Using EXPLAIN PARTITIONS with a UNION query could crash the server. This could occur whether or not the query actually used any partitioned tables. (Bug#20484)

  • Partition pruning could cause incorrect results from queries, such missing rows, when the partitioning expression relied on a BIGINT UNSIGNED column. (Bug#20257)

  • The implementation for UNCOMPRESS() did not indicate that it could return NULL, causing the optimizer to do the wrong thing. (Bug#18539)

  • TIMESTAMPDIFF() examined only the date and ignored the time when the requested difference unit was months or quarters. (Bug#16226)

  • perror did not properly report NDB error codes. (Bug#16561)

  • mysqlimport sends a set @@character_set_database=binary statement to the server, but this is not understood by pre-4.1 servers. Now mysqlimport encloses the statement within a /*!40101 ... */ comment so that old servers will ignore it. (Bug#15690)

  • The character set was not being properly initialized for CAST() with a type like CHAR(2) BINARY, which resulted in incorrect results or even a server crash. (Bug#17903)

  • For ODBC compatibility, MySQL supports use of WHERE col_name IS NULL for DATE or DATETIME columns that are NOT NULL, to allow column values of '0000-00-00' or '0000-00-00 00:00:00' to be selected. However, this was not working for WHERE clauses in DELETE statements. (Bug#8143)

  • The --master-data option for mysqldump requires certain privileges, but mysqldump generated a truncated dump file without producing an appropriate error message or exit status if the invoking user did not have those privileges. (Bug#21215)

  • ALTER VIEW did not retain existing values of attributes that had been originally specified but were not changed in the ALTER VIEW statement. (Bug#21080)

  • mysql crashed for very long arguments to the connect command. (Bug#21042)

  • perror crashed on Solaris due to NULL return value of strerror() system call. (Bug#20145)

  • The query command for mysqltest did not work. (Bug#19890)

  • For certain queries, the server incorrectly resolved a reference to an aggregate function and crashed. (Bug#20868)

  • When executing a SELECT with ORDER BY on a view that is constructed from a SELECT statement containing a stored function, the stored function was evaluated too many times. (Bug#19862)

  • A SELECT that used a subquery in the FROM clause that did not select from a table failed when the subquery was used in a join. (Bug#21002)

  • Subqueries on INFORMATION_SCHEMA tables could erroneously return an empty result. (Bug#21231)

  • Issuing a SHOW CREATE FUNCTION or SHOW CREATE PROCEDURE statement without sufficient privileges could crash the mysql client. (Bug#20664)

  • In a view defined with SQL SECURITY DEFINER, the CURRENT_USER() function returned the invoker, not the definer. (Bug#20570)

  • DATE_ADD() and DATE_SUB() returned NULL when the result date was on the day '9999-12-31'. (Bug#12356)

  • For a DATE parameter sent via a MYSQL_TIME data structure, mysql_stmt_execute() zeroed the hour, minute, and second members of the structure rather than treating them as read-only. (Bug#20152)

  • The DATA DIRECTORY table option did not work for TEMPORARY tables. (Bug#8706)

  • If the files for an open table were removed at the OS level (external to the server), the server exited with an assertion failure. (Bug#16532)

  • Some memory leaks in the libmysqld embedded server were corrected. (Bug#16017)

  • With the auto_increment_increment system variable set larger than 1, if the next generated AUTO_INCREMENT value would be larger than the column's maximum value, the value would be clipped down to that maximum value and inserted, even if the resulting value would not be in the generated sequence. This could cause problems for master-master replication. Now the server clips the value down to the previous value in the sequence, which correctly produces a duplicate-key error if that value already exists in the column. (Bug#20524)

  • If a table on a slave server had a higher AUTO_INCREMENT counter than the corresponding master table (even though all rows of the two tables were identical), in some cases REPLACE or INSERT ... ON DUPLICATE KEY UPDATE would not replicate properly using statement-based logging. (Different values would be inserted on the master and slave.) (Bug#20188)

  • mysqlslap did not enable the CLIENT_MULTI_RESULTS flag when connecting, which is necessary for executing stored procedures. (Bug#20365)

  • When creating a table using CREATE...SELECT and a stored procedure, there would be a mismatch between the binary log and transaction cache which would cause a server crash. (Bug#21039)

  • When run with the --use-threads option, mysqlimport returned a random exit code. (Bug#21188)

  • The effect of a stored function or trigger that caused AUTO_INCREMENT values to be generated for multiple tables was not logged properly if statement-based logging was used. Only the first table's value was logged, causing replication to fail. Under mixed logging format, this is dealt with by switching to row-based logging for the function or trigger. For statement-based logging, this remains a problem. (Bug#19630)

  • Changing the definition of a DECIMAL column with ALTER TABLE caused loss of column values. (Bug#18014)

  • Under heavy load (executing more than 1024 simultaneous complex queries), a problem in the code that handles internal temporary tables could lead to writing beyond allocated space and memory corruption. Use of more than 1024 simultaneous cursors server wide also could lead to memory corruption. (This applies both to stored procedure and C API cursors.) (Bug#21206)

  • A race condition during slave server shutdown caused an assert failure. (Bug#20850)

  • mysqldump produced a malformed dump file when dumping multiple databases that contained views. (Bug#20221)

  • Partitions were represented internally as the wrong data type, which led in some cases to failures of queries such as SELECT COUNT(*) FROM INFORMATION_SCHEMA.PARTITIONS WHERE PARTITION_NAME = 'partition_name'. (Bug#20340)

  • Searches against a ZEROFILL column of a partitioned table could fail when the ZEROFILL column was part of the table's partitioning key. (Bug#20733)

  • In mixed binary logging mode, a temporary switch from statement-based logging to row-based logging occurs when storing a row that uses a function such as UUID() into a temporary table. However, temporary table changes are not written to the binary log under row-based logging, so the row does not exist on the slave. A subsequent select from the temporary table to a non-temporary table using statement-based logging works correctly on the master, but not on the slave where the row does not exist. The fix for this is that replication does not switch back from row-based logging to statement-based logging until there are no temporary tables for the session. (Bug#20499)

  • Re-executing a stored procedure with a complex stored procedure cursor query could lead to a server crash. (Bug#15217)

  • Views created from prepared statements inside of stored procedures were created with a definition that included both SQL_CACHE and SQL_NO_CACHE. (Bug#17203)

  • Updating a column of a FEDERATED table to NULL sometimes failed. (Bug#16494)

  • Performing INSERT ... SELECT ... JOIN ... USING without qualifying the column names caused ERROR 1052 "column 'x' in field list is ambiguous" even in cases where the column references were unambiguous. (Bug#18080)

  • Closing of temporary tables failed if binary logging was not enabled. (Bug#20919)

  • For statements that have a DEFINER clause such as CREATE TRIGGER or CREATE VIEW, long usernames or hostnames could cause a buffer overflow. (Bug#16899)

  • mysqldump would not dump views that had become invalid because a table named in the view definition had been dropped. Instead, it quit with an error message. Now you can specify the --force option to cause mysqldump to keep going and write a SQL comment containing the view definition to the dump output. (Bug#17371)

  • InnoDB (Partitioning): Updating an InnoDB table using HASH partitioning with a composite primary key would cause the server to hang. (Bug#20852)

  • Old partition and subpartition files were not always removed following ALTER TABLE ... REORGANIZE PARTITION statements. (Bug#20770)

  • Merging multiple partitions having subpartitions into a single partition with subpartitions, or splitting a single partition having subpartitions into multiple partitions with subpartitions, could sometimes crash the server. These issues were associated with a failure reported in the partition_range test. (Bug#20766, Bug#20767, Bug#20893, Bug#21357)

  • Some queries using ORDER BY ... DESC on subpartitioned tables could crash the server. (Bug#20389)

  • Referring to a stored function qualified with the name of one database and tables in another database caused a 鈥table doesn't exist鈥 error. (Bug#18444)

  • For NDB and possibly InnoDB tables, a BEFORE UPDATE trigger could insert incorrect values. (Bug#18437)

  • For multiple INSERT DELAYED statements executed in a batch by the delayed-insert handler thread, not all rows were written to the binary log. (Bug#20821)

  • Triggers on tables in the mysql database caused a server crash. Triggers for tables in this database now are disallowed. (Bug#18005, Bug#18361)

  • The length of the pattern string prefix for LIKE operations was calculated incorrectly for multi-byte character sets. As a result, the scanned range was wider than necessary if the prefix contained any multi-byte characters, and rows could be missing from the result set. (Bug#16674, Bug#18359)

  • Very complex SELECT statements could create temporary tables that were too big, but for which the temporary files did not get removed, causing subsequent queries to fail. (Bug#11824)

  • Multiple-table updates with FEDERATED tables could cause a server crash. (Bug#19773)

  • On Windows, terminating mysqld with Control-C could result in a crash during shutdown. (Bug#18235)

  • Renaming a database to itself caused a server crash. (Bug#19392)

  • For spatial data types, the server formerly returned these as VARSTRING values with a binary collation. Now the server returns spatial values as BLOB values. (Bug#10166)

  • Using tables from MySQL 4.x in MySQL 5.x, in particular those with VARCHAR fields and using INSERT DELAYED to update data in the table would result in either data corruption or a server crash. (Bug#16611, Bug#16218, Bug#17294)

  • Using SELECT and a table join while running a concurrent INSERT operation would join incorrect rows. (Bug#14400)

  • Using SELECT on a corrupt MyISAM table using the dynamic record format could cause a server crash. (Bug#19835)

  • Checking a MyISAM table (using CHECK TABLE) having a spatial index and only one row would wrongly indicate that the table was corrupted. (Bug#17877)

  • A Table ... doesn't exist error could occur for statements that called a function defined in another database. (Bug#17199)

  • SHOW GRANTS FOR CURRENT_USER did not return definer grants when executed in DEFINER context (such as within a stored prodedure defined with SQL SECURITY DEFINER), it returned the invoker grants. (Bug#15298)

  • Portions of statements related to partitioning were not surrounded by version-specific comments by mysqldump, breaking backwards compatibility for dump files. (Bug#19488)

  • A DELETE FROM table with no WHERE clause (deleting all rows) running concurrently with INSERT statements on a storage engine with row-level locking (such as NDB) could produce inconsistent results when using statement-based replication. (Bug#19066)

  • Concatenating the results of multiple constant subselects produced incorrect results. (Bug#16716)

  • The use of MIN() and MAX() on columns with an index prefix produced incorrect results in some queries. (Bug#18206)

  • The WITH CHECK OPTION was not enforced when a REPLACE statement was executed against a view. (Bug#19789)

  • For SELECT ... FOR UPDATE statements that used DISTINCT or GROUP BY over all key parts of a unique index (or primary key), the optimizer unnecessarily created a temporary table, thus losing the linkage to the underlying unique index values. This caused a Result set not updatable error. (The temporary table is unnecessary because under these circumstances the distinct or grouped columns must also be unique.) (Bug#16458)

  • A buffer overwrite error in Instance Manager caused a crash. (Bug#20622)

  • Re-execution of a prepared multiple-table DELETE statement that involves a trigger or stored function can result in a server crash. (Bug#19634)

  • On Windows, corrected a crash stemming from differences in Visual C runtime library routines from POSIX behavior regarding invalid file descriptors. (Bug#18275)

  • Creation of a view as a join of views or tables could fail if the views or tables are in different databases. (Bug#20482)

  • Use of MIN() or MAX() with GROUP BY on a ucs2 column could cause a server crash. (Bug#20076)

  • INSERT INTO ... SELECT ... LIMIT 1 could be slow because the LIMIT was ignored when selecting candidate rows. (Bug#9676)

  • Queries on tables that were partitioned by KEY and had a VARCHAR column as the partitioning key produced an empty result set. (Bug#20086)

  • The omission of leading zeros in dates could lead to erroneous results when these were compared with the output of certain date and time functions. (Bug#16377)

  • An invalid comparison between keys with index prefixes over multi-byte character fields could lead to incorrect result sets if the selected query execution plan used a range scan by an index prefix over a UTF8 character field. This also caused incorrect results under similar circumstances with many other character sets. (Bug#14896)

  • A prepared statement that altered partitioned table within a stored procedure failed with the error Unknown prepared statement handler. (Bug#17138)

  • A query selecting records from a single partition of a partitioned table and using ORDER BY ic DESC (where ic represents an indexed column) could cause errors or crash the server. (Bug#20583)

  • NDB Cluster (Disk Data): On some platforms, ndbd compiled with gcc 4 would crash when attempting to run CREATE LOGFILE GROUP. (Bug#21981)

  • NDB Cluster: Setting TransactionDeadlockDetectionTimeout to a value greater than 12000 would cause scans to deadlock, time out, fail to release scan records, until the cluster ran out of scan records and stopped processing. (Bug#21800)

  • NDB Cluster: Data was stored unevenly between partitions due to all BLOB data being placed in partition 0. (Bug#21690)

  • NDB Cluster: The server provided a non-descriptive error message when encountering a fatally corrupted REDO log. (Bug#21615)

  • NDB Cluster: A partial rollback could lead to node restart failures. (Bug#21536)

  • NDB Cluster: The failure of a unique index read due to an invalid schema version could be handled incorrectly in some cases, leading to unpredictable results. (Bug#21384)

  • NDB Cluster: In a cluster with more than 2 replicas, a manual restart of one of the data nodes could fail and cause the other nodes in its nodegroup to shut down. (Bug#21213)

  • NDB Cluster: When the redo buffer ran out of space, a Pointer too large error was raised and the cluster could become unusable until restarted with --initial. (Bug#20892)

  • NDB Cluster: In some situations with a high disk-load, writing of the redo log could hang, causing a crash with the error message GCP STOP detected. (Bug#20904)

  • NDB Cluster: A vague error message was returned when reading of both schema files occurred during a restart of the cluster. (Bug#20860)

  • NDB Cluster: The server did not honor the value set for ndb_cache_check_time in the my.cnf file. (Bug#20708)

  • NDB Cluster: The server failed with a non-descriptive error message when out of data memory. (Bug#18475)

  • NDB Cluster (Direct APIss): Invoking the MGM API function ndb_mgm_listen_event() caused a memory leak. (Bug#21671)

  • NDB Cluster: The management client ALL STATUS command could sometimes report the status of some data nodes incorrectly. (Bug#13985)

  • NDB Cluster (Disk Data): Trying to create a Disk Data table using a nonexistent tablespace or trying to drop a nonexistent data file from a tablespace produced an uninformative error message. (Bug#21751)

  • NDB Cluster (Disk Data): Errors could occur when dropping a data file during a node local checkpoint. (Bug#21710)

  • NDB Cluster (Disk Data): Creating a tablespace and log file group, then attempting to restart the cluster without using the --initial option and without having created any Disk Data tables could cause a forced shutdown of the cluster and raise a configuration error. (Bug#21172)

  • NDB Cluster: Responses to the ALL DUMP 1000 management client command were printed multiple times in the cluster log for each cluster node. (Bug#21044)

  • A memory leak was found when running ndb_mgm -e "SHOW". (Bug#21670)

  • NDB Cluster (Direct APIs): The MGM API function ndb_logevent_get_fd() was not actually implemented. (Bug#21129)

  • NDB Cluster: Restarting a data node while DDL operations were in progress on the cluster could cause other data nodes to fail. This could also lead to mysqld hanging or crashing under some circumstances. (Bug#21017, Bug#21050)

  • NDB Cluster: A cluster data node could crash when an ordered index became full before the table containing the index was full. (Bug#14935)

  • NDB Cluster: The repeated creating and dropping of a table would eventually lead to NDB Error 826, Too many tables and attributes ... Insufficient space. (Bug#20847)

  • NDB Cluster: REPLACE statements did not work correctly on an NDB table having both a primary key and a unique key. In such cases, proper values were not set for columns which were not explicitly referenced in the statement. (Bug#20728)

  • NDB Cluster: Trying to create or drop a table while a node was restarting caused the node to crash. This is now handled by raising an error. (Bug#18781)

  • NDB Cluster: A race condition could in some cirumstances following a DROP TABLE. (Bug#20897)

  • NDB Cluster: Running ndbd --nowait-nodes=id where id was the node ID of a node that was already running would fail with an invalid error message. (Bug#20419)

  • NDB Cluster: When stopping and restarting multiple data nodes, the last node to be restarted would sometimes hang in Phase 100. (Bug#19645)

  • NDB Cluster: The DATA_LENGTH and AVG_ROW_LENGTH columns of the INFORMATION_SCHEMA.TABLES table did not report the size of variable-width column values correctly. (Bug#18413)

    See Section聽22.2, 鈥淭he INFORMATION_SCHEMA TABLES Table鈥, for more information.

  • NDB Cluster: When attempting to restart the cluster following a data import, the cluster would fail during Phase 4 of the restart with Error 2334: Job buffer congestion. (Bug#20774)

  • NDB Cluster: A node failure during a scan could sometime cause the node to crash when restarting too quickly following the failure. (Bug#20197)

  • NDB Cluster: It was possible to use port numbers greater than 65535 for ServerPort in the config.ini file. (Bug#19164)

  • NDB Cluster (Replication): In some cases, a large number of MySQL servers sending requests to the cluster simultaneously could cause the cluster to crash. This could also be triggered by many NDB API clients making simultaneous event subscriptions or unsubscriptions. (Bug#20683)

  • NDB Cluster (Direct APIs): NdbScanOperation::readTuples() and NdbIndexScanOperation::readTuples() ignored the batch parameter. (Bug#20252)

  • NDB Cluster: Cluster system status variables were not updated. (Bug#11459)

  • NDB Cluster (Disk Data): Trying to create Disk Data tables when running the cluster in diskless mode would crash the cluster's data nodes. (Bug#20008)

    Note: Disk Data tables are now disabled when running in diskless mode.

  • NDB Cluster (Disk Data): A data file created on one tablespace could be dropped using ALTER TABLESPACE ... DROP DATAFILE on a different tablespace. (Bug#20053)

  • NDB Cluster: Truncating a table on one mysqld caused other mysqld processes in the cluster to return ERROR 1412 (HY000): Table definition has changed, please retry transaction on subsequent queries. (Bug#20705)

  • NDB Cluster: The cluster's data nodes would fail while trying to load data when NoOfFrangmentLogFiles was equal to 1. (Bug#19894)

  • NDB Cluster: A problem with error handling when ndb_use_exact_count was enabled could lead to incorrect values returned from queries using COUNT(). A warning is now returned in such cases. (Bug#19202)

  • NDB Cluster: Restarting a failed node could crash the cluster. (Bug#18782)

  • NDB Cluster (Disk Data): The failure of a CREATE TABLESPACE or CREATE LOGFILE GROUP statement did not revert all changes made prior to the point of failure. (Bug#16341)

  • NDB Cluster: Creating tables with variable-size columns caused DataMemory to be used but not freed when the tables were dropped. (Bug#20007)

  • NDB Cluster: Restoring a backup made using ndb_restore failed when the backup had been taken from a cluster whose data memory was full. (Bug#19852)

  • NDB Cluster: An excessive number of ALTER TABLE operations could cause the cluster to fail with NDB error code 773 (Out of string memory, please modify StringMemory). (Bug#19275)

  • NDB Cluster: TEXT columns in Cluster tables having both an explicit primary key and a unique key were not correctly updated by REPLACE statements. (Bug#19906)

  • NDB Cluster: Running out of DataMemory could sometimes crash ndbd and mysqld processes. (Bug#19185)

  • NDB Cluster (Replication): A node failure could send duplicate events, causing a mysqld replicating tables containing BLOBs to crash.

  • NDB Cluster (Disk Data): INFORMATION_SCHEMA.FILES records for UNDO files showed incorrect values in the EXTENT_SIZE, FREE_EXTENTS, and TOTAL_EXTENTS columns. (Bug#20073)

  • NDB Cluster: An internal formatting error caused some management client error messages to be unreadable. (Bug#20016)

  • NDB Cluster: Running management client commands while mgmd was in the process of disconnecting could cause the management server to fail. (Bug#19932)

  • NDB Cluster (NDBAPI): Update operations on blobs were not checked for illegal operations.

    Note: Read locks with blob update operations are now upgraded from read committed to read shared.

  • NDB Cluster: The management client ALL STOP command shut down mgmd processes (as well as ndbd processes). (Bug#18966)

  • NDB Cluster: Renaming of table columns was not supported as fast a ALTER TABLE for NDB tables. (Bug#20456)

  • NDB Cluster: Under some circumstances, repeated DDL operations on one mysqld could cause failure of a second mysqld attached to the same cluster. (Bug#19770)

  • NDB Cluster (Replication): One or more of the mysqld processes could fail when subjecting a Cluster replication setup with multiple mysqld processes on both the master and slave clusters to high loads. (Bug#19768)

  • NDB Cluster: LOAD DATA LOCAL failed to ignore duplicate keys in Cluster tables. (Bug#19496)

  • NDB Cluster: Repeated CREATE - INSERT - DROP operations tables could in some circumstances cause the MySQL table definition cache to become corrupt, so that some mysqld processes could access table information but others could not. (Bug#18595)

  • NDB Cluster (Disk Data): Running a large nbumber of scans on Disk Data could cause subsequent scans to perform poorly. (Bug#20334)

  • NDB Cluster (Disk Data): An issue with disk allocation could sometimes cause a forced shutdown of the cluster when running a mix of memory and Disk Data tables. (Bug#18780)

  • NDB Cluster: The mgm client command ALL CLUSTERLOG STATISTICS=15; had no effect. (Bug#20336)

  • NDB Cluster: Under certain conditions, a starting node could miss transactions, leading to inconsistencies between the primary and backup replicas. (Bug#19929)

  • NDB Cluster: An uncommitted row could sometimes be checkpointed and thus incorrectly included in a backup. (Bug#19928)

  • NDB Cluster: A DELETE of many rows immediately followed by an INSERT on the same table could cause the ndbd process on the backup replica to crash. (Bug#19293)

  • NDB Cluster: TRUNCATE TABLE failed to reset the AUTO_INCREMENT counter. (Bug#18864)

  • NDB Cluster: SELECT ... FOR UPDATE failed to lock the selected rows. (Bug#18184)

  • NDB Cluster: New mysqld processes were allowed to connect without a restart of the cluster, causing the cluster to crash. (Bug#13266)

  • NDB Cluster: The failure of a data node when preparing to commit a transaction (that is, while the node's status was CS_PREPARE_TO_COMMIT) could cause the failure of other cluster data nodes. (Bug#20185)

  • NDB Cluster: Renaming a table in such a way as to move it to a different database failed to move the table's indexes. (Bug#19967)

  • NDB Cluster: SHOW ENGINE NDB STATUS could sometimes return an incorrect value of 0 for the latest epoch, which could cause problems with synchronising the binlog. (Bug#20142)

  • NDB Cluster: A CREATE TABLE statement involving foreign key constraints raised an error rather than being silently ignored (see Section聽13.1.8, 鈥CREATE TABLE Syntax鈥). (Bug#18483)

    This bug affected Cluster in MySQL 5.1 only.

  • NDB Cluster (Replication): Data definition and data manipulation statements on different tables were not serialised correctly in the binlog. For example, there was no guarantee that a CREATE TABLE statement and an update on a different table would occur in the same order in the binlog as they did on the cluster being replicated. (Bug#18947)

  • NDB Cluster: Resources for unique indexes on Cluster table columns were incorrectly allocated, so that only one-fourth as many unique indexes as indicated by the value of UniqueHashIndexes could be created. (Bug#19623)

  • A cast problem caused incorrect results for prepared statements that returned float values when MySQL was compiled with gcc 4.0. (Bug#19694)

  • Some queries that used ORDER BY and LIMIT performed quickly in MySQL 3.23, but slowly in MySQL 4.x/5.x due to an optimizer problem. (Bug#4981)

  • mysql_upgrade was missing from binary MySQL distributions. (Bug#18516, Bug#20403, Bug#20556)

  • It was possible using ALTER EVENT ... RENAME ... to move an event to a database on which the user did not have the EVENT privilege. (Bug#18897)

  • A number of dependency issues in the RPM bench and test packages caused installation of these packages to fail. (Bug#20078)

  • Queries using an indexed column as the argument for the MIN() and MAX() functions following an ALTER TABLE .. DISABLE KEYS statement returned Got error 124 from storage engine until ALTER TABLE ... ENABLE KEYS was run on the table. (Bug#20357)

  • A redundant table map event could be generated in the binary log when there were no actual changes to a table being replicated. In addition, a slave failed to stop when attempting to replicate a table that did not exist on the slave. (Bug#18948)

  • Multiple calls to a stored procedure that altered a partitioned MyISAM table would cause the server to crash. (Bug#19309)

  • Adding an index to a partitioned table that had been created using AUTO_INCREMENT = value caused the AUTO_INCREMENT value to be reset. (Bug#19281)

  • A CREATE TABLE that produced a The PARTITION function returns the wrong type error also caused an Incorrect information in file to be printed to STDERR, and a junk file to be left in the database directory. (Bug#16000)

  • Nested natural joins worked executed correctly when executed as a non-prepared statement could fail with an Unknown column 'col_name' in 'field list' error when executed as a prepared statement, due to a name resolution problem. (Bug#15355)

  • The max_length metadata value for columns created from CONCAT() could be incorrect when the collation of an argument differed from the collation of the CONCAT() itself. In some contexts such as UNION, this could lead to truncation of the column contents. (Bug#15962)

  • The MD5() and SHA() functions treat their arguments as case-sensitive strings. But when they are compared, their arguments were compared as case-insensitive strings, which leads to two function calls with different arguments (and thus different results) compared as being identical. This can lead to a wrong decision made in the range optimizer and thus to an incorrect result set. (Bug#15351)

  • For BOOLEAN mode full-text searches on non-indexed columns, NULL rows generated by a LEFT JOIN caused incorrect query results. (Bug#14708)

  • If the general log table reached a large enough file size (27GB), SELECT COUNT(*) on the table caused a server crash. (Bug#17589)

  • Identifiers could not contain bytes with a value of 255, though that should be allowed as of the identifier-encoding changes made in MySQL 5.1.6. (Bug#12982)

  • BIT columns in a table could cause joins that use the table to fail. (Bug#18895)

  • A UNION over more than 128 SELECT statements that use an aggregate function failed. (Bug#18175)

  • InnoDB unlocked its data directory before committing a transaction, potentially resulting in non-recoverable tables if a server crash occurred before the commit. (Bug#19727)

  • Multiple-table DELETE statements containing a subquery that selected from one of the tables being modified caused a server crash. (Bug#19225)

  • With settings of read_buffer_size >= 2G and read_rnd_buffer_size >=2G, LOAD DATA INFILE failed with no error message or caused a server crash for files larger than 2GB. (Bug#12982)

  • REPLACE statements caused activation of UPDATE triggers, not DELETE and INSERT triggers. (Bug#13479)

  • The thread for INSERT DELAYED rows was maintaining a separate AUTO_INCREMENT counter, resulting in incorrect values being assigned if DELAYED and non-DELAYED inserts were mixed. (Bug#20195)

  • mysqldump wrote an extra pair of DROP DATABASE and CREATE DATABASE statements if run with the --add-drop-database option and the database contained views. (Bug#17201)

  • Shutting down a slave in a replication scenario where temporary tables are in use would cause the slave to produce a core dump. (Bug#19881)

  • When a statement is executed that does not generate any rows, an extra table map event and associated binrows event would be generated and written to the binary log. (Bug#19995)

  • File size specifications for InnoDB data files were case sensitive. (Bug#19609)

  • Compilation on Windows would fail if row based replication was disabled using --without-row-based-replication. (Bug#16837)

  • InnoDB did not increment the handler_read_prev counter. (Bug#19542)

  • In the INFORMATION_SCHEMA.FILES table, the INITIAL_SIZE, MAXIMUM_SIZE, and AUTOEXTEND_SIZE columns incorrectly were being stored as VARCHAR rather than BIGINT. (Bug#19544).

  • For mysqld, Valgrind revealed problems that were corrected: Possible uninitialized data in a string comparison (Bug#20783); memory corruption in replication slaves when switching databases (Bug#19022); syscall write parameter pointing to uninitialized byte (Bug#20579); uninitialized doublewrite memory in InnoDB (Bug#20791).

  • For ndb_mgmd, Valgrind revealed problems that were corrected: A memory leak (Bug#19318); a dependency on an uninitialized variable (Bug#20333).

  • An update that used a join of a table to itself and modified the table on both sides of the join reported the table as crashed. (Bug#18036)

  • SSL connections using yaSSL on OpenBSD could fail. (Bug#19191)

  • Following a failed attempt to add an index to an ARCHIVE table, it was no longer possible to drop the database in which the table had been created. (Bug#17310)

  • Using ALTER TABLE ... ENGINE = x, where x was not a storage engine supported by the server, would cause mysqld to crash. (Bug#20397)

  • Defining a table partitioned by LIST with a single PARTITION ... VALUES IN (NULL) clause could lead to server crashes, particularly with queries having WHERE conditions comparing the partitioning key with a constant. (Bug#19801 / Bug#20268)

  • Values greater than 2 gigabytes used in the VALUES LESS THAN clause of a table partitioned by RANGE were treated as negative numbers. (Bug#16002)

  • The fill_help_tables.sql file did not load properly if the ANSI_QUOTES SQL mode was enabled. (Bug#20542)

  • The fill_help_tables.sql file did not contain a SET NAMES 'utf8' statement to indicate its encoding. This caused problems for some settings of the MySQL character set such as big5. (Bug#20551)

  • The --default-storage-engine server option did not work. (Bug#20168)

  • The MySQL server startup script /etc/init.d/mysql (created from mysql.server) is now marked to ensure that the system services ypbind, nscd, ldap, and NTP are started first (if these are configured on the machine). (Bug#18810)

  • For a reference to a non-existent index in FORCE INDEX, the error message referred to a column, not an index. (Bug#17873)

  • The EGNINE clause was displayed in the output of SHOW CREATE TABLE for partitioned tables when the SQL mode included no_table_options. (Bug#19695)

  • ALTER TABLE ... COALESCE PARTITION did not delete the files associated with the partitions that were removed. (Bug#19305)

  • ALTER TABLE ... REBUILD PARTITION could cause the server to hang or crash. (Bug#19122)

  • Some yaSSL public function names conflicted with those from OpenSSL, causing conflicts for applications that linked against both OpenSSL and a version of libmysqlclient that was built with yaSSL support. The yaSSL public functions now are renamed to avoid this conflict. (Bug#19575)

  • CHECK TABLE on a MyISAM table briefly cleared its AUTO_INCREMENT value, while holding only a read lock. Concurrent inserts to that table could use the wrong AUTO_INCREMENT value. CHECK TABLE no longer modifies the AUTO_INCREMENT value. (Bug#19604)

  • If there is a global read lock, CREATE DATABASE, RENAME DATABASE, and DROP DATABASE could deadlock. (Bug#19815)

  • EXPLAIN PARTITIONS would produce illegible output in the partitions column if the length of text to be displayed in that column was too long. This could occur when very many partitions were defined for the table, partitions were given very long names, or due to a combination of the two. (Bug#19684)

  • Trying to execute a query having a WHERE clause using int_col = "string_value" OR int_col IS NULL on a partitioned table whose partitioning or subpartitioning function used the integer column int_col would crash the server. (Bug#19055)

  • On Linux, libmysqlclient when compiled with yaSSL using the icc compiler had a spurious dependency on C++ libraries. (Bug#20119)

  • In MySQL 5.1.11, the --with-openssl and --with-yassl options were replaced by --with-ssl. But no message was issued if the old options were given. Now configure produces a message indicating that the new option should be used and exits. (Bug#20002)

  • Grant table modifications sometimes did not refresh the in-memory tables if the hostname was '' or not specified. (Bug#16297)

  • Invalid escape sequences in option files caused MySQL programs that read them to abort. (Bug#15328)

  • Using ALTER TABLE on a subpartitioned table caused the server to crash. (Bug#19067)

  • For a table having LINEAR HASH subpartitions, the LINEAR keyword did not appear in the SUBPARTITION_METHOD column of the INFORMATION_SCHEMA.PARTITIONS table. (Bug#20161)

  • Race conditions on certain platforms could cause the Instance Manager to fail to initialize. (Bug#19391)

  • ALTER TABLE on a table created prior to 5.0.3 would cause table corruption if the ALTER TABLE did one of the following:

    • Change the default value of a column.

    • Change the table comment.

    • Change the table password.

    (Bug#17001)

  • An ALTER TABLE operation that does not need to copy data, when executed on a table created prior to MySQL 4.0.25, could result in a server crash for subsequent accesses to the table. (Bug#19192)

  • The binary log lacked character set information for table name when dropping temporary tables. (Bug#14157)

  • A B-TREE index on a MEMORY table erroneously reported duplicate entry error for multiple NULL values. (Bug#12873)

  • Race conditions on certain platforms could cause the Instance Manager to try to restart the same instance multiple times. (Bug#18023)

  • OPTIMIZE TABLE and REPAIR TABLE yielded incorrect messages or warnings when used on partitioned tables. (Bug#17455)

  • Selecting data from a MEMORY table with a VARCHAR column and a HASH index over it returned only the first row matched. (Bug#18233)

  • RPM packages had spurious dependencies on Perl modules and other programs. (Bug#13634)

C.1.8.聽Changes in release 5.1.11 (26 May 2006)

This is a new Beta development release, fixing recently discovered bugs.

This section documents all changes and bug fixes that have been applied since the last official MySQL release. If you would like to receive more fine-grained and personalized update alerts about fixes that are relevant to the version and features you use, please consider subscribing to MySQL Enterprise (a commercial MySQL offering). For more details please see http://www.mysql.com/products/enterprise.

Functionality added or changed:

  • Incompatible change: The Event Scheduler can now be in one of three states (on, off, or the new suspended state). In addition, due to the fact that SET GLOBAL event_scheduler; now acts in a synchronous rather than asynchronous manner, the Event Scheduler thread can be no longer be activated or deactivated at run time. (Bug#17619)

    For more information regarding these changes, see Section聽20.1, 鈥淓vent Scheduler Overview鈥.

  • Previously, to build MySQL from source with SSL support enabled, you would invoke configure with either the --with-openssl or --with-yassl option. Those options both have been replaced by the --with-ssl option. By default, --with-ssl causes the bundled yaSSL library to be used. To select OpenSSL instead, give the option as --with-ssl=path, where path is the directory where the OpenSSL header files and libraries are located.

  • Added the --ssl-verify-server-cert option to MySQL client programs. This option causes the server's Common Name value in its certificate to be verified against the hostname used when connecting to the server, and the connection is rejected if there is a mismatch. Added MYSQL_OPT_SSL_VERIFY_SERVER_CERT option for the mysql_options() C API function to enable this verification. This feature can be used to prevent man-in-the-middle attacks. Verification is disabled by default. (Bug#17208)

  • Added the ssl_ca, ssl_capath, ssl_cert, ssl_cipher, and ssl_key system variables, which display the values given via the corresponding command options. See Section聽5.8.7.3, 鈥淪SL Command Options鈥. (Bug#19606)

  • NDB Cluster: The limit of 2048 ordered indexes per cluster has been lifted. There is now no upper limit on the number of ordered indexes (including AUTO_INCREMENT columns) that may be used. (Bug#14509)

  • Added the log_queries_not_using_indexes system variable. (Bug#19616)

  • Added the --angel-pid-file option to mysqlmanager for specifying the file in which the angel process records its process ID when mysqlmanager runs in daemon mode. (Bug#14106)

  • The ENABLE KEYS and DISABLE KEYS clauses for the ALTER TABLE statement are now supported for partitioned tables. (Bug#19502)

  • It is now possible to use NEW.var_name values within triggers as INOUT parameters to stored procedures. (Bug#14635)

  • The default for the innodb_thread_concurrency system variable was changed to 8. (Bug#15868)

  • mysql_explain_log (a third-party program) is no longer included in MySQL distributions.

Bugs fixed:

  • Security fix: An SQL-injection security hole has been found in multi-byte encoding processing. The bug was in the server, incorrectly parsing the string escaped with the mysql_real_escape_string() C API function. (CVE-2006-2753, Bug#8378)

    This vulnerability was discovered and reported by Josh Berkus and Tom Lane as part of the inter-project security collaboration of the OSDB consortium. For more information about SQL injection, please see the following text.

    Discussion: An SQL-injection security hole has been found in multi-byte encoding processing. An SQL-injection security hole can include a situation whereby when a user supplied data to be inserted into a database, the user might inject SQL statements into the data that the server will execute. With regards to this vulnerability, when character set unaware-escaping is used (for example, addslashes() in PHP), it is possible to bypass the escaping in some multi-byte character sets (for example, SJIS, BIG5 and GBK). As a result, a function such as addslashes() is not able to prevent SQL-injection attacks. It is impossible to fix this on the server side. The best solution is for applications to use character set-aware escaping offered by a function such mysql_real_escape_string().

    However, a bug was detected in how the MySQL server parses the output of mysql_real_escape_string(). As a result, even when the character set-aware function mysql_real_escape_string() was used, SQL injection was possible. This bug has been fixed.

    Workarounds: If you are unable to upgrade MySQL to a version that includes the fix for the bug in mysql_real_escape_string() parsing, but run MySQL 5.0.1 or higher, you can use the NO_BACKSLASH_ESCAPES SQL mode as a workaround. (This mode was introduced in MySQL 5.0.1.) NO_BACKSLASH_ESCAPES enables an SQL standard compatibility mode, where backslash is not considered a special character. The result will be that queries will fail.

    To set this mode for the current connection, enter the following SQL statement:

    SET sql_mode='NO_BACKSLASH_ESCAPES';
    

    You can also set the mode globally for all clients:

    SET GLOBAL sql_mode='NO_BACKSLASH_ESCAPES';
    

    This SQL mode also can be enabled automatically when the server starts by using the command-line option --sql-mode=NO_BACKSLASH_ESCAPES or by setting sql-mode=NO_BACKSLASH_ESCAPES in the server option file (for example, my.cnf or my.ini, depending on your system).

  • The patch for Bug#8303 broke the fix for Bug#8378 and was undone. (In string literals with an escape character (\) followed by a multi-byte character that has a second byte of (\), the literal was not interpreted correctly. The next byte now is escaped, not the entire multi-byte character. This means it a strict reverse of the mysql_real_escape_string() function.)

  • The client libraries had not been compiled for position-indpendent code on Solaris-SPARC and AMD x86_64 platforms. (Bug#13159, Bug#14202, Bug#18091)

  • Altering a VARCHAR column in a MyISAM table to make it longer could cause corruption of the following column. (Bug#19386)

  • A CREATE TABLE statement that created a table from a materialized view did not inherit default values from the underlying table. (Bug#19089)

  • NDB Cluster: A Cluster whose storage nodes were installed from the MySQL-ndb-storage-* RPMs could not perform CREATE or ALTER operations that made use of non-default character sets or collations. (Bug#14918)

  • NDB Cluster: mysqld processes did not always detect cluster shutdown, leading to issues with CLuster replication and schema distribution. (Bug#19395)

  • NDB Cluster: SELECT MIN(unique_column) from a Cluster table with user-defined partitioning crashed the server. (Bug#18730)

  • Premature optimization of nested subqueries in the FROM clause that refer to aggregate functions could lead to incorrect results. (Bug#19077)

  • For dates with 4-digit year parts less than 200, an implicit conversion to add a century was applied for date arithmetic performed with DATE_ADD(), DATE_SUB(), + INTERVAL, and - INTERVAL. (For example, DATE_ADD('0050-01-01 00:00:00', INTERVAL 0 SECOND) became '2050-01-01 00:00:00'.) Now these operations return NULL rather than an incorrect non-NULL value. (Bug#18997)

  • BLOB or TEXT arguments to or values returned from stored functions were not copied properly if too long and could become garbled. (Bug#18587)

  • Simultaneous scheduled events whose actions conflicted with one another could crash the server. (Bug#16428)

  • In was not possible to invoke a stored routine containing dynamic SQL from a scheduled event. (Bug#19264)

  • NDB Cluster: Running ALL START in the NDB management client or restarting multiple nodes simultaneously could under some circumstances cause the cluster to crash. (Bug#19930)

  • The result from CONV() is a string, but was not always treated the same way as a string when converted to a real value for an arithmetic operation. (Bug#13975)

  • CREATE TABLE ... SELECT ... statements that used a stored function explicitly or implicitly (through a view) resulted in a Table not locked error. (Bug#12472, Bug#15137)

  • Within a trigger, SET used the SQL mode of the invoking statement, not the mode in effect at trigger creation time. (Bug#6951)

  • The server no longer uses a signal handler for signal 0 because it could cause a crash on some platforms. (Bug#15869)

  • The embedded server crashed with row-based replication enabled. (Bug#18518)

  • Display better error message for ALTER TABLE operations that will result in duplicate keys due to AUTO_INCREMENT resequencing. (Bug#14573)

  • The Data_free column in the output of SHOW TABLE STATUS always displayed 0 for partitioned tables. (Bug#19501)

  • Adding an index to a table created using partitioning by KEY and the MEMORY storage engine caused the server to crash. (Bug#19140)

  • When creating a table using CREATE TABLE ... PARTITION BY ... SELECT ..., the partitioning clause was ignored. (Bug#19062)

  • ALTER TABLE ENGINE=... failed when used to change a MySQL Cluster table having no explicit primary key to use a different storage engine. (Bug#19010)

    Note: As a consequence of this fix, SHOW CREATE TABLE no longer displays auto-partitioning information for NDBCluster tables.

  • NDB Cluster (NDBAPI): On big-endian platforms, NdbOperation::write_attr() did not update 32-bit fields correctly. (Bug#19537)

  • NDB Cluster: Using 鈥stalemysqld .FRM files could cause a newly-restored cluster to fail. This situation could arise when restarting a MySQL Cluster using the --intial option while leaving connected mysqld processes running. (Bug#16875)

  • NDB Cluster (Replication): Memory was not freed after some ALTER TABLE operations, which could cause mysqld processes to crash. (Bug#19885)

  • NDB Cluster (NDBAPI): The Ndb::dropEventOperation() method failed to clean up all objects used, which could cause memory leaks to occur. (Bug#17610)

  • NDB Cluster: Data node failures could cause excessive CPU usage by ndb_mgmd. (Bug#13987)

  • NDB Cluster: TRUNCATE failed on tables having BLOB or TEXT columns with the error Lock wait timeout exceeded. This affected both in-memory and Disk Data tables. (Bug#19201)

  • Revised memory allocation for local objects within stored functions and triggers to avoid memory leak for repeated function or trigger invocation. (Bug#17260)

  • EXPLAIN ... SELECT INTO caused the client to hang. (Bug#15463)

  • Symlinking .mysql_history to /dev/null to suppress statement history saving by mysql did not work. (mysql deleted the symlink and recreated .mysql_history as a regular file, and then wrote history to it.) (Bug#16803)

  • The basedir and tmpdir system variables could not be accessed via @@var_name syntax. (Bug#1039)

  • Corrected several problems with the treatment of the --log-error option by mysqld_safe. These problems were manifest as differences from mysqld in error log handling.

    • If a filename was given for --log-error, mysqld_safe ignored it and did not pass it to mysqld, which then wrote error information to stderr and resulted in incorrect log rotation when FLUSH LOGS was used.

    • mysql_safe now adds .err to the end of the filename if no extension is present (the same as mysqld).

    • mysqld_safe treated a relative pathname as relative to its own current working directory. Now it treats a relative pathname as relative to the data directory (the same as mysqld).

    In addition, some argument quoting problems were corrected. (Bug#6061)

  • Returning the value of a system variable from a stored function caused a server crash. (Bug#18037)

  • Use of uninitialized user variables in a subquery in the FROM clause resulted in bad entries in the binary log. (Bug#19136)

  • IS_USED_LOCK() could return an incorrect connection identifier. (Bug#16501)

  • Concurrent reading and writing of privilege structures could crash the server. (Bug#16372)

C.1.9.聽Changes in release 5.1.10 (Not released)

Note: This was an internal release only, and no binaries were published.

MySQL 5.1.10 includes the patches for recently reported security vulnerabilites in the MySQL client-server protocol. We would like to thank Stefano Di Paola for finding and reporting these to us.

This section documents all changes and bug fixes that have been applied since the last official MySQL release. If you would like to receive more fine-grained and personalized update alerts about fixes that are relevant to the version and features you use, please consider subscribing to MySQL Enterprise (a commercial MySQL offering). For more details please see http://www.mysql.com/products/enterprise.

Functionality added or changed:

  • Security enhancement: Added the global max_prepared_stmt_count system variable to limit the total number of prepared statements in the server. This limits the potential for denial-of-service attacks based on running the server out of memory by preparing huge numbers of statements. The current number of prepared statements is available through the prepared_stmt_count system variable. (Bug#16365)

  • The mysql_upgrade command has been converted from a shell script to a C program, so it is available on non-Unix systems such as Windows. This program should be run for each MySQL upgrade. See Section聽5.5.7, 鈥mysql_upgrade 鈥 Check Tables for MySQL Upgrade鈥.

  • Binary distributions that include SSL support now are built using yaSSL when possible.

  • The MySQL-shared-compat-5.1.X-.i386.rpm shared compatibility RPMs no longer contain libraries for MySQL 5.0. This avoids a conflict because the 5.0 and 5.1 libraries share the same soname number. It contains libraries for 3.23, 4.0, 4.1, and 5.1. (Bug#19288)

  • The ONLY_FULL_GROUP_BY SQL mode now also applies to the HAVING clause. That is, columns not named in the GROUP BY clause cannot be used in the HAVING clause if not used in an aggregate function. (Bug#18739)

  • SQL syntax for prepared statements now supports ANALYZE TABLE, OPTIMIZE TABLE, and REPAIR TABLE. (Bug#19308)

  • XPath expressions passed to the ExtractValue() and UpdateXML() functions can now include the colon character (鈥 : 鈥). This enables use of these functions with XML which employs namespaces. (Bug#18170)

  • The bundled yaSSL library was upgraded to version 1.3.5. This improves handling of certain problems with SSL-related command options. (Bug#17737)

  • For the mysql client, typing Control-C causes mysql to attempt to kill the current statement. If this cannot be done, or Control-C is typed again before the statement is killed, mysql exits. Previously, Control-C caused mysql to exit in all cases. (Bug#1989)

  • Creating a table in an InnoDB database with a column name that matched the name of an internal InnoDB column (including DB_ROW_ID, DB_TRX_ID, DB_ROLL_PTR and DB_MIX_ID) would cause a crash. MySQL now returns error 1005 (cannot create table) with errno set to -1. (Bug#18934)

  • On Windows, some names such as nul, prn, and aux could not be used as filenames because they are reserved as device names. These are now allowable names in MySQL. They are encoded by appending @@@ to the name when the server creates the corresponding file or directory. This occurs on all platforms for portability of the corresponding database object between platforms. (Bug#17870)

  • Added the REFERENTIAL_CONSTRAINTS table to INFORMATION_SCHEMA. It provides information about foreign keys.

  • Added --debug option to Instance Manager.

  • Added the have_dynamic_loading system variable that indicates whether the server supports dynamic loading of plugins.

  • Added the sql_big_selects system variable to the output of SHOW VARIABLES.

  • You must now have the DROP privilege to drop table partitions. (Bug#17139)

  • NDB Cluster: It is now possible to perform a partial start of a cluster. That is, it is now possible to bring up the cluster without running ndbd --initial on all configured data nodes first. (Bug#18606)

  • NDB Cluster: It is now possible to restore a Cluster backup between big-endian and little-endian machines. (Bug#19255)

  • NDB Cluster: It is now possible to install MySQL with Cluster support to a non-default location and change the search path for font description files using either the --basedir or --character-sets-dir options. (Previously in MySQL 5.1, ndbd searched only the default path for character sets.)

  • In result set metadata, the MYSQL_FIELD.length value for BIT columns now is reported in number of bits. For example, the value for a BIT(9) column is 9. (Formerly, the value was related to number of bytes.) (Bug#13601)

  • Added the KEY_BLOCK_SIZE table option and index option. This can be used in CREATE TABLE, ALTER TABLE, and CREATE INDEX statements to provide a hint to the storage engine about the size to use for index key blocks. The engine is allowed to change the value if necessary.

Bugs fixed:

  • Security fix: A malicious client, using specially crafted invalid login or COM_TABLE_DUMP packets was able to read uninitialized memory, which potentially, though unlikely in MySQL, could have led to an information disclosure. (CVE-2006-1516, CVE-2006-1517) Thanks to Stefano Di Paola for finding and reporting this bug.

  • Security fix: A malicious client, using specially crafted invalid COM_TABLE_DUMP packets was able to trigger an exploitable buffer overflow on the server. (CVE-2006-1518) Thanks to Stefano Di Paola for finding and reporting this bug.

  • NDB Cluster (Replication): Using the --binlog-do-db option caused problems with CREATE TABLE on the cluster acting as the replication master. (Bug#19492)

  • NDB Cluster: Some queries having a WHERE clause of the form c1=val1 OR c2 LIKE 'val2' were not evaluated correctly. (Bug # 17421)

  • NDB Cluster: Repeated use of the SHOW and ALL STATUS commands in the ndb_mgm client could cause the mgmd process to crash. (Bug#18591)

  • NDB Cluster: An issue with ndb_mgmd prevented more than 27 mysqld processes from connecting to a single cluster at one time. (Bug#17150)

  • Running myisampack followed by myisamchk with the --unpack option would corrupt the auto_increment key. (Bug#12633)

  • A view definition that referred to an alias in the HAVING clause could be saved in the .frm file with the alias replaced by the expression that it referred to, causing failure of subsequent SELECT * FROM view_name statements. (Bug#19573)

  • A compatibility issue with NPTL (Native POSIX Thread Library) on Linux could result in a deadlock with FLUSH TABLES WITH READ LOCK under some conditions. (Bug#20048)

  • MyISAM table deadlock was possible if one thread issued a LOCK TABLES request for write locks and then an administrative statement such as OPTIMIZE TABLE, if between the two statements another client meanwhile issued a multiple-table SELECT for some of the locked tables. (Bug#16986)

  • The patch for Bug#17164 introduced the problem that some outer joins were incorrectly converted to inner joins. (Bug#19816)

  • A NUL byte within a comment in a statement string caused the rest of the string not to be written to the query log, allowing logging to be bypassed. (CVE-2006-0903) (Bug#17667)

  • NDB Cluster: mysqld could crash when attempting an update if the cluster had failed previously. (Bug#18798)

  • mysql-test-run.pl started NDB even for test cases that didn't need it. (Bug#19083)

  • Selecting from a view that used GROUP BY on a non-constant temporal interval (such as DATE(col) + INTERVAL TIME_TO_SEC(col) SECOND could cause a server crash. (Bug#19490)

  • An outer join of two views that was written using { OJ ... } syntax could cause a server crash. (Bug#19396)

  • mysql displayed NULL for strings that are empty or contain only spaces. (Bug#19564)

  • A range access optimizer heuristic was invalid, causing some queries to be much slower in MySQL 5.0 than in 4.0. (Bug#17379, Bug#18940)

  • SELECT DISTINCT queries sometimes returned only the last row. (Bug#18068)

  • Eliminated some memory corruption problems that resultsd in double free or corruption errors and a server crash. (Bug#19154)

  • Use of CONVERT_TZ() in a stored function or trigger (or in a stored procedure called from a stored function or trigger) caused an error. (Bug#11081)

  • Some queries were slower in 5.0 than in 4.1 because some 4.1 cost-evaluation code had not been merged into 5.0. (Bug#14292)

  • MySQL-shared-compat-5.1.9-0.i386.rpm incorrectly depended on glibc 2.3 and could not be installed on a glibc 2.2 system. (Bug#16539)

  • Updates to a MEMORY table caused the size of BTREE indexes for the table to increase. (Bug#18160)

  • REPAIR TABLE did not restore the length for packed keys in tables created under MySQL 4.x. (Bug#17810)

  • The parser leaked memory when its stack needed to be extended. (Bug#18930)

  • When myisamchk needed to rebuild a table, AUTO_INCREMENT information was lost. (Bug#10405)

  • Use of --default-storage-engine=innodb resulted in an error with the server reporting that InnoDB was an unknown table type. (Bug#16691)

  • Executing a CREATE EVENT statement could cause 100% CPU usage. (Bug#19170)

  • After calling FLUSH STATUS, the max_used_connections variable did not increment for existing connections and connections which use the thread cache. (Bug#15933)

  • MySQL would not compile on Linux distributions that use the tinfo library. (Bug#18912)

  • An issue with file handling in the partitioning code could cause mysqld to crash when started and then stopped within a very short period of time. (Bug#19313)

  • NDB Cluster (Replication): When taking part in Cluster replication of tables containing BLOB columns, mysqld falsely reported a large memory leak in the replication buffers when there was none. (Bug#19247)

  • NDB Cluster: Stopping multiple nodes could cause node failure handling not to be completed. (Bug#19039)

  • NDB Cluster: A simultaneous DROP TABLE and table update operation utilising a table scan could trigger a node failure. (Bug#18597)

  • NDB Cluster: ndbd could sometimes fail to start with the error Node failure handling not completed following a graceful restart. (Bug#18550)

  • NDB Cluster: Backups could fail for large clusters with many tables, where the number of tables approached MaxNoOfTables. (Bug#17607)

  • NDB Cluster: A 5.1.6 or newer server did not read local checkpoints recorded by any other 5.1 version, thus preventing a system restart following an upgrade. (Bug#19333)

  • NDB Cluster: Trying to restore the apply_status table from a 5.0 cluster backup failed on a 5.1 server. (Bug#18935)

  • NDB Cluster (Disk Data): CREATE LOGFILE GROUP accepted values other than NDB or NDBCLUSTER in the ENGINE clause. (Bug#18604)

  • NDB Cluster (Disk Data): Omitting the required ENGINE clause from a CREATE LOGFILE GROUP or CREATE TABLESPACE statement caused the server to crash. An appropriate error message is now returned instead. (Bug#18603)

  • NDB Cluster: mysqldump included in its output data from the internal cluster database. (Bug#17840)

  • Event-creation statements enclosed in multi-line comments using /*!version_number ... */ syntax were not parsed correctly. (Bug#18078)

  • Within a trigger, CONNECTION_ID() did not return the connection ID of the thread that caused the trigger to be activated. (Bug#16461)

  • mysqltest incorrectly interpreted some ER_xxx error names given in the error command. (Bug#18495)

  • For single-SELECT union constructs of the form (SELECT ... ORDER BY order_list1 [LIMIT n]) ORDER BY order_list2, the ORDER BY lists were concatenated and the LIMIT clause was ignored. (Bug#18767)

  • Logging to the mysql.general_log and mysql.slow_log tables did not work for Windows builds because the CSV storage engine was unavailable. The CSV engine now is enabled in Windows builds. (Bug#17368)

  • LOAD DATA FROM MASTER would fail when trying to load the INFORMATION_SCHEMA database from the master, because the INFORMATION_SCHEMA system database would already exist on the slave. (Bug#18607)

  • The binary log would create an incorrect DROP query when creating temporary tables during replication. (Bug#17263)

  • CREATE VIEW statements would not be replicated to the slave if the --replicate-wild-ignore-table rule was enabled. (Bug#18715)

  • In mysqltest, --sleep=0 had no effect. Now it correctly causes sleep commands in test case files to sleep for 0 seconds. (Bug#18312)

  • Attempting to set the default value of an ENUM or SET column to NULL caused a server crash. (Bug#19145)

  • Index corruption could occur in cases when key_cache_block_size was not a multiple of myisam_block_size (for example, with key_cache_block_size=1536 and myisam_block_size=1024). (Bug#19079)

  • The sql_big_selects system variable was not displayed by SHOW VARIABLES. (Bug#17849)

  • The sql_notes and sql_warnings system variables were not always displayed correctly by SHOW VARIABLES (for example, they were displayed as ON after being set to OFF). (Bug#16195)

  • LAST_INSERT_ID() in a stored function or trigger returned zero. . (Bug#15728)

  • Use of CONVERT_TZ() in a view definition could result in spurious syntax or access errors. (Bug#15153)

  • The system_time_zone and version_* system variables could not be accessed via SELECT @@var_name syntax. (Bug#12792, Bug#15684)

  • Conversion of a number to a CHAR UNICODE string returned an invalid result. (Bug#18691)

  • Some fast ALTER TABLE operations (requiring no temporary table) did not work for all tables. (Bug#19011)

  • DELETE and UPDATE statements that used large NOT IN (value_list) clauses could use large amounts of memory. (Bug#15872)

  • Prevent recursive views caused by using RENAME TABLE on a view after creating it. (Bug#14308)

  • A LOCK TABLES statement that failed could cause MyISAM not to update table statistics properly, causing a subsequent CHECK TABLE to report table corruption. (Bug#18544)

  • A failed ALTER TABLE operation could fail to clean up a temporary .frm file. (Bug#18129)

  • For a reference to a non-existent stored function in a stored routine that had a CONTINUE handler, the server continued as though a useful result had been returned, possibly resulting in a server crash. (Bug#18787)

  • InnoDB did not use a consistent read for CREATE ... SELECT when innodb_locks_unsafe_for_binlog was set. (Bug#18350)

  • InnoDB could read a delete mark from its system tables incorrectly. (Bug#19217)

  • myisamchk and myisam_ftdump should allow either table names or .MYI filenames as arguments, but allowed only table names. (Bug#19220)

  • DROP DATABASE did not drop stored routines associated with the database if the database name was longer than 21 characters. (Bug#18344)

  • Avoid trying to include <asm/atomic.h> when it doesn't work in C++ code. (Bug#13621)

  • Executing SELECT on a large table that had been compressed within myisampack could cause a crash. (Bug#17917)

  • NDB Cluster (NDBAPI): Passing a nonexistent index name to NdbIndexScanOperation::setBound() caused a segmentation fault. (Bug#19088)

  • ALTER TABLE ... REBUILD PARTITION returned an inaccurate error message. (Bug#16819)

  • InnoDB: A DELETE followed by an INSERT and then by an UPDATE on a partitioned InnoDB table caused subsequent queries to return incorrect results. (Bug#17992)

  • NDB Cluster: A table insert or update of more than 128 bytes of data in a 4-replica Cluster could cause a node to crash. (Bug#18622)

  • NDB Cluster (Disk Data): Concurrent table schema operations and operations on log files groups, tablespaces, data files, or undofiles could lead to Cluster node failures. (Bug#18575)

  • NDB Cluster: An issue with replication caused a mysqld connected to a replicated cluster to crash when entering single user mode. (Bug#18535)

  • Successive ALTER TABLE ... DROP PARTITION statements on the same subpartitioned table could eventually cause the server to crash. (Bug#18962)

  • NDB Cluster: When attempting to create an index on a BIT or BLOB column, Error 743: Unsupported character set in table or index was returned instead of Error 906: Unsupported attribute type in index.

  • NDB Cluster: The Cluster binlog mysqld accepted updates even though the binary log was not set up, which could lead to updates missing from the binary log. (Bug#18932)

  • NDB Cluster: Concurrent INSERT and ROLLBACK statements from different connections could cause node failures. (Bug#19245)

  • NDB Cluster (Disk Data): Running an INSERT and a DELETE on a Disk Data table in the same transaction could cause a deadlock. (Bug#19244)

  • NDB Cluster (Disk Data): Issuing a CREATE LOGFILE GROUP statement during the drop of an NDB table would cause database corruption. (Bug#19141)

  • NDB Cluster: ndb_restore failed to restore a backup made from a 5.0 cluster to a 5.1 cluster. (Bug#18210)

  • NDB Cluster: Adding an index to an unsigned integer column did not work correctly. (Bug#18133)

  • NDB Cluster: A SELECT from an NDB table with ORDER BY indexed_column and a LIMIT clause would fail following ALTER TABLE. (Bug#18094)

  • NDB Cluster: Performing multiple ALTER TABLE operations on the same NDB table from different mysqld processes in the same cluster led to schema versioning errors when trying to access the table again following the restart of one of the mysqld processes. (Bug#16445)

  • NDB Cluster: Starting mysqld without --log-bin caused DDL statements on NDB tables to time out. (Bug#19214)

  • NDB Cluster: Fragment IDs were not being logged correctly, causing ndb_restore_log to fail. (Bug#18594)

  • Casting a string to DECIMAL worked, but casting a trimmed string (using LTRIM() or RTRIM()) resulted in loss of decimal digits. (Bug#17043)

  • NDB Cluster (Replication): Delete and update of rows in a table without a primary key failed on the slave. (Bug#17400)

  • NDB Cluster: On slow networks or CPUs, the management client SHOW command could sometimes erroneously show all data nodes as being master nodes belonging to nodegroup 0. (Bug#15530)

  • The XPath string-length() function was not implemented for use with ExtractValue(). (Bug#16319)

  • Fix the way that Instance Manager finds the version number of instances, so that it works properly when the executable name isn't the same as what the Instance Manager launched (such as when wrapping a libtool-wrapped executable from the source tree). (Bug#19059)

  • The server attempted to flush uninitialized log tables during SIGHUP processing, causing a crash. (Bug#18848)

  • If the second or third argument to BETWEEN was a constant expression such as '2005-09-01 - INTERVAL 6 MONTH and the other two arguments were columns, BETWEEN was evaluated incorrectly. (Bug#18618)

  • If the first argument to BETWEEN was a DATE or TIME column of a view and the other arguments were constants, BETWEEN did not perform conversion of the constants to the appropriate temporary type, resulting in incorrect evaluation. (Bug#16069)

  • ExtractValue function did not return character data within <![CDATA[]]> as expected. (Bug#18285)

  • Server and clients ignored the --sysconfdir option that was passed to configure. (Bug#15069)

  • It was possible to create a RANGE-partitioned table with a partition defined using the clause VALUES LESS THAN (NULL), even though such a partition could never contain any values whatsoever. (Bug#18752)

  • Running an ALTER TABLE on a partitioned table simultaneously experiencing a high number of concurrent DML statements could crash the server. (Bug#18572)

  • It was possible to use trailing spaces in the names of partitions and subpartitions. Attempting to do so now raises the error Incorrect partition name. (Bug#17973)

  • LIKE searches failed on a CHAR column used as the partitioning column of a table partitioned by KEY. (Bug#17946)

  • If the WHERE condition of a query contained an OR-ed FALSE term, the set of tables whose rows cannot serve for null-complements in outer joins was determined incorrectly. This resulted in blocking possible conversions of outer joins into joins by the optimizer for such queries. (Bug#17164)

  • The ExtractValue() function failed with a syntax error when the XPath expression used special characters such as (鈥N-tilde鈥). (Bug#16233)

  • Inserts failed with duplicate key errors on a table partitioned using an AUTO_INCREMENT column for the partitioning key. (Bug#18552, Bug#18753)

  • Delimited identifiers for partitions were not being treated the same as delimited identifiers for other database objects (such as tables and columns) with regard to allowed characters. (Bug#18750)

  • A query on a table partitioned or subpartitioned by HASH did not display all results when using a WHERE condition involving a column used in the hashing expression. (Bug#18423, Bug#18329)

  • If the server were built without partition support, it was possible to run partitioning-related statements with no errors or warnings, even though these statements would have no effect. Now such statements are disallowed unless the server has been compiled using the --with-partition option. (Bug#15561)

  • NDB Cluster: In a 2-node cluster with a node failure, restarting the node with a low value for StartPartialTimeout could cause the cluster to come up partitioned (鈥split-brain鈥 issue). (Bug#16447)

    A similar issue could occur when the cluster was first started with a sufficiently low value for this parameter. (Bug#18612)

  • NDB Cluster: On systems with multiple network interfaces, data nodes would get 鈥stuck鈥 in startup phase 2 if the interface connecting them to the management server was working on node startup while the interface interconnecting the data nodes experienced a temporary outage. (Bug#15695)

  • NDB Cluster: Unused open handlers for tables in which the metadata had changed were not properly closed. This could result in stale results from Cluster tables following an ALTER TABLE. (Bug#13228)

  • NDB Cluster: Uninitialized internal variables could lead to unexpected results. (Bug#11033, Bug#11034)

  • The presence of multiple equalities in a condition after reading a constant table could cause the optimizer not to use an index. This resulted in certain queries being much slower than in MySQL 4.1. (Bug#16504)

  • A recent change caused the mysql client not to display NULL values correctly and to display numeric columns left-justified rather than right-justified. The problems have been corrected. (Bug#18265)

  • InnoDB failure to release an adaptive hash index latch could cause a server crash if the query cache was enabled. (Bug#15758)

  • InnoDB: ALTER TABLE to add or drop a foreign key for an InnoDB table had no effect. (Bug#18477)

  • NDB Cluster: Attempting to create an index using multiple columns on an explicitly partitioned table in a replicated Cluster database could cause the master mysqld process to crash. (Bug#18284)

  • NDB Cluster: Queries using ORDER BY pkN failed against a LIST-partitioned Cluster table having a multi-column primary key, where pkN represents one of the columns making up the primary key. (Bug#18598)

  • Updating a field value when also requesting a lock with GET_LOCK() would cause slave servers in a replication environment to terminate. (Bug#17284)

C.1.10.聽Changes in release 5.1.9 (12 April 2006)

This is a new Beta development release, fixing recently discovered bugs.

NOTE: This Beta release, as any other pre-production release, should not be installed on production-level systems or systems with critical data. It is good practice to back up your data before installing any new version of software. Although MySQL has worked very hard to ensure a high level of quality, protect your data by making a backup as you would for any software beta release. Please refer to our bug database at http://bugs.mysql.com/ for more details about the individual bugs fixed in this version.

This section documents all changes and bug fixes that have been applied since the last official MySQL release. If you would like to receive more fine-grained and personalized update alerts about fixes that are relevant to the version and features you use, please consider subscribing to MySQL Enterprise (a commercial MySQL offering). For more details please see http://www.mysql.com/products/enterprise.

Functionality added or changed:

  • SHOW PLUGIN was renamed to SHOW PLUGINS. SHOW PLUGIN now is deprecated and generates a warning. (Bug#17112)

  • Binary MySQL distributions now include a mysqld-max server, in addition to the usual mysqld optimized server and the mysqld-debug debugging server.

  • mysqld_safe no longer checks for a mysqld-max binary. Instead, mysqld_safe nows checks only for the standard mysqld server unless another server binary is specified explicitly via --mysqld or --mysqld-version. If you previously relied on the implicit invocation of mysqld-max, you should use an appropriate option now. (Bug#17861)

  • For partitioned tables, the output of SHOW TABLE STATUS now shows in the Engine column the name of the storage engine used by all partitions for the table; in the Create_options column, the output now shows partitioned for a partitioned table. This change also affects the values shown in the corresponding columns of the INFORMATION_SCHEMA.TABLES table. (Bug#17631)

  • NDB Cluster: A new --nowait-nodes startup option for ndbd makes it possible to 鈥skip鈥 specific nodes without waiting for them to start when starting the cluster. See Section聽15.6.5.2, 鈥淐ommand Options for ndbd.

  • The NDBCluster storage engine now supports CREATE TABLE statements of arbitrary length. (Previously, CREATE TABLE statements for MySQL Cluster tables could contain a maximum of 4096 characters only.) (Bug#17813)

  • Large file support was re-enabled for the MySQL server binary for the AIX 5.2 platform. (Bug#13571)

  • The mysql_get_ssl_cipher() C API function was added.

Bugs fixed:

  • Security fix: Invalid arguments to DATE_FORMAT() caused a server crash. (CVE-2006-3469, Bug#20729) Thanks to Jean-David Maillefer for discovering and reporting this problem to the Debian project and to Christian Hammers from the Debian Team for notifying us of it.

  • NDB Cluster: BLOB columns did not work correctly with user-partitioned NDB tables. (Bug#16796)

  • mysql_config returned incorrect libraries on x86_64 systems. (Bug#13158)

  • mysql_reconnect() sent a SET NAMES statement to the server, even for pre-4.1 servers that do not understand the statement. (Bug#18830)

  • COUNT(*) on a MyISAM table could return different results for the base table and a view on the base table. (Bug#18237)

  • For mysql.server, if the basedir option was specified after datadir in an option file, the setting for datadir was ignored and assumed to be located under basedir. (Bug#16240)

  • For full-text searches in boolean mode, and when a full-text parser plugin was used, a MYSQL_FTPARSER_PARAM::ftparser_state could have been corrupted by recursive calls to the plugin. (Bug#18836)

  • EXTRACT(QUARTER FROM date) returned unexpected results. (Bug#18100)

  • TRUNCATE did not reset the AUTO_INCREMENT counter for MyISAM tables when issued inside a stored procedure. (Bug#14945)

    Note: This bug did not affect InnoDB tables. Also, TRUNCATE does not reset the AUTO_INCREMENT counter for NDBCluster tables regardless of when it is called (see Bug#18864).

  • The server was always built as though --with-extra-charsets=complex had been specified. (Bug#12076)

  • Partition pruning did not work properly for some kinds of partitioning and subpartitioning, with certain WHERE clauses. (Partitions and subpartitions that should have been marked as used were not so marked.) The error could manifest as incorrect content in EXPLAIN PARTITIONS output as well as missing rows in the results of affected queries. (Bug#18558)

  • NDB Cluster: An unitialized internal variable could lead to unexpected results. (Bug#18831)

  • For tables created in a MySQL 4.1 installation upgraded to MySQL 5.0 and up, multiple-table updates could update only the first matching row. (Bug#16281)

  • Complex queries with nested joins could cause a server crash. (Bug#18279)

  • A query against a partitioned table using WHERE col IS NULL could produce incorrect results given the following conditions:

    • The table had partitions and subpartitions

    • The partitioning function depended on a single column col of one of the MySQL integer types

    • The partitioning function was not monotonically increasing

    The same issue could cause the server to crash when run in debug mode. (Bug#18659)

  • CAST(double AS SIGNED INT) for large double values outside the signed integer range truncates the result to be within range, but the result sometimes had the wrong sign, and no warning was generated. (Bug#15098)

  • MEDIUMINT columns were not handled in the same way as other column types by partition pruning.

    Partition pruning would sometimes use inappropriate columns in preforming queries.

    Both of these issues were rectified as part of the same bugfix. (Bug#18025)

  • Quoted values could not be used for partition option values. (Bug#13520)

  • Delimited identifiers could not be used in defining partitions. (Bug#13433)

  • Building the server using --with-example-storage-engine failed to enable the EXAMPLE storage engine in the server. (Bug#18464)

  • Triggers created in one version of the server could not be dropped after upgrading to a newer version. (Bug#15921)

  • Queries using WHERE ... IS NULL returned incorrect results from partitioned tables. (Bug#18070)

  • Partition pruning did not perform correctly with partitions on NULL, and could potentially crash the server. (Bug#18053)

  • If InnoDB encountered a HA_ERR_LOCK_TABLE_FULL error and rolled back a transaction, the transaction was still written to the binary log. (Bug#18283)

C.1.11.聽Changes in release 5.1.8 (Not released)

Note: This was an internal release only, and no binaries were published.

Functionality added or changed:

  • In order not to break legacy applications, support for TYPE = engine_name has been restored, but now generates a warning.

    Important: This option has been deprecated since MySQL 4.0. Beginning with MySQL 5.2, TYPE = engine_name will no longer be available and will produce a syntax error. You should not use TYPE in any new applications, and you should immediately begin conversion of existing applications to use the ENGINE = engine_name syntax instead. (Bug#17501)

  • The deprecated constructs in the following table now generate warnings. You should not employ them in new applications, as they are likely to be removed in a future version of MySQL. Use the equivalents shown in the table's second column instead. For the same reason, existing applications depending on the deprecated constructs should be converted to make use of the current equivalents as soon as possible. (Bug#17501)

    Deprecated / Obsolete:Current / Preferred:
    @@table_type@@storage_engine
    @@log_bin_trust_routine_creators@@log_bin_trust_function_creators
    TIMESTAMP(N)See Section聽12.6, 鈥淒ate and Time Functions鈥.
    TYPE=ENGINE=
    BACKUP TABLEmysqldump, mysqlhotcopy, or MySQL Administrator
    RESTORE TABLE, LOAD TABLE FROM MASTERmysqldump, mysql, or MySQL Administrator
    SHOW TABLE TYPESSHOW [STORAGE] ENGINES
    SHOW INNODB STATUSSHOW ENGINE INNODB STATUS
    SHOW MUTEX STATUSSHOW ENGINE INNODB MUTEX
    SHOW BDB LOGS, SHOW LOGSSHOW ENGINE BDB LOGS

    The deprecated items shown in the table are not guaranteed to be available in MySQL 5.2 or later.

  • Incompatible change: For purposes of determining placement, RANGE partitioning now treats NULL as less than any other value. (Formerly, NULL was treated as equal to zero.) See Section聽16.2.6, 鈥淗ow MySQL Partitioning Handles NULL Values鈥. (Bug#15447)

  • Incompatible Change: The semantics of ALTER TABLE t ENGINE=X; for partitioned tables is changed, and now means that the storage engine used for table t is changed to X.

    The previous statement formerly (prior to MySQL 5.1.8) meant that all partitioning was removed from the table. In order to remove the partitioning of a table, the syntax ALTER TABLE t REMOVE PARTITIONING; is introduced. The REMOVE PARTITIONING option can be used in combination with existing ALTER TABLE options such as those employed for adding or dropping columns or indexes. (Bug#17754)

  • Added the --sysdate-is-now option to mysqld to enable SYSDATE() to be treated as an alias for NOW(). See Section聽12.6, 鈥淒ate and Time Functions鈥. (Bug#15101)

  • The NDBCluster storage engine now supports INSERT IGNORE and REPLACE statements. Previously, these statements failed with an error. (Bug#17431)

  • Events no longer support times past the end of the Unix epoch. (Formerly, such dates were interpreted as being at the beginning of the Unix epoch.) (Bug#16396)

  • Event names are now case-insenstive. That is (for example), you cannot have events with the names Myevent and MyEvent belonging to the same database and definer. (Bug#16415)

  • Builds for Windows, Linux, and Unix (except AIX) platforms now have SSL support enabled, in the server as well as in the client libraries. Because part of the SSL code is written in C++, this does introduce dependencies on the system's C++ runtime libraries in several cases, depending on compiler specifics. (Bug#18195)

  • Temporary tables may no longer be partitioned. (Bug#17497)

  • Added the --events option to mysqldump to enable events to be included in the dump output. (Bug#16853)

  • NDB Cluster (Disk Data): You can now have only one log file group at any one time. See Section聽13.1.9, 鈥CREATE LOGFILE GROUP Syntax鈥. (Bug#16386)

  • The syntax for CREATE PROCEDURE and CREATE FUNCTION statements now includes a DEFINER clause. The DEFINER value specifies the security context to be used when checking access privileges at routine invocation time if the routine has the SQL SECURITY DEFINER characteristic. See Section聽18.2.1, 鈥CREATE PROCEDURE and CREATE FUNCTION Syntax鈥, for more information.

    When mysqldump is invoked with the --routines option, it now dumps the DEFINER value for stored routines.

  • The output from SHOW CREATE TABLE is more consistent about using uppercase for keywords. Data types still are in lowercase. (Bug#10460)

  • The ExtractValue() function with contains() now uses the SQL collation in making comparisons. Perviously, comparisons were always binary (that is, case-sensitive). (Bug#16316)

  • The cluster_replication database has been renamed to cluster. This will effect replication between MySQL Clusters where one cluster is running MySQL 5.1.8 or later, and the other is running MySQL 5.1.7 or earlier. See Section聽15.10, 鈥淢ySQL Cluster Replication鈥, and especially Section聽15.10.4, 鈥淐luster Replication Schema and Tables鈥.

  • The stability of CREATE and DROP operations on NDB tables containing BLOB columns has been improved. (Bug#17761)

  • More specific error messages are now given when attempting to create an excessive number of partitions or subpartitions. (Previously, no distinction was made between an excessive number of partitions and an excessive number of subpartitions.) (Bug#17393)

  • The mysqltest utility now converts all CR/LF combinations to LF to allow test cases intended for Windows to work properly on UNIX-like systems. (Bug#13809)

  • The mysql_ping function will now retry if the reconnect flag is set and error CR_SERVER_LOST is encountered during the first attempt to ping the server. (Bug#14057)

  • mysqldump now surrounds the DEFINER, SQL SECURITY DEFINER and WITH CHECK OPTION clauses of a CREATE VIEW statement with "not in version" comments to prevent errors in earlier versions of MySQL. (Bug#14871)

  • For an event having no STARTS time specified when it was created, the mysql.event table's start column now displays the creation time rather than NULL. (Bug#16537)

    In addition, both the SHOW EVENTS statement's Starts column and the STARTS column of the INFORMATION_SCHEMA.EVENTS table are now empty rather than NULL when STARTS was not used in the CREATE EVENT statement.

  • MICROSECOND intervals are no longer allowed for events. (Bug#16411)

  • Description of the EVENT privilege has been changed to To create, alter, drop, and execute events. (Bug#16412)

  • The binlog_format system variable now is dynamic and can be changed at runtime, as described in Section聽6.1.2, 鈥淩eplication Formats鈥.

  • The binlog_format system variable now can be set to a third format, MIXED, as described in Section聽6.1.2, 鈥淩eplication Formats鈥.

  • A slave server may switch the format automatically now. This happens when the server is running in either STATEMENT or MIXED format and encounters a row in the binary log that is written in ROW logging format. In that case, the slave switches to row-based replication temporarily for that event, and switches back to the previous format afterwards.

  • Partition pruning was made more stable, particularly in cases involving queries using tests for NULL values in the WHERE clause against subpartitioned tables which were partitioned by LIST( some_function(col1, ... ,colN) ). (Bug#17891)

  • Names of subpartitions must now be unique for an entire table, and not merely within the same partition. (Bug#15408)

  • The output of SHOW CREATE EVENT no longer qualifies the event name with the name of the schem to which the event belongs. (Bug#17714)

  • The client API will now attempt to reconnect on TCP/IP if the reconnect flag is set, as is the case with sockets. (Bug#2845)

  • The XPath last() function is now implemented for use with ExtractValue(). (Bug#16318)

Bugs fixed:

  • Stored routine names longer than 64 characters were silently truncated. Now the limit is properly enforced and an error occurs. (Bug#17015)

  • During conversion from one character set to ucs2, multi-byte characters with no ucs2 equivalent were converted to multiple characters, rather than to 0x003F QUESTION MARK. (Bug#15375)

  • Slave servers would retry the execution of a SQL statement an infinite number of times, ignoring the value SLAVE_TRANSACTION_RETRIES when using the NDB engine. (Bug#16228)

  • Replication of data stored in a partitioned table would cause slave servers to issue a assertion and terminate. (Bug#18436)

  • The mysql_close() C API function leaked handles for shared-memory connections on Windows. (Bug#15846)

  • Checks for permissions on database operations could be performed in a case-insensitive manner (a user with permissions on database MYDATABASE could by accident get permissions on database myDataBase), if the privilege data were still cached from a previous check. (Bug#17279)

  • The server would crash when SHOW STATUS was called on a server linked with yaSSL. (Bug#18310)

  • SELECT ... WHERE column LIKE 'A%', when column had a key and used the latin2_czech_cs collation, caused the wrong number of rows to be returned. (Bug#17374)

  • Using ALTER TABLE to increase the length of a BINARY(M) column caused column values to be padded with spaces rather than 0x00 bytes. (Bug#16857)

  • Execution of a stored function or trigger which inserted data into a table while running concurrent selects on the same table could result in storing incorrect data in the query cache. (Bug#14767)

  • NDB Cluster: Attempting to restart a node with dropped events still pending would fail. (Bug#18491)

  • NDB Cluster: In asynchronous replication scenarios, binary log events could be lost on the remote mysqld. (Bug # 18472)

  • NDB Cluster: Two mysqld processes starting at the same time could cause a race condition. (Bug#18472)

  • NDB Cluster: Two mysqld processes did not synchronise DROP TABLE binary log events correctly. (Bug#18395)

  • NDB Cluster: When multiple node restarts were attempted without allowing each restart to complete, the error message returned was Array index out of bounds rather than Too many crashed replicas. (Bug#18349)

  • A SELECT ... ORDER BY ... from a view defined using a function could crash the server. An example of such a view might be CREATE VIEW v1 AS SELECT SQRT(c1) FROM t1. (Bug#18386)

  • REPAIR TABLE, OPTIMIZE TABLE, and ALTER TABLE operations on transactional tables (or on tables of any type on Windows) could corrupt triggers associated with those tables. (Bug#18153)

  • MyISAM: Performing a bulk insert on a table referenced by a trigger would crash the table. (Bug#17764)

  • Using ORDER BY intvar within a stored procedure (where intvar is an integer variable or expression) would crash the server. (Bug#16474)

    Note: The use of an integer i in an ORDER BY i clause for sorting the result by the ith column is deprecated (and non-standard). It should not be used in new applications. See Section聽13.2.7, 鈥SELECT Syntax鈥.

  • A SELECT using a function against a nested view would crash the server. (Bug#15683)

  • ALTER TABLE ... ADD COLUMN ... AFTER ... failed when used on partitioned tables. (Bug#16806)

  • NDB Cluster: A timeout in the handling of an ABORT condition with more that 32 operations could yield a node failure. (Bug#18414)

  • NDB Cluster: A node restart immediately following a CREATE TABLE would fail. Important: This fix supports 2-node Clusters only. (Bug#18385)

  • NDB Cluster: In event of a node failure during a rollback, a 鈥false鈥 lock could be established on the backup for that node, which lock could not be removed without restarting the node. (Bug#18352)

  • NDB Cluster: The cluster created a crashed replica of a table having an ordered index 鈥 or when logging was not enabled, of a table having a table or unique index 鈥 leading to a crash of the cluster following 8 successibe restarts. (Bug#18298)

  • NDB Cluster: When replacing a failed master node, the replacement node could cause the cluster to crash from a buffer overflow if it had an excessively large amount of data to write to the cluster log. (Bug#18118)

  • NDB Cluster: Restarting nodes were allowed to start and join the cluster too early. (Bug#16772)

  • NDB Cluster: Issuing a DROP LOGFILE GROUP statement would cause ndbd processes to crash if MySQL had been compiled with gcc4. (Bug#18295)

  • Using triggers with partitioned InnoDB tables led to incorrect results. (Bug#17744)

  • Calling CREATE TABLE or ALTER TABLE twice on a partitioned table in a stored procedure or a prepared statement resulted in errors and sometimes server crashes. (Bug#17290)

  • A problem with NULLs and interval mapping sometimes caused incorrect results or crashes when trying to use less-than searches on partitioned tables. (Bug#17173)

  • CREATE TABLE ... PARTITION ... AS SELECT ... would cause the server to crash. (Bug#15336)

  • Creating a partition which depends on an expression containing a column using the UTF8 character set would cause the server to crash. (Bug#14367)

  • Invoking more than once a prepared statement that creates a partitioned table would crash the server. (Bug#14350)

  • NDB Cluster: A SELECT ... ORDER BY query on an explicitly partitioned Cluster table with no explicit indexes would crash the server. (Bug#17899)

  • The ExtractValue() function did not return an error when passed an invalid XPath string. (Bug#18172)

  • Stored procedures that call UDFs and pass local string variables caused server crashes. (Bug#17261)

  • Connecting to a server with a UCS2 default character set with a client using a non-UCS2 character set crashed the server. (Bug#18004)

  • Loading of UDFs in a statically linked MySQL caused a server crash. UDF loading is now blocked if the MySQL server is statically linked. (Bug#11835)

  • A security enhancement in Visual Studio 8 could cause a MySQL debug server compiled with it to hang when running SELECT queries against partitioned tables. (Bug#17722)

  • NDB Cluster: auto_increment values were not propagated correctly in statement-based replication. (Bug#18208)

  • Rpeated invocations of a stored procedure containing a SHOW CREATE EVENT statement would result in the error Packets out of order. (Bug#17403)

  • Repeated invocations of a stored procedure containing a CREATE EVENT or ALTER EVENT statement would crash the server. (Bug#16408)

  • Renaming and adding a new column to a partitioned table in the same ALTER TABLE statement caused the server to crash. (Bug#17772)

  • ALTER TABLE ... REBUILD PARTITION with no partition name specified would crash the server. (Bug#17940)

  • Trying to add a partition to a table having subpartitions could crash the server. (Bug#17140)

  • Attempting to use a conflicting VALUES clause in ALTER TABLE ... ADD PARTITION caused the server to crash. An example of such a conflicting clause would be that uses VALUES LESS THAN (constant) (which indicates a range) with a table that is partitioned by LIST. (Bug#17127)

  • ALTER TABLE ... COALESCE PARTITION failed with an Out of Memory error. (Bug#16810)

  • Names of subpartitions were not displayed in the output of SHOW CREATE TABLE. (Bug#16370)

  • Setting up subpartitions on at least one but not all the partitions of a partitioned table caused the server to crash. (Bug#15407)

  • Using the position() function in the XPath argument to ExtractValue() crashed the server. (Bug#18171)

  • A query with a WHERE date_column > date_value condition failed on a table partitioned by RANGE. (Bug#17894)

  • Cursors in stored routines could cause a server crash. (Bug#16887)

  • Replication slaves could not replicate triggers from older servers that included no DEFINER clause in the trigger definition. Now the trigger executes with the privileges of the invoker (which on the slave is the slave SQL thread). (Bug#16266)

  • Character set conversion of string constants for UNION of constant and table column was not done when it was safe to do so. (Bug#15949)

  • NULL values were written to the mysql.slow_log table incorrectly. (Bug#17600)

  • A query with a WHERE date_column > date_value condition failed on a table partitioned by RANGE. (Bug#17894)

  • A failed ALTER TABLE ... ADD PRIMARY KEY on a partitioned table would result in bad table metadata and could possibly crash the server. (Bug#17097)

  • No error was reported when subpartitions were defined for a non-subpartitioned table. (Bug#15961)

  • Searches on indexed columns of partitioned tables failed to find all matching rows following updates of the indexed columns. (Bug#14526)

  • The DEFINER value for stored routines was not replicated. (Bug#15963)

  • Use of TRUNCATE TABLE for a TEMPORARY table on a master server was propagated to slaves properly, but slaves did not decrement the Slave_open_temp_tables counter properly. (Bug#17137)

  • SELECT COUNT(*) for a MyISAM table could return different results depending on whether an index was used. (Bug#14980)

  • Updating a view that filters certain rows to set a filtered out row to be included in the table caused infinite loop. For example, if the view has a WHERE clause of salary > 100 then issuing an UPDATE statement of SET salary = 200 WHERE id = 10, caused an infinite loop. (Bug#17726)

  • Creating a table with the same name as the mapped name of another table caused a server crash. For example, if MySQL maps the table name txu#P#p1 to txu@0023P@0023p1 on disk, creating another table named txu@0023P@0023p1 crashed the server. (Bug#17142)

  • NDB Cluster: Adding an index together with replication could cause mysqld to crash. (Bug#18106)

  • NDB Cluster: Insufficient StringBuffer memory when attempting to create a trigger caused the server to crash. (Bug#18101)

  • NDB Cluster: Variable-length columns used as primary keys were not handled correctly. (Bug#18075)

  • NDB Cluster: Row-based replication could fail with tables using VARCHAR columns for primary keys and having BLOB columns. (Bug#18067)

  • NDB Cluster: CREATE UNIQUE INDEX on a column containing non-unique data could cause one or more ndbd nodes to hang or crash. (Bug#18040)

  • NDB Cluster (Disk Data): CREATE UNIQUE INDEX failed with Error 4243: Index not found. (Bug#18039)

  • NDB Cluster: Node recovery of tables with VARCHAR columns using character sets was inconsistent, which could cause a number of issues, including the data nodes failing to restart and ALTER TABLE statements to hang. (Bug#18026)

  • NDB Cluster: In some cases, a single ndbd node would fail following a system restart. (Bug#17854)

  • NDB Cluster (Replication): The binary log on the secondary master was not being set up correctly following a table rename. (Bug#17838)

  • NDB Cluster: With a single replica, transactions waiting in the log synchronisation queue were not being restarted, causing them to be aborted. (Bug#17536)

  • NDB Cluster (Disk Data): It was not possible to create more than 9 tablespaces. (Bug#16913)

  • NDB Cluster: Inserting and deleting BLOB column values while a backup was in process could cause the loss of an ndbd node. (Bug#14028)

  • NDB Cluster: UNDO_BUFFER_SIZE was limited to 17 MB. (Bug#16657, Bug#17890)

  • Using ALTER TABLE ... REBUILD PARTITION without specifying the name of the partition caused the server to crash, rather than reporting a syntax error. (Bug#17947)

  • When attempting to insert a 0 into a LIST-partitioned table that had no value-list containing 0, no error was reported. (Bug#15253)

  • If the server was started with the --skip-grant-tables option, it was impossible to create a trigger or a view without explicitly specifying a DEFINER clause. (Bug#16777)

  • The server would execute stored routines that had a non-existent definer. (Bug#13198)

  • NDB Cluster: A simultaneous RENAME of several tables was logged multiple times. (Bug#17827)

  • NDB Cluster: Trying to perform a DELETE from a Cluster table following a LOCK TABLES would cause the ndbd processes to hang. (Bug#17812)

  • ALTER TABLE ... REORGANIZE PARTITION failed with Error on rename of filename ... on Windows. (Bug#17720)

  • NDB Cluster: ALTER TABLE ... ADD INDEX failed with ERROR 756: Index on disk column is not supported when run against a Disk Data table having a primary key. (Bug#17888)

  • NDB Cluster: DELETE operations on NDB tables could cause memory leaks. (Bug#16874)

  • NDB Cluster: Some query cache statistics were not always correctly reported for Cluster tables. (Bug#16795)

  • The EXAMPLE storage engine did not work on Windows. (Bug#17721)

  • For FEDERATED tables, a SELECT statement with an ORDER BY clause did not return rows in the proper order. (Bug#17377)

  • Setting the myisam_repair_threads system variable to a value larger than 1 could cause corruption of large MyISAM tables. (Bug#11527)

  • The length of a VARCHAR() column that used the utf8 character set would increase each time the table was re-created in a stored procedure or prepared statement, eventually causing the CREATE TABLE statement to fail. (Bug#13134)

  • The MySQL server could crash with out of memory errors when performing aggregate functions on a DECIMAL column. (Bug#17602)

  • INSERT statements executed by scheduled events were not written to the general log. (Bug#16413)

  • A memory leak caused warnings on slaves for certain statements that executed without warning on the master. (Bug#16175)

  • Naming a partition using the characters or (鈥c-cedilla鈥; Unicode 00C7 or 00E7) made unreadable the table containing the partition. (Bug#14527)

  • The self() XPath function was not handled correcty by ExtractValue(). (Bug#16315)

  • The ExtractValue() function would not accept expressions which matched element names containing an underscore character. (Bug#16320)

  • NDB Cluster: Trying to update very large partitioned tables using the NDB storage engine sometimes caused the server to crash. (Bug#16385, Bug#17806)

  • Slow queries executed by scheduled events were not being written to the slow query log. (Bug#16426)

  • On Linux, creation of table partitions failed within a stored procedure. (Bug#14363)

  • mysql_fix_privilege_tables didn't create the mysql.plugin table. (Bug#17568)

  • Improper checking of binary log statements could result in a server crash. (Bug#17457)

  • The ExtractValue() function allowed the use of the ! character in identifiers by ignoring the illegal character. This is now correctly reported as a syntax error. (Bug#16313)

  • NDB Cluster: Trying to insert a value into a nonexistent LIST partition of an NDB table would cause the server to crash. (Bug#17763)

  • NDB Cluster: ALTER TABLE on a partitioned NDB table could cause the server to crash. (Bug#17499)

  • NDB Cluster: A repeated SELECT on a partitioned table that used the NDB storage engine could cause the server to crash. (Bug#17390)

  • NDB Cluster: Using ALTER TABLE ... ADD PARTITION on a table partitioned by LIST would cause the client to hang. (Bug#17701)

  • Triggers created without BEGIN and END clauses resulted in 鈥You have an error in your SQL syntax鈥 errors when dumping and replaying a binary log. (Bug#16878)

  • The RENAME TABLE statement did not move triggers to the new table. (Bug#13525)

  • Clients compiled from source with the --without-readline did not save command history from session to session. (Bug#16557)

  • Stored routines that contained only a single statement were not written properly to the dumpfile when using mysqldump. (Bug#14857)

  • Issuing GRANT EXECUTE on a procedure would display any warnings related to the creation of the procedure. (Bug#7787)

  • Attempting to add a new partition to a table partitioned by a unique key would cause an Out of memory error. (Bug#17169)

  • In a highly concurrent environment, a server crash or deadlock could result from execution of a statement that used stored functions or activated triggers coincident with alteration of the tables used by these functions or triggers. (Bug#16593)

C.1.12.聽Changes in release 5.1.7 (27 February 2006)

Functionality added or changed:

  • Incompatible change: TYPE = engine_name is no longer accepted as a synonym for the ENGINE = engine_name table option. (TYPE has been deprecated since MySQL 4.0.)

  • Several changes were made to make upgrades easier:

    • Added the mysql_upgrade program that checks all tables for incompatibilities with the current version of MySQL Server and repairs them if necessary. This program should be run for each MySQL upgrade (rather than mysql_fix_privilege_tables). See Section聽5.5.7, 鈥mysql_upgrade 鈥 Check Tables for MySQL Upgrade鈥.

    • Added the FOR UPGRADE option for the CHECK TABLE statement. This option checks whether tables are incompatible with the current version of MySQL Server.

    • Added the --check-upgrade to mysqlcheck that invokes CHECK TABLE with the FOR UPGRADE option. Added the --fix-db-names and --fix-table-names options to mysqlcheck.

  • Incompatible change: The mysql_stmt_attr_get() C API function now returns a boolean rather than an unsigned int for STMT_ATTR_UPDATE_MAX_LENGTH. (Bug#16144)

  • Added the --wait-timeout option to mysqlmanager to allow configuration of the timeout for dropping an inactive connection, and increased the default timeout from 30 seconds to 28,800 seconds (8 hours). (Bug#12674, Bug#15980)

  • All subpartitions within a given partitioned table are now guaranteed to have unique names. (Bug#15408)

  • Added the RENAME DATABASE statement.

  • The SQL mode in effect at the time an event is created or altered is recorded and used during event execution. (Bug#16407)

  • Added the PROCESSLIST table to INFORMATION_SCHEMA.

  • Attempting to read pre-5.1.6 partitioned tables with a MySQL 5.1.7 (or later) server now generates a suitable warning message. (Bug#16695)

    For additional information about this issue, see Section聽C.1.13, 鈥淐hanges in release 5.1.6 (01 February 2006)鈥.

  • NDB Cluster: Attempting to SELECT ... FROM INFORMATION_SCHEMA.FILES now raises a warning in the event that the cluster has crashed. (Bug#17087)

  • NDB Cluster: It is now possible to replicate NDB tables having no explicit primary key. See Section聽15.10, 鈥淢ySQL Cluster Replication鈥.

  • Removed the have_isam and have_raid system variables.

  • Status messages added to ndb_restore to allow users to know that data files for Disk Data are being created. (Bug#16873)

  • Added the IN NATURAL LANGUAGE MODE and IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION modifiers for full-text searches. See Section聽12.8, 鈥淔ull-Text Search Functions鈥.

  • Creator privileges are now checked for all events before execution. (Bug#17289)

  • CREATE EVENT, DROP EVENT, and ALTER EVENT statements are not allowed in triggers. (Bug#16410)

  • New charset command added to mysql command-line client. By typing charset name or \C name (such as \C UTF8), the client character set can be changed without reconnecting. (Bug#16217)

  • In row-based replication, when executing a Rows_log_event, the associated table was locked, the rows applied and the lock released. This did not work since there are storage engines that count locks and perform an autocommit when the number of locks reach zero. Now we ensure that all table maps come before all ROWS events in a statement.

Bugs fixed:

  • NDB Cluster: ndbd restart could sometimes fail due to incorrect memory access. (Bug#17417)

  • Execution times for scheduled events were not calculated correctly: the last execution time was used as a base rather than the actual start time. (Bug#17494)

  • Using an XPath expression containing = with ExtractValue() caused the server to crash. (Bug#16242)

  • NDB Cluster: An unhandled resources issue could cause node failure with a DELETE FROM TABLE affecting thousands of rows. (Bug#16492)

  • NDB Cluster: Cluster tables not having an explicit primary key could not be replicated. (Bug#14541)

  • For a transaction that used MyISAM and InnoDB tables, interruption of the transaction due to a dropped connection on a master server caused slaves to lose synchrony. (Bug#16559)

  • SELECT with GROUP BY on a view could cause a server crash. (Bug#16382)

  • SET TRANSACTION ISOLATION LEVEL acted like SET SESSION TRANSACTION ISOLATION LEVEL. That is, it set the isolation level for longer than the next transaction. (Bug#7955)

  • SHOW CREATE TABLE produced extraneous spaces after the PRIMARY KEY keywords. (Bug#13883)

  • If the query optimizer transformed a GROUP BY clause in a subquery, it did not also transform the HAVING clause if there was one, producing incorrect results. (Bug#16603)

  • SUBSTRING_INDEX() could yield inconsistent results when applied with the same arguments to consecutive rows in a query. (Bug#14676)

  • myisam_ftdump did not work for FULLTEXT indexes associated with a parser plugin. (Bug#17116)

  • BIT fields were not properly handled when using row-based replication. (Bug#13418)

  • Column counts were encoded incorrectly in the binary log for row-based logging format. (Bug#17678)

  • Data truncations on non-UNIQUE indexes could crash InnoDB when using multi-byte character sets. (Bug#17530)

  • An ALTER DATABASE statement on a replication master crashed the slaves. (Bug#17521)

  • Partitioning with certain SUBPARTITION BY HASH clauses caused an error when querying for a partitioned column using an IS NULL comparison. (Bug#17430, Bug#17432)

  • The mysql_fix_privilege_tables.sql script did not properly initialize the Event_priv column to 'Y' for those accounts that should have the EVENT privilege. (Bug#16400)

  • NDB Cluster: Inserting the output of REPEAT('some_string', some_int) into a BLOB column resulted in the error Invalid blob attributes or invalid blob parts table. (Bug#17505)

  • NDB Cluster: Row-based replication was not being set up correctly if a backup was already in progress. For example, connecting a mysqld instance to a cluster which was being backed up would result in the message NDB: skipping setup table test.t1 being written to the error log. (Bug#17459)

  • NDB Cluster: CREATE TEMPORARY TABLE of a Cluster table would fail with an Unsupported error or crash the server. (Bug#17210, Bug#16552)

  • NDB Cluster: UNIQUE keys in Cluster tables were limited to 225 bytes in length. (Bug#15918)

  • NDB Cluster: REPLACE failed when attempting to update a primary key value in a Cluster table. (Bug#14007)

  • NDB Cluster: Creating NDB tables containing BLOB columns but no primary key caused unpredictable behavior. (Bug#17559)

  • Creating an event and using a whitespace character other than space following the DO keyword caused a server crash. (Bug#17453)

  • Previously, a stored function invocation was written to the binary log as DO func_name() if the invocation changes data and occurs within a non-logged statement, or if the function invokes a stored procedure that produces an error. These invocations now are logged as SELECT func_name() instead for better control over error code checking (slave servers could stop due to detecting a different error than occurred on the master). (Bug#14769)

  • CHECKSUM TABLE returned different values on MyISAM table depending on whether the QUICK or EXTENDED options were used. (Bug#8841)

  • Querying the INFORMATION_SCHEMA.PARTITIONS table on a non-max server caused a server crash. This also happened following the creation of a table with a very large number (hundreds) of partitions. (Bug#16591, Bug#17141)

  • Attempting to add a new partition to a table partitioned by a unique key would cause an Out of memory error. (Bug#17169)

  • MySQL server dropped client connection for certain SELECT statements against views defined that used MERGE algorithm. (Bug#16260)

  • A statement containing GROUP BY and HAVING clauses could return incorrect results when the HAVING clause contained logic that returned FALSE for every row. (Bug#14927)

  • Using GROUP BY on column used in WHERE clause could cause empty set to be returned. (Bug#16203)

  • DROP DATABASE did not drop events for the database. (Bug#16406)

  • Race conditions between event creation, dropping, and execution could result in a server crash or hang. (Bug#17373)

  • SET sql_mode = N, where N > 31, did not work properly. (Bug#13897)

  • Repeated invocation of my_init() and my_end() caused corruption of character set data and connection failure. (Bug#6536)

  • When used with the ExtractValue() function, an XPath expression having no leading 鈥 / 鈥 character would crash the server. (Bug#16234)

  • A SELECT from the last partition of a subpartitioned table having a UNIQUE KEY could crash the MySQL Server. (Bug#16907)

  • A SELECT on a subpartitioned table having a multiple-column PRIMARY or UNIQUE KEY, and whose partitioning function used only the first column of the key, could cause mysqld to crash. (Bug#16901)

  • Using REPLACE INTO on a partitioned table having a primary key would crash the server in the event of a duplicate key error. (Bug#16782)

  • DROP TABLE would sometimes fail on a table having subpartitions that used the default storage engine. (Bug#16775)

  • NDB Cluster: Sharing of table names containing special characters between multiple SQL nodes was not handled correctly when binary logging was enabled (a timeout error resulted). (Bug#17415)

  • NDB Cluster: Table definitions were not shared between multiple SQL nodes in a cluster without binary logging being enabled. (Bug#17414)

  • NDB Cluster: Cluster log file paths were truncated to 128 characters. They may now be as long as MAX_PATH (the maximum path length permitted by the operating system). (Bug#17411)

  • SHOW CREATE EVENT displayed no output. (Bug#16423)

  • Statements that contained Unicode characters were not logged to the log tables correctly. (Bug#16905)

  • On Windows platforms, some attempts to create partitioned tables from the command line would cause the mysql client to hang. (Bug#17082)

  • NDB Cluster: SHOW CREATE TABLE would fail when run against a table created in a different session. (Bug#17340)

  • NDB Cluster: Following multiple forced shutdowns and restarts of data nodes, DROP DATABASE could fail. (Bug#17325)

  • NDB Cluster: An UPDATE with an inner join failed to match any records if both tables in the join did not have a primary key. (Bug#17257)

  • NDB Cluster: A DELETE with a join in the WHERE clause failed to retrieve any records if both tables in the join did not have a primary key. (Bug#17249)

  • The NDB Cluster storage engine did not allow views to be updated. (Bug#17206)

  • NDB Cluster: Row-based replication of a cluster failed to take --binlog_ignore_db settings into account. (Bug#17188)

  • Trying to create a partitioned table with more than 32 attributes failed. (Bug#17179)

  • NDB Cluster: When attempting to import data into an NDB table using LOAD DATA INFILE, the server would hang in the event of a duplicate key error. (Bug#17154)

  • NDB Cluster: In some cases, LOAD DATA INFILE did not load all data into NDB tables. (Bug#17081)

  • NDB Cluster: Performing large numbers of data manipulation statements on cluster tables using Disk Data could lead to a server crash. ()

  • NDB Cluster: In some cases, a cluster using Disk Data tables could not be restarted following a normal shutdown. (Bug#16872)

  • NDB Cluster: The REDO log would become corrupted (and thus unreadable) in some circumstances, due to a failure in the query handler. (Bug#17295)

  • NDB Cluster: CREATE TABLE new_tbl LIKE old_tbl; failed when old_tbl used the NDB storage engine. (Bug#17005)

  • NDB Cluster: No error message was generated for setting NoOfFragmentLogFiles too low. (Bug#13966)

  • NDB Cluster: No error message was generated for setting MaxNoOfAttributes too low. (Bug#13965)

  • The SELECT privilege was required for triggers that performed no selects. (Bug#15196)

  • The UPDATE privilege was required for triggers that performed no updates. (Bug#15166)

  • CAST(... AS TIME) operations returned different results when using versus not using prepared-statement protocol. (Bug#15805)

  • Killing a long-running query containing a subquery could cause a server crash. (Bug#14851)

  • InnoDB could display an incorrect error message for a cascading update. (Bug#9680)

  • A RETURN statement within a trigger caused a server crash. RETURN now is disallowed within triggers. To exit immediately, use LEAVE. (Bug#16829)

C.1.13.聽Changes in release 5.1.6 (01 February 2006)

Functionality added or changed:

  • Packaging changes: MySQL 5.1.6 introduces some changes to distribution packaging:

    • Distributions include both a mysqld optimized server and mysqld-debug debugging server. There is no separate debug distribution.

    • There is no longer a mysqld-max server. (Note: This changed in MySQL 5.1.9: The mysqld-max server also is included in binary distributions.)

    • Server binaries no longer are stripped, except for RPM distributions.

    • Binary distributions for Unix and Unix-like systems no longer include safe_mysqld as a link to mysqld_safe. safe_mysqld has been deprecated since MySQL 4.0 and now is removed.

  • Incompatible change: This release introduces the TRIGGER privilege. Previously, the SUPER privilege was needed to create or drop triggers. Now those operations require the TRIGGER privilege. This is a security improvement because you no longer need to grant users the SUPER privilege to enable them to create triggers. However, the requirement that the account named in a trigger's DEFINER clause must have the SUPER privilege has changed to a requirement for the TRIGGER privilege. After upgrading, be sure to update your grant tables as described in Section聽5.5.3, 鈥mysql_fix_privilege_tables 鈥 Upgrade MySQL System Tables鈥. This process assigns the TRIGGER privilege to all accounts that had the SUPER privilege. (After updating, you might also consider whether any of those accounts no longer need SUPER.) If you fail to update the grant tables, triggers may fail when activated. (Bug#9142)

  • Incompatible change: Before MySQL 5.1.6, the server writes general query log and slow query log entries to log files. As of MySQL 5.1.6, the server's logging capabilities for these logs are more flexible. Log entries can be written to log files (as before) or to the general_log and slow_log tables in the mysql database. If logging is enabled, either or both destinations can be selected. The --log-output option controls the destination or destinations of log output. See Section聽5.11.1, 鈥淪electing General Query and Slow Query Log Output Destinations鈥.

    If logging is enabled, the default destination now is to log to tables, which differs from earlier versions. If you had the server configured for logging to log files formerly, use --log-output=FILE to preserve this behavior after an upgrade to MySQL 5.1.6 or higher.

  • Incompatible change: Due to a change in the naming scheme for partitioning and subpartitioning files, it is not possible for the server to read partitioned tables created in previous MySQL versions. A suggested workaround is (1) to create a non-partitioned table with the same table schema using a standard CREATE TABLE statement (that is, with no partitioning clauses) and then (2) to issue a SELECT INTO to copy the data into the non-partitioned table before the upgrade; following the upgrade, you can partition the new table using ALTER TABLE ... PARTITION BY .... Alternatively, you can dump the table using mysqldump prior to upgrading and reload it afterwards with LOAD DATA. In either case, you should drop the pre-5.1.6 partitioned tables before upgrading to 5.1.6 or later. (Bug#13437)

    Important: If any partitioned tables that were created prior to MySQL 5.1.6 are present following an upgrade to MySQL 5.1.6 or later, it is also not possible to read from the INFORMATION_SCHEMA.PARTITIONS table, nor will you be able to drop those tables or the database or databases in which they are located. In this event, you must: (1) shut down mysqld; (2) manually delete the table, partition, and (if any) subpartition files; and then (3) restart the MySQL Server. (Bug#16695)

  • Incompatible change: Words with apostrophes are now matched in a FULLTEXT search against non-apostrophe words (for example, a search for Jerry will match against the term Jerry's). Users upgrading to this version must issue REPAIR TABLE statements for tables containing FULLTEXT indexes. (Bug#14194)

  • MySQL 5.1.6 introduces the Event Scheduler which allows one to schedule statements for execution at predetermined times. Events can be transient (one-time-only) or recurrent at regular intervals, and may execute queries and statements permitted in stored routines, including compound statements.

    Events can be altered after creation, and dropped when no longer needed.

    Information about scheduled events can be obtained using the statements SHOW EVENTS and SHOW CREATE EVENT, or by querying the INFORMATION_SCHEMA.EVENTS table. All of these are available beginning in MySQL 5.1.6.

    Users must have the EVENT privilege (also added in 5.1.6) to create events.

    For more information, see Chapter聽20, Event Scheduler.

  • Replication between MySQL Clusters is now supported. It is now also possible to replicate between a MySQL Cluster and a non-cluster database. See Section聽15.10, 鈥淢ySQL Cluster Replication鈥.

  • Special characters in database and table identifiers now are encoded when creating the corresponding directory names and filenames. This relaxes the restrictions on the characters that can appear in identifiers. See Section聽9.2.3, 鈥淢apping of Identifiers to Filenames鈥.

  • Queries against partitioned tables can now take advantage of partition pruning. In some cases, this can result in query execution that is an order of magnitude faster than the same query against a non-partitioned version of the same table.

  • The mysqldump utility now supports an option for dumping tablespaces. Use -Y or --all-tablespaces to enable this functionality. (Bug#16753)

  • Partition support is not an 鈥engine鈥, but it was included in the output of SHOW ENGINES. Now it is not. (Bug#14355) The have_partition_engine variable was renamed to have_partitioning. (Bug#16718)

  • ANALYZE TABLE is now supported for partitioned tables. (Bug#13441)

  • Added the event_scheduler system variable.

  • Added the ndb_extra_logging system variable.

  • Added the FILES table to INFORMATION_SCHEMA.

  • Added the EVENTS table to INFORMATION_SCHEMA.

  • Added the PARTITIONS table to INFORMATION_SCHEMA.

  • The ARCHIVE storage engine now supports the AUTO_INCREMENT column attribute and the AUTO_INCREMENT table option. Section聽14.10, 鈥淭he ARCHIVE Storage Engine鈥.

  • Added support for the CREATE INDEX and DROP INDEX statements to the NDB Cluster storage engine.

  • Server plugins can register their own status variables to be displayed by the SHOW STATUS statement.

Bugs fixed:

  • An indexing error sometimes caused values to be assigned to the wrong RANGE partition. (Bug#16684)

  • NDB Cluster: ndb_delete_all would run out of memory on tables containing BLOB columns. (Bug#16693)

  • Using the TRUNCATE() function with a negative number for the second argument on a BIGINT column returned incorrect results. (Bug#8461)

  • When the fulltext search parser plugin returned more words than half of the length (in bytes) of the query string, the server would crash. (Bug#16722)

  • Improper memory handling for stored routine variables could cause memory overruns and binary log corruption. (Bug#15588)

  • A FULLTEXT query in a prepared statement could result in unexpected behavior. (Bug#14496)

  • STR_TO_DATE(1,NULL) caused a server crash. (CVE-2006-3081, Bug#15828)

  • An INSERT statement in a stored procedure corrupted the binary log. (Bug#16621)

  • The mysql_real_connect() C API function incorrectly reset the MYSQL_OPT_RECONNECT option to its default value. (Bug#15719)

  • Specifying a value for --tmpdir without a trailing slash had unpredictable results. (Bug#15904)

  • Attempting to insert data into a partitioned table that used the BLACKHOLE storage engine caused mysqld to crash. (Bug#14524)

  • Using RANGE partitioning with a CASE statement as the partitioning function would cause records to be placed in the wrong partition. (Bug#15393)

  • ALTER TABLE ... ADD PARTITIONS on a table with one partition crashed the server. (Bug#15820)

  • NDB Cluster returned incorrect Can't find file error for OS error 24, changed to Too many open files. (Bug#15020)

  • Multi-byte path names for LOAD DATA and SELECT ... INTO OUTFILE caused errors. Added the character_set_filesystem system variable, which controls the interpretation of string literals that refer to filenames. (Bug#12448)

  • Certain subqueries where the inner query is the result of a aggregate function would return different results on MySQL 5.0 than on MySQL 4.1. (Bug#15347)

  • The error message for specifying values for which no partition exists returned wrong values on certain platforms. (Bug#15910)

  • Certain Japanese table names were not properly saved during a CREATE TABLE statement. (Bug#3906)

  • NDB Cluster leaked disk space when performing INSERTS/DELETES in a loop. (Bug#16771)

  • NDB Cluster returned wrong error when tablespace on disk was full. (Bug#16738)

  • The DATA DIRECTORY and INDEX DIRECTORY clauses of a CREATE TABLE statement involving partitions did not work. (Bug#14354)

  • Subselect could return wrong results when records cache and grouping was involved. (Bug#15347)

  • In some cases the query optimizer did not properly perform multiple joins where inner joins followed left joins, resulting in corrupted result sets. (Bug#15633)

  • The absence of a table in the left part of a left or right join was not checked prior to name resolution, which resulted in a server crash. (Bug#15538)

  • NDB Cluster: Trying to import too many dumped tables requiring resources beyond those allocated in the cluster configuration would cause the server to crash instead of reporting an insufficient resources error. (Bug#16455)

  • NDB Cluster (Disk Data): Tablespaces created using parameters with relatively low values (< 10 MB) produced filesizes much smaller than expected. (Bug#16742)

  • NDB Cluster: CREATE TABLESPACE statements were incorrectly parsed on 64-bit platforms. (INITIAL SIZE size worked, but INITIAL SIZE = size failed.) (Bug#13556)

  • Trying to add more than one partition in a single ALTER TABLE ... ADD PARTITION statement caused the server to crash. (Bug#16534)

  • Creating a partitioned table using a storage engine other than the session default storage engine caused the server to crash. (Bug#15966)

  • An ALTER TABLE ... PARTITION BY ... statement did not have any effect. (Bug#15523)

  • NDBCluster (Disk Data): The error message generated by a failed ADD UNDOFILE did not provide any reasons for the failure. (Bug#16267)

  • NDBCluster (Disk Data): DROP LOGFILE GROUP corrupted the cluster file system and caused ndbd to fail when running more than one node on the same system. (Bug#16193)

  • NDBCluster: A bitfield whose offset and length totaled 32 would crash the cluster. (Bug#16125)

  • NDBCluster: Upon the completion of a scan where a key request remained outstanding on the primary replica and a starting node died, the scan did not terminate. This caused incompleted error handling of the failed node. (Bug#15908)

  • NDBCluster: The ndb_autodiscover test failed sporadically due to a node not being permitted to connect to the cluster. (Bug#15619)

  • Using mysqldump to obtain a dump of a partitioned table employing the NDB storage engine produced a non-functional table creation statement. (Bug#13155)

  • SHOW CREATE TABLE did not display the PARTITIONS clause for tables partitioned by HASH or KEY. (Bug#14327)

  • Inserting a negative value into an integer column used as the partitioning key for a table partitioned by HASH could cause the server to crash. (Bug#15968)

  • With a table partitioned by LIST, inserting a value which was smaller than any value shown in the partitioning value-lists could cause the server to crash. (Bug#14365)

  • ALTER TABLE ... DROP PARTITION would truncate all DATE column values in the table's remaining partitions to NULL. (Bug#13644)

  • ALTER TABLE ... ADD PARTITION could crash the server or cause an Out of memory error in some circumstances. (Bug#13447)

  • The server would allow foreign keys to be declared in the definition of a partitioned table despite the fact that partitioned tables do not support foreign keys (see Section聽16.5, 鈥淩estrictions and Limitations on Partitioning鈥). (Bug#13446)

  • A SELECT from a key-partitioned table with a multi-column key could cause the server to crash. (Bug#13445)

  • Issuing a TRUNCATE statement twice in succession on the same partitioned table would cause the server to crash. (Bug#13442)

  • Using a REPLACE statement on a partitioned table caused the server to crash. (Bug#13440)

  • Using an identifier rather than a literal integer value in the LESS THAN clause of a range-partitioned table could cause the server to crash and corruption of tables. (Bug#13439)

  • Using ENGINE=... within a PARTITION clause could cause the server to crash. (Bug#13438)

  • CREATE TABLE ... LIKE did not work if the table whose schema was to be copied was a partitoned table. (Bug#13435)

  • SHOW CREATE TABLE did not display the PARTITIONS clause for tables partitioned by HASH or KEY. (Bug#14327)

  • Certain permission management statements could create a NULL hostname for a user, resulting in a server crash. (Bug#15598)

  • Temporary table aliasing did not work inside stored functions. (Bug#12198)

  • Parallel builds occasionally failed on Solaris. (Bug#16282)

C.1.14.聽Changes in release 5.1.5 (10 January 2006)

Functionality added or changed:

  • Added the INFORMATION_SCHEMA ENGINES table.

  • Added the INFORMATION_SCHEMA PLUGINS table and the SHOW PLUGIN statement.

  • Added the binlog_format system variable that controls whether to use row-based or statement-based binary logging. Added the --binlog-format and --binlog-row-event-max-size server options for binary logging control. See Section聽6.1.2, 鈥淩eplication Formats鈥.

  • Plugins now can have status variables that are displayed in the output from SHOW STATUS. See Section聽26.2.5, 鈥淲riting Plugins鈥.

  • Added the XML functions ExtractValue() and UpdateXML(). ExtractValue() returns the content of a fragment of XML matching a given XPath expression. UpdateXML() replaces the element selected from a fragment of XML by an XPath expression supplied by the user with a second XML fragment (also user-supplied), and returns the modified XML. See Section聽12.10, 鈥淴ML Functions鈥.

  • Added the --base64-output option to mysqlbinlog to print all binary log entries using base64 encoding. This is for debugging only. Logs produced using this option should not be applied on production systems.

  • Added the --port-open-timeout option to mysqld to control how many seconds the server should wait for the TCP/IP port to become free if it cannot be opened. (Bug#15591)

  • Two new Hungarian collations are included: utf8_hungarian_ci and ucs2_hungarian_ci. These support the correct sort order for Hungarian vowels. However, they do not support the correct order for sorting Hungarian consonant contractions; this issue will be fixed in a future release.

Bugs fixed:

  • InnoDB: An UPDATE statement with no index column in the WHERE condition locked all the rows in the table. (Bug#3300)

  • INSERT DELAYED caused mysqld to crash. (Bug#16095)

  • The output of mysqldump --triggers did not contain the DEFINER clause in dumped trigger definitions. (Bug#15110)

  • The output of SHOW TRIGGERS contained extraneous whitespace. (Bug#15103)

  • An INSERT ... SELECT statement between tables in a MERGE set can return errors when statement involves insert into child table from merge table or vice-versa. (Bug#5390)

  • A COMMIT statement followed by a ALTER TABLE statement on a BDB table caused server crash. (Bug#14212)

  • InnoDB: Comparison of indexed VARCHAR CHARACTER SET ucs2 COLLATE ucs2_bin columns using LIKE could fail. (Bug#14583)

  • Creating a trigger caused a server crash if the table or trigger database was not known because no default database had been selected. (Bug#14863)

  • Issuing a DROP USER command could cause some users to encounter a hostname is not allowed to connect to this MySQL server error. (Bug#15775)

  • The --plugin_dir option was not working. Also fix error with specifying parser name for fulltext. (Bug#16068)

  • Attempting to insert into a table partitioned by LIST a value less than any specified in one of the table's partition definitions resulted in a server crash. In such cases, mysqld now returns ERROR 1500 (HY000): Table has no partition for value v , where v is the out-of-range value. (Bug#15819)

C.1.15.聽Changes in release 5.1.4 (21 December 2005)

Functionality added or changed:

  • Added the mysqlslap program, which is designed to emulate client load for a MySQL server and report the timing of each stage. It works as if multiple clients are accessing the server.

  • Added the --server-id option to mysqlbinlog to enable only those events created by the server having the given server ID to be extracted. (Bug#15485)

  • It is now possible to build the server such that MyISAM tables can support up to 128 keys rather than the standard 64. This can be done by configuring the build using the option --with-max-indexes=N, where N鈮128 is the maximum number of indexes to permit per table. (Bug#10932)

  • The bundled BDB library was upgraded to version 4.4.16.

  • Added the cp1250_polish_ci collation for the cp1250 character set.

  • Added the myisam_use_mmap system variable.

  • Added the --bdb-data-direct and --bdb-log-direct server options.

Bugs fixed:

  • SHOW ENGINES output showed the FEDERATED engine as DISABLED even for builds with FEDERATED support. (Bug#15559)

  • Server could not be built on default Debian systems with BDB enabled. (Bug#15734)

  • BDB: A DELETE, INSERT, or UPDATE of a BDB table could cause the server to crash where the query contained a subquery using an index read. (Bug#15536)

  • A left join on a column that having a NULL value could cause the server to crash. (Bug#15268)

  • It was not possible to reorganize a partition reusing a discarded partition name.

    Now, for example, you can create a table such as this one:

    CREATE TABLE t1 (a INT) 
        PARTITION BY RANGE (a) (
          PARTITION p0 VALUES LESS THAN (10),
          PARTITION p1 VALUES LESS THAN (20),
          PARTITION p2 VALUES LESS THAN MAXVALUE
        );
    

    and then repartition it as shown here:

    ALTER TABLE t1 REORGANIZE PARTITION p2 INTO (
        PARTITION p2 VALUES LESS THAN (30)
    );
    

    Previously, attempting to do so would produce the error All partitions must have unique names in the table . (Bug#15521)

  • NDB Cluster: The --ndb option for perror did not function. (Bug#15486)

  • The BLACKHOLE storage engine did not handle transactions properly: Rolled-back transactions were written to the binary log. Now they ae not. (Bug#15406)

  • NDB Cluster: Using ORDER BY primary_key_column when selecting from a table having the primary key on a VARCHAR column caused a forced shutdown of the cluster. (Bug#14828, Bug#15240, Bug#15682, Bug#15517)

  • ANALYZE TABLE did not properly update table statistics for a MyISAM table with a FULLTEXT index containing stopwords, so a subsequent ANALYZE TABLE would not recognize the table as having already been analyzed. (Bug#14902)

  • The maximum value of MAX_ROWS was handled incorrectly on 64-bit systems. (Bug#14155)

  • Multiple-table update operations were counting updates and not updated rows. As a result, if a row had several updates it was counted several times for the 鈥rows matched鈥 value but updated only once. (Bug#15028)

  • SELECT queries that began with an opening parenthesis were not being placed in the query cache. (Bug#14652)

  • Space truncation was being ignored when inserting into BINARY or VARBINARY columns. Now space truncation results in a warning, or an error in strict mode. (Bug#14299)

  • Selecting from a view processed with the temptable algorithm caused a server crash if the query cache was enabled. (Bug#15119)

  • Creating a view that referenced a stored function that selected from a view caused a crash upon selection from the view. (Bug#15096)

  • Creating a view within a stored procedure could result in an out of memory error or a server crash. (Bug#14885)

  • SHOW CREATE DATABASE was sometimes refused when the client had privileges for the database. (Bug#9785)

  • mysql ignored the MYSQL_TCP_PORT environment variable. (Bug#5792)

  • ROW_COUNT() returned an incorrect result after EXECUTE of a prepared statement. (Bug#14956)

  • Invalid casts to DATE values now result in a message of Incorrect datetime value, rather than Truncated incorrect datetime value. (Bug#8294)

  • Attempts to assign NULL to a NOT NULL column in strict mode now result in a message of Column 'col_name' cannot be null, rather than Column set to default value; NULL supplied to NOT NULL column 'col_name' at row n. (Bug#11491)

  • For binary string data types, mysqldump --hex-blob produced an illegal output value of 0x rather than ''. (Bug#13318)

  • Some comparisons for the IN() operator were inconsistent with equivalent comparisons for the = operator. (Bug#12612)

C.1.16.聽Changes in release 5.1.3 (29 November 2005)

Functionality added or changed:

This is the first public alpha release of the current MySQL 5.1 development branch, providing an insight to upcoming features. Although some of these are still under heavy development, this release includes the following new features and changes (in comparison to the current MySQL 5.0 production release):

  • Partitioning: allows distributing portions of individual tables across a filesystem, according to rules which can be set when the table is created. In effect, different portions of a table are stored as separate tables in different locations, but from the user point of view, the partitioned table is still a single table. See Chapter聽16, Partitioning, for further information on this functionality. (Author: Mikael Ronstr枚m)

  • Plugin API: MySQL 5.1 adds support for a very flexible plugin API that enables loading and unloading of various components at runtime, without restarting the server. Although the work on this is not finished yet, plugin full-text parsers are a first step in this direction. This allows users to implement their own input filter on the indexed text, enabling full-text search capability on arbitrary data such as PDF files or other document formats. A pre-parser full-text plugin performs the actual parsing and extraction of the text and hands it over to the built-in MySQL full-text search. (Author: Sergey Vojtovich)

    The plugin API requires the mysql.plugin table. When upgrading from an older version of MySQL, you should run the mysql_fix_privilege_tables command to create this table. See Section聽5.5.3, 鈥mysql_fix_privilege_tables 鈥 Upgrade MySQL System Tables鈥.

    Incompatible change: Plugins are installed in the directory named by the plugin_dir system variable. This variable also controls the location from which the server loads user-defined functions (UDFs), which is a change from earlier versions of MySQL. That is, all UDF library files now must be installed in the plugin directory. When upgrading from an older version of MySQL, you must migrate your UDF files to the plugin directory.

  • The Instance Manager (IM) now has some additional functionality:

    • SHOW instance_name LOG FILES provides a listing of all log files used by the instance. (Author: Petr Chardin)

    • SHOW instance_name LOG {ERROR | SLOW | GENERAL} size retrieves a part of the specified log file. (Author: Petr Chardin)

    • SET instance_name. option_name=option_value sets an option to the specified value and writes it to the config file See Section聽5.4, 鈥mysqlmanager 鈥 The MySQL Instance Manager鈥, for more details on these new commands. (Author: Petr Chardin)

  • The performance of boolean full-text searches (using the 鈥+鈥 Operator) has been improved. See Section聽12.8, 鈥淔ull-Text Search Functions鈥, for more details about full-text searching. (Author: Sergey Vojtovich)

  • VARCHAR fields used in MySQL Cluster tables are now variable-sized; that is, they now only allocate as much space as required to store the data. Previously, a VARCHAR(n) column allocated n+2 bytes (aligned to 4 bytes), regardless if the actual inserted value required that much space. (In other words, a VARCHAR column always required the same, fixed, amount of storage as a CHAR column of the same size.)

  • Renamed the table_cache system variable to table_open_cache. Any scripts that refer to table_cache should be updated to use the new name.

  • Added the table_definition_cache system variable. If you use a large number of tables, you can create a large table definition cache to speed up opening of tables. The table definition cache takes less space and does not use file descriptors, unlike the normal table cache.

  • Added the SHOW AUTHORS statement.

  • Added the SHOW FUNCTION CODE and SHOW PROCEDURE CODE statements (available only for servers that have been built with debugging support). See Section聽13.5.4.22, 鈥SHOW PROCEDURE CODE and SHOW FUNCTION CODE Syntax鈥.

  • RAND() no longer allows non-constant initializers. (Prior to MySQL 5.0.13, the effect of non-constant initializers is undefined.) (Bug#6172)

Bugs fixed:

  • Set functions could not be aggregated in outer subqueries. (Bug#12762)

C.1.17.聽Changes in release 5.1.2 (Not released)

Functionality added or changed:

  • Added MAXLOCKS, MINLOCKS, MAXWRITE, and MINWRITE as allowable values of the --bdb-lock-detect option. (Bug#14876)

  • Added the bdb_cache_parts and bdb_region_size system variables, and allowed bdb_cache_size to be larger than 4GB on systems that support it. (Bug#14895)

  • Added Transactions, XA, and Savepoints columns to SHOW ENGINES output.

  • Added --replace to mysqldump. This option uses REPLACE INTO, rather than INSERT INTO, when writing the dumpfile.

Bugs fixed:

  • Foreign keys were not properly enforced in TEMPORARY tables. Foreign keys now are disallowed in TEMPORARY tables. (Bug#12084)

C.1.18.聽Changes in release 5.1.1 (Not released)

Bugs fixed:

  • Performing a CREATE TABLE statement with a PARTITION BY clause in a prepared statement could crash a server running in debug mode. (Bug#12097)

  • NDB: Specifying the wrong nodegroup in a CREATE TABLE using partitioning would lead to the table name being locked after the CREATE TABLE statement failed (that is, the table name could not be re-used). (Bug#12114)

  • Using ORDER BY in a query with a partitioned table on a 64-bit operating system could crash the server. (Bug#12116)

  • When two threads competed for the same table, a deadlock could occur if one thread also had a lock on another table through LOCK TABLES and the thread was attempting to remove the table in some manner while the other thread tried to place locks on both tables. (Bug#10600)

C.2.聽MySQL Connector/ODBC (MyODBC) Change History

C.2.1.聽Changes in Connector/ODBC 5.0.11 (31 January 2007)

Functionality added or changed:

  • Driver now builds and is partially tested under Linux with the iODBC driver manager.

  • Added support for ODBC v2 statement options using attributes.

Bugs fixed:

  • Internal function, my_setpos_delete_ignore() could cause a crash. (Bug#22796)

  • Updates of MEMO or TEXT columns from within Microsoft Access would fail. (Bug#25263)

  • Transaction support has been added and tested. (Bug#25045)

  • Connection string parsing for DSN-less connections could fail to identify some parameters. (Bug#25316)

  • Fixed occasional mis-handling of the SQL_NUMERIC_C type.

  • Fixed the binding of certain integer types.

C.2.2.聽Changes in Connector/ODBC 5.0.10 (14 December 2006)

Connector/ODBC 5.0.10 is the sixth BETA release.

Functionality added or changed:

  • Added wide-string type info for SQLGetTypeInfo().

  • Added loose handling of retrieving some diagnostic data. (Bug#15782)

  • Added initial support for removing braces when calling stored procedures and retrieving result sets from procedure calls. (Bug#24485)

  • Added initial unicode support in data and metadata. (Bug#24837)

  • Significant performance improvement when retrieving large text fields in pieces using SQLGetData() with a buffer smaller than the whole data. Mainly used in Access when fetching very large text fields. (Bug#24876)

Bugs fixed:

  • String query parameters are new escaped correctly. (Bug#19078)

  • Editing DSN no longer crashes ODBC data source administrator. (Bug#24675)

C.2.3.聽Changes in Connector/ODBC 5.0.9 (22 November 2006)

Connector/ODBC 5.0.9 is the fifth BETA release.

This is an implementation and testing release, and is not designed for use within a production environment.

Functionality added or changed:

  • Added recognition of SQL_C_SHORT and SQL_C_TINYINT as C types.

  • Added support for column binding as SQL_NUMBERIC_STRUCT.

Bugs fixed:

  • Fixed wildcard handling of and listing of catalogs and tables in SQLTables.

  • Catch use of SQL_ATTR_PARAMSET_SIZE and report error until we fully support.

  • Corrected retrieval multiple field types bit and blob/text.

  • Fixed buffer length return for SQLDriverConnect.

  • Added limit of display size when requested via SQLColAttribute/SQL_DESC_DISPLAY_SIZE.

  • Fixed statistics to fail if it couldn't be completed.

  • Fixed SQLGetData to clear the NULL indicator correctly during multiple calls.

  • ODBC v2 behaviour in driver now supports ODBC v3 date/time types (since DriverManager maps them).

C.2.4.聽Changes in Connector/ODBC 5.0.8 (17 November 2006)

Connector/ODBC 5.0.8 is the fourth BETA release.

This is an implementation and testing release, and is not designed for use within a production environment.

Functionality added or changed:

  • Made distinction between CHAR/BINARY (and VAR versions).

  • Wildcards now support escaped chars and underscore matching (needed to link tables with underscores in access).

  • Also made SQL_DESC_NAME only fill in the name if there was a data pointer given, otherwise just the length.

  • Fixed display size to be length if max length isn鈥檛 available.

Bugs fixed:

  • Length now used when handling bind parameter (needed in particular for SQL_WCHAR) - this enables updating char data in MS Access.

  • Fixed string length to chars, not bytes, returned by SQLGetDiagRec.

  • Fixed using wrong pointer for SQL_MAX_DRIVER_CONNECTIONS in SQLGetInfo.

  • Fixed binding using SQL_C_LONG.

  • Allow SQLDescribeCol to be called to retrieve the length of the column name, but not the name itself.

  • Fix size return from SQLDescribeCol.

  • Fixed hanlding of numeric pointers in SQLColAttribute.

  • Fixed type returned for MYSQL_TYPE_LONG to SQL_INTEGER instead of SQL_TINYINT.

  • Fixed MDiagnostic to use correct v2/v3 error codes.

  • Set default return to SQL_SUCCESS if nothing is done for SQLSpecialColumns.

  • Updated retrieval of descriptor fields to use the right pointer types.

C.2.5.聽Changes in Connector/ODBC 5.0.7 (08 November 2006)

Connector/ODBC 5.0.7 is the third BETA release.

This is an implementation and testing release, and is not designed for use within a production environment.

Functionality added or changed:

  • Improved trace/log.

  • Added support for SQLStatistics to MYODBCShell.

Bugs fixed:

  • Fixed SQLDescribeCol returning column name length in bytes rather than chars.

  • SQLBindParameter now handles SQL_C_DEFAULT.

  • Corrected incorrect column index within SQLStatistics. Many more tables can now be linked into MS Access.

C.2.6.聽Changes in Connector/ODBC 5.0.6 (03 November 2006)

Connector/ODBC 5.0.6 is the second BETA release.

This is an implementation and testing release, and is not designed for use within a production environment.

Features, limitations and notes on this release:

  • You no longer have to have Connector/ODBC 3.51 installed before installing this version.

  • Installation is provided in the form of a standard Microsoft System Installer (MSI).

  • Connector/ODBC supports both User and System DSNs.

C.2.7.聽Changes in Connector/ODBC 5.0.5 (17 October 2006)

Connector/ODBC 5.0.5 is the first BETA release.

This is an implementation and testing release, and is not designed for use within a production environment.

Features, limitations and notes on this release:

  • You no longer have to have Connector/ODBC 3.51 installed before installing this version.

C.2.8.聽Changes in Connector/ODBC 5.0.3 (Connector/ODBC 5.0 Alpha 3) (20 June 2006)

This is an implementation and testing release, and is not designed for use within a production environment.

Features, limitations and notes on this release:

  • The following ODBC API functions have been added in this release:

    • SQLBindParameter

    • SQLBindCol

C.2.9.聽Changes in Connector/ODBC 5.0.2 (Never released)

Connector/ODBC 5.0.2 was an internal implementation and testing release.

C.2.10.聽Changes in Connector/ODBC 5.0.1 (Connector/ODBC 5.0 Alpha 2) (05 June 2006)

Features, limitations and notes on this release:

  • Connector/ODBC 5.0 is Unicode aware.

  • Connector/ODBC is currently limited to basic applications. ADO applications and Microsoft Office are not supported.

  • Connector/ODBC must be used with a Driver Manager.

  • The following ODBC API functions are implemented:

    • SQLAllocHandle

    • SQLCloseCursor

    • SQLColAttribute

    • SQLColumns

    • SQLConnect

    • SQLCopyDesc

    • SQLDisconnect

    • SQLExecDirect

    • SQLExecute

    • SQLFetch

    • SQLFreeHandle

    • SQLFreeStmt

    • SQLGetConnectAttr

    • SQLGetData

    • SQLGetDescField

    • SQLGetDescRec

    • SQLGetDiagField

    • SQLGetDiagRec

    • SQLGetEnvAttr

    • SQLGetFunctions

    • SQLGetStmtAttr

    • SQLGetTypeInfo

    • SQLNumResultCols

    • SQLPrepare

    • SQLRowcount

    • SQLTables

    The following ODBC API function are implemented, but not yet support all the available attributes/options:

    • SQLSetConnectAttr

    • SQLSetDescField

    • SQLSetDescRec

    • SQLSetEnvAttr

    • SQLSetStmtAttr

C.2.11.聽Changes in Connector/ODBC 3.51.15 (Not yet released)

Bugs fixed:

  • When using blobs and parameter replacement in a statement with WHERE CURSOR OF, the SQL is truncated. (Bug#5853)

  • The SQLTransact() function did not support an empty connection handle. (Bug#21588)

C.2.12.聽Changes in Connector/ODBC 3.51.14 (08 March 2007)

Functionality added or changed:

  • Use of SQL_ATTR_CONNECTION_TIMEOUT on the server has now been disabled. If you attempt to set this attribute on your connection the SQL_SUCCESS_WITH_INFO will be returned, with an error number/string of HYC00: Optional feature not supported. (Bug#19823)

  • Added support for the HENV handlers in SQLEndTran().

  • Added auto-reconnect option to Connector/ODBC option parameters.

  • Added auto is null option to Connector/ODBC option parameters. (Bug#10910)

Bugs fixed:

  • A string format exception would be raised when using iODBC, Connector/ODBC and the embedded MySQL server. (Bug#16535)

  • When retrieving data from columns that have been compressed using COMPRESS(), the retrived data would be truncated to 8KB. (Bug#20208)

  • When retrieving TIME columns, C/ODBC would incorrectly interpret the type of the string and could interpret it as a DATE type instead. (Bug#25846)

  • On 64-bit systems, some types would be incorrectly returned. (Bug#26024)

  • Using DataAdapter, Connector/ODBC may continually consume memory when reading the same records within a loop (Windows Server 2003 SP1/SP2 only). (Bug#20459)

  • Connector/ODBC may insert the wrong parameter values when using prepared statements under 64-bit Linux. (Bug#22446)

  • Using Connector/ODBC, with SQLBindCol and binding the length to the return value from SQL_LEN_DATA_AT_EXEC fails with a memory allocation error. (Bug#20547)

  • The SQLDriverConnect() ODBC method did not work with recent Connector/ODBC releases. (Bug#12393)

C.2.13.聽Changes in Connector/ODBC 3.51.13 (Never released)

Connector/ODBC 3.51.13 was an internal implementation and testing release.

C.2.14.聽Changes in Connector/ODBC 3.51.12

Functionality added or changed:

  • N/A

Bugs fixed:

  • File DSNs could not be saved. (Bug#12019)

  • SQLColumns() returned no information for tables that had a column named using a reserved word. (Bug#9539)

C.2.15.聽Changes in Connector/ODBC 3.51.11

Functionality added or changed: No changes.

Bugs fixed:

  • mysql_list_dbcolumns() and insert_fields() were retrieving all rows from a table. Fixed the queries generated by these functions to return no rows. (Bug#8198)

  • SQLGetTypoInfo() returned tinyblob for SQL_VARBINARY and nothing for SQL_BINARY. Fixed to return varbinary for SQL_VARBINARY, binary for SQL_BINARY, and longblob for SQL_LONGVARBINARY. (Bug#8138)

C.3.聽Connector/NET Change History

C.3.1. Changes in MySQL Connector/NET Version 5.0.7 (Not yet released)
C.3.2. Changes in MySQL Connector/NET Version 5.0.6 (22 March 2007)
C.3.3. Changes in MySQL Connector/NET Version 5.0.5 (07 March 2007)
C.3.4. Changes in MySQL Connector/NET Version 5.0.4 (Not released)
C.3.5. Changes in MySQL Connector/NET Version 5.0.3 (05 January 2007)
C.3.6. Changes in MySQL Connector/NET Version 5.0.2 (06 November 2006)
C.3.7. Changes in MySQL Connector/NET Version 5.0.1 (01 October 2006)
C.3.8. Changes in MySQL Connector/NET Version 5.0.0 (08 August 2006)
C.3.9. Changes in MySQL Connector/NET Version 1.0.10 (Not yet released)
C.3.10. Changes in MySQL Connector/NET Version 1.0.9 (02 February 2007
C.3.11. Changes in MySQL Connector/NET Version 1.0.8 (20 October 2006)
C.3.12. Changes in MySQL Connector/NET Version 1.0.7 (21 November 2005)
C.3.13. Changes in MySQL Connector/NET Version 1.0.6 (03 October 2005)
C.3.14. Changes in MySQL Connector/NET Version 1.0.5 (29 August 2005)
C.3.15. Changes in MySQL Connector/NET Version 1.0.4 (20 January 2005)
C.3.16. Changes in MySQL Connector/NET Version 1.0.3-gamma (12 October 2004)
C.3.17. Changes in MySQL Connector/NET Version 1.0.2-gamma (15 November 2004)
C.3.18. Changes in MySQL Connector/NET Version 1.0.1-beta2 (27 October 2004)
C.3.19. Changes in MySQL Connector/NET Version 1.0.0 (01 September 2004)
C.3.20. Changes in MySQL Connector/NET Version 0.9.0 (30 August 2004)
C.3.21. Changes in MySQL Connector/NET Version 0.76
C.3.22. Changes in MySQL Connector/NET Version 0.75
C.3.23. Changes in MySQL Connector/NET Version 0.74
C.3.24. Changes in MySQL Connector/NET Version 0.71
C.3.25. Changes in MySQL Connector/NET Version 0.70
C.3.26. Changes in MySQL Connector/NET Version 0.68
C.3.27. Changes in MySQL Connector/NET Version 0.65
C.3.28. Changes in MySQL Connector/NET Version 0.60
C.3.29. Changes in MySQL Connector/NET Version 0.50

C.3.1.聽Changes in MySQL Connector/NET Version 5.0.7 (Not yet released)

Bugs fixed:

  • The CreateFormat column of the DataTypes collection did not contain a format specification for creating a new column type. (Bug#25947)

  • The characterset property would not be identified during a connection (also affected Visual Studion Plugin). (Bug#27240, Bug#26147)

  • When cloning an open MySqlClient.MySqlConnection with the Persist Security Info=False option set, the cloned connection is not usable because the security information has not been cloned. (Bug#27269)

  • If you close an open connection with an active transaction, the transaction is not automatically rolled back. (Bug#27289)

C.3.2.聽Changes in MySQL Connector/NET Version 5.0.6 (22 March 2007)

Bugs fixed:

  • MySqlParameterCollection and parameters added with Insert method can not be retrieved later using ParameterName. (Bug#27135)

  • Publisher listed in "Add/Remove Programs" is not consistent with other MySQL products. (Bug#27253)

  • cmd.Parameters.RemoveAt("Id") will cause an error if the last item is requested. (Bug#27187)

  • Exception thrown when using large values in UInt64 parameters. (Bug#27093)

  • DESCRIBE .... SQL command returns byte arrays rather than data on MySQL versions older than 4.1.15. (Bug#27221)

  • MySQL Visual Studio Plugin 1.1.2 does not work with Connector/Net 5.0.5. (Bug#26960)

C.3.3.聽Changes in MySQL Connector/NET Version 5.0.5 (07 March 2007)

Functionality added or changed:

  • Return parameters created with DeriveParameters now have the name RETURN_VALUE.

  • Fixed problem with parameter name hashing where the hashes were not getting updated when parameters were removed from the collection.

  • Fixed problem with calling stored functions when a return parameter was not given.

  • Fixed problem that prevented use of SchemaOnly or SingleRow command behaviors with stored procedures or prepared statements.

  • Assembly now properly appears in the Visual Studio 2005 Add/Remove Reference dialog.

  • Added MySqlParameterCollection.AddWithValue and marked the Add(name, value) method as obsolete.

  • Added Use Procedure Bodies connection string option to allow calling procedures without using procedure metadata.

  • Reverted behavior that required parameter names to start with the parameter marker. We apologize for this back and forth but we mistakenly changed the behavior to not match what SqlClient supports. We now support using either syntax for adding parameters however we also respond exactly like SqlClient in that if you ask for the index of a parameter using a syntax different than you added the parameter, the result will be -1.

Bugs fixed:

  • The UpdateRowSource.FirstReturnedRecord method does not work. (Bug#25569)

  • A critical ConnectionPool error would result in repeated System.NullReferenceException. (Bug#25603)

  • Applications would crash when calling with CommandType set to StoredProcedure.

  • BINARY and VARBINARY columns would be returned as a string, not binary, datatype. (Bug#25605)

  • MySqlConnection.GetSchema fails with NullReferenceException for Foreign Keys. (Bug#26660)

  • When a MySqlConversionException is raised on a remote object, the client application would receive a SerializationException instead. (Bug#24957)

  • High CPU utilization would be experienced when there is no idle connection waiting when using pooled connections through MySqlPool.GetConnection. (Bug#24373)

  • Connector/NET would not compile properly when used with Mono 1.2. (Bug#24263)

  • Opening a connection would be slow due to hostname lookup. (Bug#26152).

  • Connector/NET would fail to install under Windows Vista. (Bug#26430)

  • Incorrect values/formats would be applied when the OldSyntax connection string option was used. (Bug#25950)

  • Registry would be incorrectly populated with installation locations. (Bug#25928)

  • Filling a table schema through a stored procedure triggers a runtime error. (Bug#25609)

  • MySqlConnection throws an exception when connecting to MySQL v4.1.7. (Bug#25726)

  • Returned data types of a DataTypes collection do not contain the right correctl CLR Datatype. (Bug#25907)

  • GetSchema and DataTypes would throw an exception due to an incorrect table name. (Bug#25906)

  • Times with negative values would be returned incorrectly. (Bug#25912)

  • SELECT did not work correctly when using a WHERE clause containing a UTF-8 string. (Bug#25651)

  • When closing and then re-opening a connection to a database, the character set specification is lost. (Bug#25614)

  • When connecting to a MySQL Server earlier than version 4.1, the connection would hang when reading data. (Bug#25458)

  • When connecting to a server, the return code from the connection could be zero, even though the hostname was incorrect. (Bug#24802)

  • Using ExecuteScalar() with more than one query, where one query fails, will hang the connection. (Bug#25443)

C.3.4.聽Changes in MySQL Connector/NET Version 5.0.4 (Not released)

Connector/NET Version 5.0.4 was not released due to an incomplete bug fix.

C.3.5.聽Changes in MySQL Connector/NET Version 5.0.3 (05 January 2007)

Functionality added or changed:

  • SSL support has been updated.

  • The ViewColumns GetSchema collection has been updated.

  • The CommandBuilder.DeriveParameters function has been updated to the procedure cache.

  • Improved speed and performance by re-architecting certain sections of the code.

  • Usage Advisor has been implemented. The Usage Advisor checks your queries and will report if you are usiing the connection inefficiently.

  • The MySqlCommand object now supports asynchronous query methods. This is implemented useg the BeginExecuteNonQuery and EndExecuteNonQuery methods.

  • Metadata from storaed procedures and stored function execution are cached.

  • PerfMon hooks have been added to monitor the stored procedure cache hits and misses.

  • The ShapZipLib library has been replaced with the deflate support provided within .NET 2.0.

  • Support for the embedded server and client library have been removed from this release. Support will be added back to a later release.

Bugs fixed:

  • An exception would be raised, or the process would hang, if SELECT privileges on a database were not granted and a stored procedure was used. (Bug#25033)

  • Nested transactions (which are unsupported)do not raise an error or warning. (Bug#22400)

  • When adding parameter objects to a command object, if the parameter direction is set to ReturnValue before the parameter is added to the command object then when the command is executed it throws an error. (Bug#25013)

  • Additional text added to error message (Bug#25178)

  • Stored procedure executions are not thread safe. (Bug#23905)

  • Using Driver.IsTooOld() would return the wrong value. (Bug#24661)

  • Deleting a connection to a disconnected server when using the Visual Studio Plugin would cause an assertion failure. (Bug#23687)

  • When using a DbNull.Value as the value for a parameter value, and then later setting a specific value type, the command would fail with an exception because the wrong type was implied from the DbNull.Value. (Bug#24565)

C.3.6.聽Changes in MySQL Connector/NET Version 5.0.2 (06 November 2006)

Functionality added or changed:

  • Important change: Due to a number of issues with the use of server-side prepared statements, Connector/NET 5.0.2 has disabled their use by default. The disabling of server-side prepared statements does not affect the operation of the connector in any way.

    To enable server-side prepared statements you must add the following configuration property to your connector string properties:

    ignore prepare=false

    The default value of this property is true.

  • Implemented a stored procedure cache. By default, the connector caches the metadata for the last 25 procedures that are seen. You can change the numbver of procedures that are cacheds by using the procedure cache connection string.

  • An Ignore Prepare option has been added to the connection string options. If enabled, prepared statements will be disabled application-wide. The default for this option is true.

Bugs fixed:

  • Creating a connection through the Server Explorer when using the Visual Studio Plugin would fail. The installer for the Visual Studio Plugin has been updated to ensure that Connector/NET 5.0.2 must be installed. (Bug#23071)

  • Within Mono, using the PreparedStatement interface could result in an error due to a BitArray copying error. (Bug#18186)

  • Using Windows Vista (RC2) as a non-privileged user would raise a Registry key 'Global' access denied. (Bug#22882)

  • One system where IPv6 was enabled, Connector/NET would incorrectly resolve hostnames. (Bug#23758)

  • Column names with accented characters were not parsed properly causing malformed column names in result sets. (Bug#23657)

  • Connector/NET did not work as a data source for the SqlDataSource object used by ASP.NET 2.0. (Bug#16126)

  • A System.FormatException exception would be raised when invoking a stored procedure with an ENUM input parameter. (Bug#23268)

  • During installation, an antivirus error message would be raised (indicating a malicious script problem). (Bug#23245)

  • An exception would be thrown when calling GetSchemaTable and fields was null. (Bug#23538)

C.3.7.聽Changes in MySQL Connector/NET Version 5.0.1 (01 October 2006)

Bugs fixed:

  • Using ExecuteScalar with a datetime field, where the value of the field is "0000-00-00 00:00:00", a MySqlConversionException exception would be raised. (Bug#11991)

  • An MySql.Data.Types.MySqlConversionException would be raised when trying to update a row that contained a date field, where the date field contained a zero value (0000-00-00 00:00:00). (Bug#9619)

  • Incorrect field/data lengths could be returned for VARCHAR UTF8 columns. Bug (#14592)

  • Submitting an empty string to a command object through prepare raises an System.IndexOutOfRangeException, rather than a Connector/Net exception. (Bug#18391)

  • Starting a transaction on a connection created by MySql.Data.MySqlClient.MySqlClientFactory, using BeginTransaction without specifying an isolation level, causes the SQL statement to fail with a syntax error. (Bug#22042)

  • Connector/NET on a Tukish operating system, may fail to execute certain SQL statements correctly. (Bug#22452)

  • You can now install the Connector/NET MSI package from the command line using the /passive, /quiet, /q options. (Bug#19994)

  • The MySqlexception class is now derived from the DbException class. (Bug#21874)

  • Executing multiple queries as part of a transaction returns There is already an openDataReader associated with this Connection which must be closed first. (Bug#7248)

  • The # would not be accepted within column/table names, even though it was valid. (Bug#21521)

C.3.8.聽Changes in MySQL Connector/NET Version 5.0.0 (08 August 2006)

This is a new Alpha development release, fixing recently discovered bugs.

NOTE: This Alpha release, as any other pre-production release, should not be installed on production level systems or systems with critical data. It is good practice to back up your data before installing any new version of software. Although MySQL has worked very hard to ensure a high level of quality, protect your data by making a backup as you would for any software beta release. Please refer to our bug database at http://bugs.mysql.com/ for more details about the individual bugs fixed in this version.

Bugs fixed:

  • CommandText: Question mark in comment line is being parsed as a parameter. (Bug#6214)

Functionality added or changed:

  • Implemented Usage Advisor.

  • Added Async query methods.

  • Reimplemented PacketReader/PacketWriter support into MySqlStream class.

  • Added internal implemention of SHA1 so we don't have to distribute the OpenNetCF on mobile devices.

  • Added usage advisor warnings for requesting column values by the wrong type.

  • Reworked connection string classes to be simpler and faster.

  • Added procedure metadata caching.

  • Added perfmon hooks for stored procedure cache hits and misses.

  • Implemented MySqlConnectionBuilder class.

  • Implemented MySqlClientFactory class.

  • Implemented classes and interfaces for ADO.Net 2.0 support.

  • Replaced use of ICSharpCode with .NET 2.0 internal deflate support.

  • Refactored test suite to test all protocols in a single pass.

  • Completely refactored how column values are handled to avoid boxing in some cases.

C.3.9.聽Changes in MySQL Connector/NET Version 1.0.10 (Not yet released)

Bugs fixed:

  • Publisher listed in "Add/Remove Programs" is not consistent with other MySQL products. (Bug#27253)

  • MySqlParameterCollection and parameters added with Insert method can not be retrieved later using ParameterName. (Bug#27135)

  • A critical ConnectionPool error would result in repeated System.NullReferenceException. (Bug#25603)

  • When a MySqlConversionException is raised on a remote object, the client application would receive a SerializationException instead. (Bug#24957)

  • High CPU utilization would be experienced when there is no idle connection waiting when using pooled connections through MySqlPool.GetConnection. (Bug#24373)

  • BINARY and VARBINARY columns would be returned as a string, not binary, datatype. (Bug#25605)

C.3.10.聽Changes in MySQL Connector/NET Version 1.0.9 (02 February 2007

Functionality added or changed:

  • Important change: Due to a number of issues with the use of server-side prepared statements, Connector/NET 5.0.2 has disabled their use by default. The disabling of server-side prepared statements does not affect the operation of the connector in any way.

    To enable server-side prepared statements you must add the following configuration property to your connector string properties:

    ignore prepare=false

    The default value of this property is true.

  • Important change: Binaries for .NET 1.0 are no longer supplied with this release. If you need support for .NET 1.0, you must build from source.

  • Implemented a stored procedure cache. By default, the connector caches the metadata for the last 25 procedures that are seen. You can change the numbver of procedures that are cacheds by using the procedure cache connection string.

  • An Ignore Prepare option has been added to the connection string options. If enabled, prepared statements will be disabled application-wide. The default for this option is true.

  • The ICSharpCode ZipLib is no longer used by the Connector, and is no longer distributed with it.

  • Improved CommandBuilder.DeriveParameters to first try and use the procedure cache before querying for the stored procedure metadata. Return parameters created with DeriveParameters now have the name RETURN_VALUE.

Bugs fixed:

  • Trying to fill a table schema through a stored procedure triggers a runtime error. (Bug#25609)

  • MySqlConnection throws a NullReferenceException and ArgumentNullException when connecting to MySQL v4.1.7. (Bug#25726)

  • SELECT did not work correctly when using a WHERE clause containing a UTF-8 string. (Bug#25651)

  • Times with negative values would be returned incorrectly. (Bug#25912)

  • When closing and then re-opening a connection to a database, the character set specification is lost. (Bug#25614)

  • When connecting to a server, the return code from the connection could be zero, even though the hostname was incorrect. (Bug#24802)

  • Using ExecuteScalar() with more than one query, where one query fails, will hang the connection. (Bug#25443)

  • Nested transactions do not raise an error or warning. (Bug#22400)

  • When adding parameter objects to a command object, if the parameter direction is set to ReturnValue before the parameter is added to the command object then when the command is executed it throws an error. (Bug#25013)

  • Additional text added to error message. (Bug#25178)

  • The CommandBuilder would mistakenly add insert parameters for a table column with auto incrementation enabled. (Bug#23862)

  • Stored procedure executions are not thread safe. (Bug#23905)

  • Using Driver.IsTooOld() would return the wrong value. (Bug#24661)

  • When using a DbNull.Value as the value for a parameter value, and then later setting a specific value type, the command would fail with an exception because the wrong type was implied from the DbNull.Value. (Bug#24565)

  • Within Mono, using the PreparedStatement interface could result in an error due to a BitArray copying error. (Bug 18186)

  • One system where IPv6 was enabled, Connector/NET would incorrectly resolve hostnames. (Bug#23758)

  • An System.OverflowException would be raised when accessing a varchar field over 255 bytes. Bug (#23749)

C.3.11.聽Changes in MySQL Connector/NET Version 1.0.8 (20 October 2006)

Bugs fixed:

  • Using ExecuteScalar with a datetime field, where the value of the field is "0000-00-00 00:00:00", a MySqlConversionException exception would be raised. (Bug#11991)

  • The MySqlDateTime class did not contain constructors. (Bug#15112)

  • DataReader would show the value of the previous row (or last row with non-null data) if the current row contained a datetime field with a null value. (Bug#16884)

  • An MySql.Data.Types.MySqlConversionException would be raised when trying to update a row that contained a date field, where the date field contained a zero value (0000-00-00 00:00:00). (Bug#9619)

  • When using MySqlDataAdapter, connections to a MySQL server may remain open and active, even though the use of the connection has been completed and the data received. (Bug#8131)

  • Incorrect field/data lengths could be returned for VARCHAR UTF8 columns. Bug (#14592)

  • Submitting an empty string to a command object through prepare raises an System.IndexOutOfRangeException, rather than a Connector/Net exception. (Bug#18391)

  • Connector/NET on a Tukish operating system, may fail to execute certain SQL statements correctly. (Bug#22452)

  • You can now install the Connector/NET MSI package from the command line using the /passive, /quiet, /q options. (Bug#19994)

  • Executing multiple queries as part of a transaction returns There is already an openDataReader associated with this Connection which must be closed first. (Bug#7248)

  • Called MySqlCommandBuilder.DeriveParameters for a stored procedure that has no paramers would cause an application crash. (Bug#15077)

  • A SELECT query on a table with a date with a value of '0000-00-00' would hang the application. (Bug#17736)

  • The # would not be accepted within column/table names, even though it was valid. (Bug#21521)

  • Calling Close on a connection after calling a stored procedure would trigger a NullReferenceException. (Bug#20581)

  • IDataRecord.GetString would raise NullPointerException for null values in returned rows. Method now throws SqlNullValueException. (Bug#19294)

  • An exception would be raised when using an output parameter to a System.String value. (Bug#17814)

  • The DiscoverParameters function would fail when a stored procedure used a NUMERIC parameter type. (Bug#19515)

  • When running a query that included a date comparison, a DateReader error would be raised. (Bug#19481)

  • Parameter substitution in queries where the order of parameters and table fields did not match would substitute incorrect values. (Bug#19261)

  • When working with multiple threads, character set initialization would generate errors. (Bug#17106)

  • When using an unsigned 64-bit integer in a stored procedure, the unsigned bit would be lost stored. (Bug#16934)

  • The connection string parser did not allow single or double quotes in the password. (Bug#16659)

  • The CommandBuilder ignored Unsigned flag at Parameter creation. (Bug#17375)

  • CHAR type added to MySqlDbType. (Bug#17749)

  • Unsigned data types were not properly supported. (Bug#16788)

Functionality added or changed:

  • Stored procedures are now cached.

  • The method for retrieving stored procedured metadata has been changed so that users without SELECT privileges on the mysql.proc table can use a stored procedure.

C.3.12.聽Changes in MySQL Connector/NET Version 1.0.7 (21 November 2005)

  • Unsigned tinyint (NET byte) would lead to and incorrectly determined parameter type from the parameter value. (Bug#18570)

  • The parameter collection object's Add() method added parameters to the list without first checking to see whether they already existed. Now it updates the value of the existing parameter object if it exists. (Bug#13927)

  • A #42000Query was empty exception occurred when executing a query built with MySqlCommandBuilder, if the query string ended with a semicolon. (Bug#14631)

  • Implemented the MySqlCommandBuilder.DeriveParameters method that is used to discover the parameters for a stored procedure. (Bug#13632)

  • Added support for the cp932 character set. (Bug#13806)

  • Calling a stored procedure where a parameter contained special characters (such as '@') would produce an exception. Note that ANSI_QUOTES had to be enabled to make this possible. (Bug#13753)

  • A statement that contained multiple references to the same parameter could not be prepared. (Bug#13541)

  • The Ping() method did not update the State property of the Connection object. (Bug#13658)

C.3.13.聽Changes in MySQL Connector/NET Version 1.0.6 (03 October 2005)

  • The nant build sequence had problems. (Bug#12978)

  • Serializing a parameter failed if the first value passed in was NULL. (Bug#13276)

  • Field names that contained the following characters caused errors: ()%<>/ (Bug#13036)

  • The Connector/NET 1.0.5 installer would not install alongside Connector/NET 1.0.4. (Bug#12835)

  • Connector/NET 1.0.5 could not connect on Mono. (Bug#13345)

C.3.14.聽Changes in MySQL Connector/NET Version 1.0.5 (29 August 2005)

  • With multiple hosts in the connection string, Connector/NET would not connect to the last host in the list. (Bug#12628)

  • Connector/NET interpreted the new decimal data type as a byte array. (Bug#11294)

  • The cp1250 character set was not supported. (Bug#11621)

  • Connection could fail when .NET thread pool had no available worker threads. (Bug#10637)

  • Decimal parameters caused syntax errors. (Bug#11550, Bug#10486, Bug#10152)

  • A call to a stored procedure caused an exception if the stored procedure had no parameters. (Bug#11542)

  • Certain malformed queries would trigger a Connection must be valid and open error message. (Bug#11490)

  • The MySqlCommandBuilder class could not handle queries that referenced tables in a database other than the default database. (Bug#8382)

  • Connector/NET could not work properly with certain regional settings. (WL#8228)

  • Trying to use a stored procedure when Connection.Database was not populated generated an exception. (Bug#11450)

  • Trying to read a TIMESTAMP column generated an exception. (Bug#7951)

  • Parameters were not recognized when they were separated by linefeeds. (Bug#9722)

  • Calling MySqlConnection.clone when a connection string had not yet been set on the original connection would generate an error. (Bug#10281)

  • Added support to call a stored function from Connector/NET. (Bug#10644)

  • Connector/NET could not connect to MySQL 4.1.14. (Bug#12771)

  • The ConnectionString property could not be set when a MySqlConnection object was added with the designer. (Bug#12551, Bug#8724)

C.3.15.聽Changes in MySQL Connector/NET Version 1.0.4 (20 January 2005)

  • Calling prepare causing exception. (Bug#7243)

  • Fixed another small problem with prepared statements.

  • MySqlCommand.Connection returns an IDbConnection. (Bug#7258)

  • MySqlAdapter.Fill method throws error message Non-negative number required. (Bug#7345)

  • Clone method bug in MySqlCommand. (Bug#7478)

  • MySqlDataReader.GetString(index) returns non-Null value when field is Null. (Bug#7612)

  • MySqlReader.GetInt32 throws exception if column is unsigned. (Bug#7755)

  • GetBytes is working no more. (Bug#7704).

  • Quote character \222 not quoted in EscapeString. (Bug#7724)

  • Fixed problem that causes named pipes to not work with some blob functionality.

  • Fixed problem with shared memory connections.

  • Problem with Multiple resultsets. (Bug#7436)

  • Added or filled out several more topics in the API reference documentation.

C.3.16.聽Changes in MySQL Connector/NET Version 1.0.3-gamma (12 October 2004)

  • Made MySQL the default named pipe name.

  • Now SHOW COLLATION is used upon connection to retrieve the full list of charset ids.

  • Fixed Invalid character set index: 200. (Bug#6547)

  • Installer now includes options to install into GAC and create Start Menu items.

  • Int64 Support in MySqlCommand Parameters. (Bug#6863)

  • Connections now do not have to give a database on the connection string.

  • MySqlDataReader.GetChar(int i) throws IndexOutOfRange exception. (Bug#6770)

  • Fixed problem where multiple resultsets having different numbers of columns would cause a problem.

  • Exception stack trace lost when re-throwing exceptions. (Bug#6983)

  • Fixed major problem with detecting null values when using prepared statements.

  • Errors in parsing stored procedure parameters. (Bug#6902)

  • Integer "out" parameter from stored procedure returned as string. (Bug#6668)

  • MySqlDateTime in Datatables sorting by Text, not Date. (Bug#7032)

  • Invalid query string when using inout parameters (Bug#7133)

  • Test suite fails with MySQL 4.0 because of case sensitivity of table names. (Bug#6831)

  • Inserting DateTime causes System.InvalidCastException to be thrown. (Bug#7132)

  • InvalidCast when using DATE_ADD-function. (Bug#6879)

  • An Open Connection has been Closed by the Host System. (Bug#6634)

  • Added ServerThread property to MySqlConnection to expose server thread id.

  • Added Ping method to MySqlConnection.

  • Changed the name of the test suite to MySql.Data.Tests.dll.

C.3.17.聽Changes in MySQL Connector/NET Version 1.0.2-gamma (15 November 2004)

  • Fixed problem with MySqlBinary where string values could not be used to update extended text columns

  • Fixed Installation directory ignored using custom installation (Bug#6329)

  • Fixed problem where setting command text leaves the command in a prepared state

  • Fixed double type handling in MySqlParameter(string parameterName, object value) (Bug#6428)

  • Fixed Zero date "0000-00-00" is returned wrong when filling Dataset (Bug#6429)

  • Fixed problem where calling stored procedures might cause an "Illegal mix of collations" problem.

  • Added charset connection string option

  • Fixed #HY000 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ (Bug#6322)

  • Added the TableEditor CS and VB sample

  • Fixed Charset-map for UCS-2 (Bug#6541)

  • Updated the installer to include the new samples

  • Fixed Long inserts take very long time (Bu #5453)

  • Fixed Objects not being disposed (Bug#6649)

  • Provider is now using character set specified by server as default

C.3.18.聽Changes in MySQL Connector/NET Version 1.0.1-beta2 (27 October 2004)

  • Fixed Bug#5602 Possible bug in MySqlParameter(string, object) constructor

  • Fixed Bug#5458 Calling GetChars on a longtext column throws an exception

  • Fixed Bug#5474 cannot run a stored procedure populating mysqlcommand.parameters

  • Fixed Bug#5469 Setting DbType throws NullReferenceException

  • Fixed problem where connector was not issuing a CMD_QUIT before closing the socket

  • Fixed Bug#5392 MySqlCommand sees "?" as parameters in string literals

  • Fixed problem with ConnectionInternal where a key might be added more than once

  • CP1252 is now used for Latin1 only when the server is 4.1.2 and later

  • Fixed Bug#5388 DataReader reports all rows as NULL if one row is NULL

  • Virtualized driver subsystem so future releases could easily support client or embedded server support

  • Field buffers being reused to decrease memory allocations and increase speed

  • Fixed problem where using old syntax while using the interfaces caused problems

  • Using PacketWriter instead of Packet for writing to streams

  • Refactored compression code into CompressedStream to clean up NativeDriver

  • Added test case for resetting the command text on a prepared command

  • Fixed problem where MySqlParameterCollection.Add() would throw unclear exception when given a null value (Bug#5621)

  • Fixed construtor initialize problems in MySqlCommand() (Bug#5613)

  • Fixed Parsing the ';' char (Bug#5876)

  • Fixed missing Reference in DbType setter (Bug#5897)

  • Fixed System.OverflowException when using YEAR datatype (Bug#6036)

  • Added Aggregate function test (wasn't really a bug)

  • Fixed serializing of floating point parameters (double, numeric, single, decimal) (Bug#5900)

  • IsNullable error (Bug#5796)

  • Fixed problem where connection lifetime on the connect string was not being respected

  • Fixed problem where Min Pool Size was not being respected

  • Fixed MySqlDataReader and 'show tables from ...' behavior (Bug#5256)

  • Implemented SequentialAccess

  • Fixed MySqlDateTime sets IsZero property on all subseq.records after first zero found (Bug#6006)

  • Fixed Can't display Chinese correctly (Bug#5288)

  • Fixed Russian character support as well

  • Fixed Method TokenizeSql() uses only a limited set of valid characters for parameters (Bug#6217)

  • Fixed NET Connector source missing resx files (Bug#6216)

  • Fixed DBNull Values causing problems with retrieving/updating queries. (Bug#5798)

  • Fixed Yet Another "object reference not set to an instance of an object" (Bug#5496)

  • Fixed problem in PacketReader where it could try to allocate the wrong buffer size in EnsureCapacity

  • Fixed GetBoolean returns wrong values (Bug#6227)

  • Fixed IndexOutOfBounds when reading BLOB with DataReader with GetString(index) (Bug#6230)

C.3.19.聽Changes in MySQL Connector/NET Version 1.0.0 (01 September 2004)

  • Thai encoding not correctly supported. (Bug#3889)

  • Updated many of the test cases.

  • Fixed problem with using compression.

  • Bumped version number to 1.0.0 for beta 1 release.

  • Added COPYING.rtf file for use in installer.

  • Removed all of the XML comment warnings.

  • Removed some last references to ByteFX.

C.3.20.聽Changes in MySQL Connector/NET Version 0.9.0 (30 August 2004)

  • Added test fixture for prepared statements.

  • All type classes now implement a SerializeBinary method for sending their data to a PacketWriter.

  • Added PacketWriter class that will enable future low-memory large object handling.

  • Fixed many small bugs in running prepared statements and stored procedures.

  • Changed command so that an exception will not be throw in executing a stored procedure with parameters in old syntax mode.

  • SingleRow behavior now working right even with limit.

  • GetBytes now only works on binary columns.

  • Logger now truncates long sql commands so blob columns don't blow out our log.

  • host and database now have a default value of "" unless otherwise set.

  • Connection Timeout seems to be ignored. (Bug#5214)

  • Added test case for bug# 5051: GetSchema not working correctly.

  • Fixed problem where GetSchema would return false for IsUnique when the column is key.

  • MySqlDataReader GetXXX methods now using the field level MySqlValue object and not performing conversions.

  • DataReader returning NULL for time column. (Bug#5097)

  • Added test case for LOAD DATA LOCAL INFILE.

  • Added replacetext custom nant task.

  • Added CommandBuilderTest fixture.

  • Added Last One Wins feature to CommandBuilder.

  • Fixed persist security info case problem.

  • Fixed GetBool so that 1, true, "true", and "yes" all count as true.

  • Make parameter mark configurable.

  • Added the "old syntax" connection string parameter to allow use of @ parameter marker.

  • MySqlCommandBuilder. (Bug#4658)

  • ByteFX.MySqlClient caches passwords if Persist Security Info is false. (Bug#4864)

  • Updated license banner in all source files to include FLOSS exception.

  • Added new .Types namespace and implementations for most current MySql types.

  • Added MySqlField41 as a subclass of MySqlField.

  • Changed many classes to now use the new .Types types.

  • Changed type enum int to Int32, short to Int16, and bigint to Int64.

  • Added dummy types UInt16, UInt32, and UInt64 to allow an unsigned parameter to be made.

  • Connections are now reset when they are pulled from the connection pool.

  • Refactored auth code in driver so it can be used for both auth and reset.

  • Added UserReset test in PoolingTests.cs.

  • Connections are now reset using COM_CHANGE_USER when pulled from the pool.

  • Implemented SingleResultSet behavior.

  • Implemented support of unicode.

  • Added char set mappings for utf-8 and ucs-2.

  • Time fields overflow using bytefx .net mysql driver (Bug#4520)

  • Modified time test in data type test fixture to check for time spans where hours > 24.

  • Wrong string with backslash escaping in ByteFx.Data.MySqlClient.MySqlParameter. (Bug#4505)

  • Added code to Parameter test case TestQuoting to test for backslashes.

  • MySqlCommandBuilder fails with multi-word column names. (Bug#4486)

  • Fixed bug in TokenizeSql where underscore would terminate character capture in parameter name.

  • Added test case for spaces in column names.

  • MySqlDataReader.GetBytes don't works correctly. (Bug#4324)

  • Added GetBytes() test case to DataReader test fixture.

  • Now reading all server variables in InternalConnection.Configure into Hashtable.

  • Now using string[] for index map in CharSetMap.

  • Added CRInSQL test case for carriage returns in SQL.

  • Setting maxPacketSize to default value in Driver.ctor.

  • Setting MySqlDbType on a parameter doesn't set generic type. (Bug#4442)

  • Removed obsolete data types Long and LongLong.

  • Overflow exception thrown when using "use pipe" on connection string. (Bug#4071)

  • Changed "use pipe" keyword to "pipe name" or just "pipe".

  • Allow reading multiple resultsets from a single query.

  • Added flags attribute to ServerStatusFlags enum.

  • Changed name of ServerStatus enum to ServerStatusFlags.

  • Inserted data row doesn't update properly.

  • Error processing show create table. (Bug#4074)

  • Change Packet.ReadLenInteger to ReadPackedLong and added packet.ReadPackedInteger that alwasy reads integers packed with 2,3,4.

  • Added syntax.cs test fixture to test various SQL syntax bugs.

  • Improper handling of time values. Now time value of 00:00:00 is not treated as null. (Bug#4149)

  • Moved all test suite files into TestSuite folder.

  • Fixed bug where null column would move the result packet pointer backward.

  • Added new nant build script.

  • Clear tablename so it will be regen'ed properly during the next GenerateSchema. (Bug#3917)

  • GetValues was always returning zero and was also always trying to copy all fields rather than respecting the size of the array passed in. (Bug#3915)

  • Implemented shared memory access protocol.

  • Implemented prepared statements for MySQL 4.1.

  • Implemented stored procedures for MySQL 5.0.

  • Renamed MySqlInternalConnection to InternalConnection.

  • SQL is now parsed as chars, fixes problems with other languages.

  • Added logging and allow batch connection string options.

  • RowUpdating event not set when setting the DataAdapter property. (Bug#3888)

  • Fixed bug in char set mapping.

  • Implemented 4.1 authentication.

  • Improved open/auth code in driver.

  • Improved how connection bits are set during connection.

  • Database name is now passed to server during initial handshake.

  • Changed namespace for client to MySql.Data.MySqlClient.

  • Changed assembly name of client to MySql.Data.dll.

  • Changed license text in all source files to GPL.

  • Added the MySqlClient.build Nant file.

  • Removed the mono batch files.

  • Moved some of the unused files into notused folder so nant build file can use wildcards.

  • Implemented shared memory accesss.

  • Major revamp in code structure.

  • Prepared statements now working for MySql 4.1.1 and later.

  • Finished implementing auth for 4.0, 4.1.0, and 4.1.1.

  • Changed namespace from MySQL.Data.MySQLClient back to MySql.Data.MySqlClient.

  • Fixed bug in CharSetMapping where it was trying to use text names as ints.

  • Changed namespace to MySQL.Data.MySQLClient.

  • Integrated auth changes from UC2004.

  • Fixed bug where calling any of the GetXXX methods on a datareader before or after reading data would not throw the appropriate exception (thanks Luca Morelli).

  • Added TimeSpan code in parameter.cs to properly serialize a timespan object to mysql time format (thanks Gianluca Colombo).

  • Added TimeStamp to parameter serialization code. Prevented DataAdatper updates from working right (thanks Michael King).

  • Fixed a misspelling in MySqlHelper.cs (thanks Patrick Kristiansen).

C.3.21.聽Changes in MySQL Connector/NET Version 0.76

  • Driver now using charset number given in handshake to create encoding.

  • Changed command editor to point to MySqlClient.Design.

  • Fixed bug in Version.isAtLeast.

  • Changed DBConnectionString to support changes done to MySqlConnectionString.

  • Removed SqlCommandEditor and DataAdapterPreviewDialog.

  • Using new long return values in many places.

  • Integrated new CompressedStream class.

  • Changed ConnectionString and added attributes to allow it to be used in MySqlClient.Design.

  • Changed packet.cs to support newer lengths in ReadLenInteger.

  • Changed other classes to use new properties and fields of MySqlConnectionString.

  • ConnectionInternal is now using PING to see whether the server is alive.

  • Moved toolbox bitmaps into resource folder.

  • Changed field.cs to allow values to come directly from row buffer.

  • Changed to use the new driver.Send syntax.

  • Using a new packet queueing system.

  • Started work handling the "broken" compression packet handling.

  • Fixed bug in StreamCreator where failure to connect to a host would continue to loop infinitly (thanks Kevin Casella).

  • Improved connectstring handling.

  • Moved designers into Pro product.

  • Removed some old commented out code from command.cs.

  • Fixed a problem with compression.

  • Fixed connection object where an exception throw prior to the connection opening would not leave the connection in the connecting state (thanks Chris Cline).

  • Added GUID support.

  • Fixed sequence out of order bug (thanks Mark Reay).

C.3.22.聽Changes in MySQL Connector/NET Version 0.75

  • Enum values now supported as parameter values (thanks Philipp Sumi).

  • Year datatype now supported.

  • Fixed compression.

  • Fixed bug where a parameter with a TimeSpan as the value would not serialize properly.

  • Fixed bug where default constructor would not set default connection string values.

  • Added some XML comments to some members.

  • Work to fix/improve compression handling.

  • Improved ConnectionString handling so that it better matches the standard set by SqlClient.

  • A MySqlException is now thrown if a username is not included in the connection string.

  • Localhost is now used as the default if not specified on the connection string.

  • An exception is now thrown if an attempt is made to set the connection string while the connection is open.

  • Small changes to ConnectionString docs.

  • Removed MultiHostStream and MySqlStream. Replaced it with Common/StreamCreator.

  • Added support for Use Pipe connection string value.

  • Added Platform class for easier access to platform utility functions.

  • Fixed small pooling bug where new connection was not getting created after IsAlive fails.

  • Added Platform.cs and StreamCreator.cs.

  • Fixed Field.cs to properly handle 4.1 style timestamps.

  • Changed Common.Version to Common.DBVersion to avoid name conflict.

  • Fixed field.cs so that text columns return the right field type.

  • Added MySqlError class to provide some reference for error codes (thanks Geert Veenstra).

C.3.23.聽Changes in MySQL Connector/NET Version 0.74

  • Added Unix socket support (thanks Mohammad DAMT).

  • Only calling Thread.Sleep when no data is available.

  • Improved escaping of quote characters in parameter data.

  • Removed misleading comments from parameter.cs.

  • Fixed pooling bug.

  • Fixed ConnectionString editor dialog (thanks marco p (pomarc)).

  • UserId now supported in connection strings (thanks Jeff Neeley).

  • Attempting to create a parameter that is not input throws an exception (thanks Ryan Gregg).

  • Added much documentation.

  • Checked in new MultiHostStream capability. Big thanks to Dan Guisinger for this. he originally submitted the code and idea of supporting multiple machines on the connect string.

  • Added a lot of documentation.

  • Fixed speed issue with 0.73.

  • Changed to Thread.Sleep(0) in MySqlDataStream to help optimize the case where it doesn't need to wait (thanks Todd German).

  • Prepopulating the idlepools to MinPoolSize.

  • Fixed MySqlPool deadlock condition as well as stupid bug where CreateNewPooledConnection was not ever adding new connections to the pool. Also fixed MySqlStream.ReadBytes and ReadByte to not use TicksPerSecond which does not appear to always be right. (thanks Matthew J. Peddlesden)

  • Fix for precision and scale (thanks Matthew J. Peddlesden).

  • Added Thread.Sleep(1) to stream reading methods to be more cpu friendly (thanks Sean McGinnis).

  • Fixed problem where ExecuteReader would sometime return null (thanks Lloyd Dupont).

  • Fixed major bug with null field handling (thanks Naucki).

  • Enclosed queries for max_allowed_packet and characterset inside try catch (and set defaults).

  • Fixed problem where socket was not getting closed properly (thanks Steve!).

  • Fixed problem where ExecuteNonQuery was not always returning the right value.

  • Fixed InternalConnection to not use @@session.max_allowed_packet but use @@max_allowed_packet. (Thanks Miguel)

  • Added many new XML doc lines.

  • Fixed sql parsing to not send empty queries (thanks Rory).

  • Fixed problem where the reader was not unpeeking the packet on close.

  • Fixed problem where user variables were not being handled (thanks Sami Vaaraniemi).

  • Fixed loop checking in the MySqlPool (thanks Steve M. Brown)

  • Fixed ParameterCollection.Add method to match SqlClient (thanks Joshua Mouch).

  • Fixed ConnectionString parsing to handle no and yes for boolean and not lowercase values (thanks Naucki).

  • Added InternalConnection class, changes to pooling.

  • Implemented Persist Security Info.

  • Added security.cs and version.cs to project

  • Fixed DateTime handling in Parameter.cs (thanks Burkhard Perkens-Golomb).

  • Fixed parameter serialization where some types would throw a cast exception.

  • Fixed DataReader to convert all returned values to prevent casting errors (thanks Keith Murray).

  • Added code to Command.ExecuteReader to return null if the initial SQL command throws an exception (thanks Burkhard Perkens-Golomb).

  • Fixed ExecuteScalar bug introduced with restructure.

  • Restructure to allow for LOCAL DATA INFILE and better sequencing of packets.

  • Fixed several bugs related to restructure.

  • Early work done to support more secure passwords in Mysql 4.1. Old passwords in 4.1 not supported yet.

  • Parameters appearing after system parameters are now handled correctly (Adam M. (adammil)).

  • Strings can now be assigned directly to blob fields (Adam M.).

  • Fixed float parameters (thanks Pent).

  • Improved Parameter constructor and ParameterCollection.Add methods to better match SqlClient (thanks Joshua Mouch).

  • Corrected Connection.CreateCommand to return a MySqlCommand type.

  • Fixed connection string designer dialog box problem (thanks Abraham Guyt).

  • Fixed problem with sending commands not always reading the response packet (thanks Joshua Mouch).

  • Fixed parameter serialization where some blobs types were not being handled (thanks Sean McGinnis).

  • Removed spurious MessageBox.show from DataReader code (thanks Joshua Mouch).

  • Fixed a nasty bug in the split sql code (thanks everyone!).

C.3.24.聽Changes in MySQL Connector/NET Version 0.71

  • Fixed bug in MySqlStream where too much data could attempt to be read (thanks Peter Belbin)

  • Implemented HasRows (thanks Nash Pherson).

  • Fixed bug where tables with more than 252 columns cause an exception (thanks Joshua Kessler).

  • Fixed bug where SQL statements ending in ; would cause a problem (thanks Shane Krueger).

  • Fixed bug in driver where error messages were getting truncated by 1 character (thanks Shane Krueger).

  • Made MySqlException serializable (thanks Mathias Hasselmann).

C.3.25.聽Changes in MySQL Connector/NET Version 0.70

  • Updated some of the character code pages to be more accurate.

  • Fixed problem where readers could be opened on connections that had readers open.

  • Moved test to separate assembly MySqlClientTests.

  • Fixed stupid problem in driver with sequence out of order (Thanks Peter Belbin).

  • Added some pipe tests.

  • Increased default max pool size to 50.

  • Compiles with Mono 0-24.

  • Fixed connection and data reader dispose problems.

  • Added String datatype handling to parameter serialization.

  • Fixed sequence problem in driver that occurred after thrown exception (thanks Burkhard Perkens-Golomb).

  • Added support for CommandBehavior.SingleRow to DataReader.

  • Fixed command sql processing so quotes are better handled (thanks Theo Spears).

  • Fixed parsing of double, single, and decimal values to account for non-English separators. You still have to use the right syntax if you using hard coded sql, but if you use parameters the code will convert floating point types to use '.' appropriately internal both into the server and out.

  • Added MySqlStream class to simplify timeouts and driver coding.

  • Fixed DataReader so that it is closed properly when the associated connection is closed. [thanks smishra]

  • Made client more SqlClient compliant so that DataReaders have to be closed before the connection can be used to run another command.

  • Improved DBNull.Value handling in the fields.

  • Added several unit tests.

  • Fixed MySqlException base class.

  • Improved driver coding

  • Fixed bug where NextResult was returning false on the last resultset.

  • Added more tests for MySQL.

  • Improved casting problems by equating unsigned 32bit values to Int64 and usigned 16bit values to Int32, and so forth.

  • Added new constructor for MySqlParameter for (name, type, size, srccol)

  • Fixed bug in MySqlDataReader where it didn't check for null fieldlist before returning field count.

  • Started adding MySqlClient unit tests (added MySqlClient/Tests folder and some test cases).

  • Fixed some things in Connection String handling.

  • Moved INIT_DB to MySqlPool. I may move it again, this is in preparation of the conference.

  • Fixed bug inside CommandBuilder that prevented inserts from happening properly.

  • Reworked some of the internals so that all three execute methods of Command worked properly.

  • Fixed many small bugs found during benchmarking.

  • The first cut of CoonectionPooling is working. "min pool size" and "max pool size" are respected.

  • Work to enable multiple resultsets to be returned.

  • Character sets are handled much more intelligently now. The driver queries MySQL at startup for the default character set. That character set is then used for conversions if that code page can be loaded. If not, then the default code page for the current OS is used.

  • Added code to save the inferred type in the name,value constructor of Parameter.

  • Also, inferred type if value of null parameter is changed using Value property.

  • Converted all files to use proper Camel case. MySQL is now MySql in all files. PgSQL is now PgSql.

  • Added attribute to PgSql code to prevent designer from trying to show.

  • Added MySQLDbType property to Parameter object and added proper conversion code to convert from DbType to MySQLDbType).

  • Removed unused ObjectToString method from MySQLParameter.cs.

  • Fixed Add(..) method in ParameterCollection so that it doesn't use Add(name, value) instead.

  • Fixed IndexOf and Contains in ParameterCollection to be aware that parameter names are now stored without @.

  • Fixed Command.ConvertSQLToBytes so it only allows characters that can be in MySQL variable names.

  • Fixed DataReader and Field so that blob fields read their data from Field.cs and GetBytes works right.

  • Added simple query builder editor to CommandText property of MySQLCommand.

  • Fixed CommandBuilder and Parameter serialization to account for Parameters not storing @ in their names.

  • Removed MySQLFieldType enum from Field.cs. Now using MySQLDbType enum.

  • Added Designer attribute to several classes to prevent designer view when using VS.Net.

  • Fixed Initial catalog typo in ConnectionString designer.

  • Removed 3 parameter constructor for MySQLParameter that conflicted with (name, type, value).

  • Changed MySQLParameter so paramName is now stored without leading @ (this fixed null inserts when using designer).

  • Changed TypeConverter for MySQLParameter to use the constructor with all properties.

C.3.26.聽Changes in MySQL Connector/NET Version 0.68

  • Fixed sequence issue in driver.

  • Added DbParametersEditor to make parameter editing more like SqlClient.

  • Fixed Command class so that parameters can be edited using the designer

  • Update connection string designer to support Use Compression flag.

  • Fixed string encoding so that European characters like 盲 will work correctly.

  • Creating base classes to aid in building new data providers.

  • Added support for UID key in connection string.

  • Field, parameter, command now using DBNull.Value instead of null.

  • CommandBuilder using DBNull.Value.

  • CommandBuilder now builds insert command correctly when an auto_insert field is not present.

  • Field now uses typeof keyword to return System.Types (performance).

C.3.27.聽Changes in MySQL Connector/NET Version 0.65

  • MySQLCommandBuilder now implemented.

  • Transaction support now implemented (not all table types support this).

  • GetSchemaTable fixed to not use xsd (for Mono).

  • Driver is now Mono-compatible.

  • TIME data type now supported.

  • More work to improve Timestamp data type handling.

  • Changed signatures of all classes to match corresponding SqlClient classes.

C.3.28.聽Changes in MySQL Connector/NET Version 0.60

  • Protocol compression using SharpZipLib (www.icsharpcode.net).

  • Named pipes on Windows now working properly.

  • Work done to improve Timestamp data type handling.

  • Implemented IEnumerable on DataReader so DataGrid would work.

C.3.29.聽Changes in MySQL Connector/NET Version 0.50

  • Speed increased dramatically by removing bugging network sync code.

  • Driver no longer buffers rows of data (more ADO.Net compliant).

  • Conversion bugs related to TIMESTAMP and DATETIME fields fixed.

C.4.聽MySQL Visual Studio Plugin Change History

C.4.1.聽Changes in MySQL Visual Studio Plugin 1.1.3 (Not yet released)

Bugs fixed:

  • Running queries based on a stored procedure would cause the dataset designer to terminate. (Bugs #26364)

  • DataSet wizard would show all tables instead of only the tables available within the selected database. (Bugs #26348)

C.4.2.聽Changes in MySQL Visual Studio Plugin 1.0.2 (Not yet released)

Bugs fixed:

  • Creating a connection through the Server Explorer when using the Visual Studio Plugin would fail. The installer for the Visual Studio Plugin has been updated to ensure that Connector/NET 5.0.2 must be installed. (Bug#23071)

  • The Add Connection dialog of the Server Explorer would freeze when accessing databases with capitalized characters in their name. (Bug#24875)

C.4.3.聽Changes in MySQL Visual Studio Plugin 1.0.1 (4 October 2006)

This is a bug fix release to resolve an incompatibility issue with Connector/NET 5.0.1.

It is critical that this release only be used with Connector/NET 5.0.1. After installing Connector/NET 5.0.1, you will need to make a small change in your machine.config file. This file should be located at %win%\Microsoft.Net\Framework\v2.0.50727\CONFIG\machine.config (%win% should be the location of your Windows folder). Near the bottom of the file you will see a line like this:

<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" 
description=".Net Framework Data Provider for MySQL" 
type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data"/>

It needs to be changed to be like this:

<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" 
description=".Net Framework Data Provider for MySQL" 
type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, 
Version=5.0.1.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
 

C.4.4.聽Changes in MySQL Visual Studio Plugin 1.0.0 (4 October 2006)

This is the first beta release.

Features in this release:

  • DDEX (Data Designer Extensibility) compatibility.

  • Ability to work with MySQL objects (tables, views, stored procedures, etc) from within Server Explorer.

C.5.聽MySQL Connector/J Change History

C.5.1.聽Changes in MySQL Connector/J 5.1.x

C.5.1.1.聽Changes in MySQL Connector/J 5.1.0 (11 April 2007)

Important change: Due to a number of issues with the use of server-side prepared statements, Connector/J 5.0.5 has disabled their use by default. The disabling of server-side prepared statements does not affect the operation of the connector in any way.

To enable server-side prepared statements you must add the following configuration property to your connector string:

useServerPrepStmts=true

The default value of this property is false (that is, Connector/J does not use server-side prepared statements).

Note

The disabling of server-side prepared statements does not affect the operation of the connector. However, if you use the useTimezone=true connection option and use client-side prepared statements (instead of server-side prepared statements) you should also set useSSPSCompatibleTimezoneShift=true.

Functionality added or changed:

  • Re-worked Ant buildfile to build JDBC-4.0 classes separately, as well as support building under Eclipse (since Eclipse can't mix/match JDKs).

    To build, you must set JAVA_HOME to J2SDK-1.4.2 or Java-5, and set the following properties on your Ant command line:

    • com.mysql.jdbc.java6.javac 鈥 full path to your Java-6 javac executable

    • com.mysql.jdbc.java6.rtjar 鈥 full path to your Java-6 rt.jar file

  • New feature 鈥 driver will automatically adjust session variable net_write_timeout when it determines it has been asked for a "streaming" result, and resets it to the previous value when the result set has been consumed. (configuration property is named netTimeoutForStreamingResults value and has a unit of seconds, the value 0 means the driver will not try and adjust this value).

  • Added support for JDBC-4.0 categorized SQLExceptions.

  • Refactored CommunicationsException into a JDBC-3.0 version, and a JDBC-4.0 version (which extends SQLRecoverableException, now that it exists).

    Note

    This change means that if you were catching com.mysql.jdbc.CommunicationsException in your applications instead of looking at the SQLState class of 08, and are moving to Java 6 (or newer), you need to change your imports to that exception to be com.mysql.jdbc.exceptions.jdbc4.CommunicationsException, as the old class will not be instantiated for communications link-related errors under Java 6.

  • Added support for JDBC-4.0's client information. The backend storage of information provided via Connection.setClientInfo() and retrieved by Connection.getClientInfo() is pluggable by any class that implements the com.mysql.jdbc.JDBC4ClientInfoProvider interface and has a no-args constructor.

    The implementation used by the driver is configured using the clientInfoProvider configuration property (with a default of value of com.mysql.jdbc.JDBC4CommentClientInfoProvider, an implementation which lists the client information as a comment prepended to every query sent to the server).

    This functionality is only available when using Java-6 or newer.

  • Added support for JDBC-4.0's SQLXML interfaces.

  • Added support for JDBC-4.0's Wrapper interface.

  • Added support for JDBC-4.0's NCLOB, and NCHAR/NVARCHAR types.

C.5.2.聽Changes in MySQL Connector/J 5.0.x

C.5.2.1.聽Changes in MySQL Connector/J 5.0.6 (Not yet released)

Functionality added or changed:

  • Give better error message when "streaming" result sets, and the connection gets clobbered because of exceeding net_write_timeout on the server.

  • New configuration property, enableQueryTimeouts (default true).

    When enabled, query timeouts set via Statement.setQueryTimeout() use a shared java.util.Timer instance for scheduling. Even if the timeout doesn't expire before the query is processed, there will be memory used by the TimerTask for the given timeout which won't be reclaimed until the time the timeout would have expired if it hadn't been cancelled by the driver. High-load environments might want to consider disabling this functionality. (this configuration property is part of the maxPerformance configuration bundle).

  • Added configuration property padCharsWithSpace (defaults to false). If set to true, and a result set column has the CHAR type and the value does not fill the amount of characters specified in the DDL for the column, the driver will pad the remaining characters with space (for ANSI compliance).

  • Added configuration property useDynamicCharsetInfo. If set to false (the default), the driver will use a per-connection cache of character set information queried from the server when necessary, or when set to true, use a built-in static mapping that is more efficient, but isn't aware of custom character sets or character sets implemented after the release of the JDBC driver.

    Note

    Note: this only affects the padCharsWithSpace configuration property and the ResultSetMetaData.getColumnDisplayWidth() method.

  • More intelligent initial packet sizes for the "shared" packets are used (512 bytes, rather than 16K), and initial packets used during handshake are now sized appropriately as to not require reallocation.

Bugs fixed:

  • Client options not sent correctly when using SSL, leading to stored procedures not being able to return results. Thanks to Don Cohen for the bug report, testcase and patch. (Bug#25545)

  • PreparedStatement is not closed in BlobFromLocator.getBytes(). (Bug#26592)

  • Whitespace surrounding storage/size specifiers in stored procedure parameters declaration causes NumberFormatException to be thrown when calling stored procedure on JDK-1.5 or newer, as the Number classes in JDK-1.5+ are whitespace intolerant. (Bug#25624)

  • When the configuration property useCursorFetch was set to true, sometimes server would return new, more exact metadata during the execution of the server-side prepared statement that enables this functionality, which the driver ignored (using the original metadata returned during prepare()), causing corrupt reading of data due to type mismatch when the actual rows were returned. (Bug#26173)

  • Comments in DDL of stored procedures/functions confuse procedure parser, and thus metadata about them can not be created, leading to inability to retrieve said metadata, or execute procedures that have certain comments in them. (Bug#26959)

  • Fast date/time parsing doesn't take into account 00:00:00 as a legal value. (Bug#26789)

  • ResultSet.get*() with a column index < 1 returns misleading error message. (Bug#27317)

  • Statement.setMaxRows() is not effective on result sets materialized from cursors. (Bug#25517)

  • CALL /* ... */ some_proc() doesn't work. As a side effect of this fix, you can now use /* */ and # comments when preparing statements using client-side prepared statement emulation. (Bug#27400)

    If the comments happen to contain parameter markers (?), they will be treated as belonging to the comment (that is, not recognized) rather than being a parameter of the statement.

    Note

    The statement when sent to the server will contain the comments as-is, they're not stripped during the process of preparing the PreparedStatement or CallableStatement.

  • BIT(> 1) is returned as java.lang.String from ResultSet.getObject() rather than byte[]. (Bug#25328)

  • CallableStatements with OUT/INOUT parameters that are "binary" (BLOB, BIT, (VAR)BINARY, JAVA_OBJECT) have extra 7 bytes. (Bug#25715)

  • Connection.getTransactionIsolation() uses "SHOW VARIABLES LIKE" which is very inefficient on MySQL-5.0+ servers. (Bug#27655)

  • Fixed issue where calling getGeneratedKeys() on a prepared statement after calling execute() didn't always return the generated keys (executeUpdate() worked fine however).

C.5.2.2.聽Changes in MySQL Connector/J 5.0.5 (02 March 2007)

Functionality added or changed:

  • Important change: Due to a number of issues with the use of server-side prepared statements, Connector/J 5.0.5 has disabled their use by default. The disabling of server-side prepared statements does not affect the operation of the connector in any way.

    To enable server-side prepared statements you must add the following configuration property to your connector string:

    useServerPrepStmts=true

    The default value of this property is false (that is, Connector/J does not use server-side prepared statements).

  • Improved speed of datetime parsing for ResultSets that come from plain or non-server-side prepared statements. You can enable old implementation with useFastDateParsing=false as a configuration parameter.

  • Added configuration property localSocketAddress,which is the hostname or IP address given to explicitly configure the interface that the driver will bind the client side of the TCP/IP connection to when connecting.

  • The rewriteBatchedStatements feature can now be used with server-side prepared statements.

  • We've added a new configuration option treatUtilDateAsTimestamp, which is false by default, as (1) We already had specific behavior to treat java.util.Date as a java.sql.Timestamp because it's useful to many folks, and (2) that behavior will very likely be required for drivers JDBC-post-4.0.

  • Fixed logging of XA commands sent to server, it's now configurable via logXaCommands property (defaults to false).

  • Usage Advisor now detects empty results sets and does not report on columns not referenced in those empty sets.

  • Usage Advisor will now issue warnings for result sets with large numbers of rows. You can configure the trigger value by using the resultSetSizeThreshold parameter, which has a default value of 100.

Bugs fixed:

  • Fixed an issue where XADataSources couldn't be bound into JNDI, as the DataSourceFactory didn't know how to create instances of them.

  • Calling Statement.cancel() could result in a Null Pointer Exception (NPE). (Bug#24721)

  • Calendars and timezones are now lazily instantiated when required. (Bug#24351)

  • Client-side prepared statement parser gets confused by in-line comments /*...*/ and therefore cannot rewrite batch statements or reliably detect the type of statements when they are used. (Bug#25025)

  • When using a JDBC connection URL that is malformed, the NonRegisteringDriver.getPropertyInfo method will throw a Null Pointer Exception (NPE). (Bug#22628)

  • Using DatabaseMetaData.getSQLKeywords() does not return a all of the of the reserved keywords for the current MySQL version. Current implementation returns the list of reserved words for MySQL 5.1, and does not distinguish between versions. (Bug#24794)

  • Specifying US-ASCII as the character set in a connection to a MySQL 4.1 or newer server does not map correctly. (Bug#24840)

  • Storing a java.util.Date object in a BLOB column would not be serialized correctly during setObject. (Bug#25787)

  • A query execution which timed out did not always throw a MySQLTimeoutException. (Bug#25836)

  • A connection error would occur when connecting to a MySQL server with certain character sets. Some collations/character sets reported as "unknown" (specifically cias variants of existing character sets), and inability to override the detected server character set. (Bug#23645)

  • Using setFetchSize() breaks prepared SHOW and other commands. (Bug#24360)

  • Using DATETIME columns would result in time shifts when useServerPrepStmts was true. The reason was due to different behavior when using client-side compared to server-side prepared statements and the useJDBCCompliantTimezoneShift option. This is now fixed if moving from server-side prepared statements to client-side prepared statements by setting useSSPSCompatibleTimezoneShift to true, as the driver can't tell if this is a new deployment that never used server-side prepared statements, or if it is an existing deployment that is switching to client-side prepared statements from server-side prepared statements. (Bug#24344)

  • Inconsistency between getSchemas and INFORMATION_SCHEMA. (Bug#23304)

  • When using the rewriteBatchedStatements connection option with PreparedState.executeBatch() an internal memory leak would occur. (Bug#25073)

  • Fixed issue where field-level for metadata from DatabaseMetaData when using INFORMATION_SCHEMA didn't have references to current connections, sometimes leading to Null Pointer Exceptions (NPEs) when introspecting them via ResultSetMetaData.

  • Connector/J now returns a better error message when server doesn't return enough information to determine stored procedure/function parameter types. (Bug#24065)

  • When using server-side prepared statements and timestamp columns, value would be incorrectly populated (with nanoseconds, not microseconds). (Bug#21438)

  • Timer instance used for Statement.setQueryTimeout() created per-connection, rather than per-VM, causing memory leak. (Bug#25514)

  • Results sets from UPDATE statements that are part of multi-statement queries would cause an SQLException error, "Result is from UPDATE". (Bug#25009)

  • StringUtils.indexOfIgnoreCaseRespectQuotes() isn't case-insensitive on the first character of the target. This bug also affected rewriteBatchedStatements functionality when prepared statements did not use uppercase for the VALUES clause. (Bug#25047)

  • Some exceptions thrown out of StandardSocketFactory were needlessly wrapped, obscuring their true cause, especially when using socket timeouts. (Bug#21480)

  • DatabaseMetaData.getSchemas() doesn't return a TABLE_CATALOG column. (Bug#23303)

  • EscapeProcessor gets confused by multiple backslashes. We now push the responsibility of syntax errors back on to the server for most escape sequences. (Bug#25399)

  • INOUT parameters in CallableStatements get doubly-escaped. (Bug#25379)

  • Connection property socketFactory wasn't exposed via correctly named mutator/accessor, causing data source implementations that use JavaBean naming conventions to set properties to fail to set the property (and in the case of SJAS, fail silently when trying to set this parameter). (Bug#26326)

  • ParameterMetaData throws NullPointerException when prepared SQL has a syntax error. Added generateSimpleParameterMetadata configuration property, which when set to true will generate metadata reflecting VARCHAR for every parameter (the default is false, which will cause an exception to be thrown if no parameter metadata for the statement is actually available). (Bug#21267)

Other changes:

  • Performance enhancement of initial character set configuration, driver will only send commands required to configure connection character set session variables if the current values on the server do not match what is required.

  • Re-worked stored procedure parameter parser to be more robust. Driver no longer requires BEGIN in stored procedure definition, but does have requirement that if a stored function begins with a label directly after the "returns" clause, that the label is not a quoted identifier.

  • Reverted back to internal character conversion routines for single-byte character sets, as the ones internal to the JVM are using much more CPU time than our internal implementation.

  • Changed cached result set metadata (when using cacheResultSetMetadata=true) to be cached per-connection rather than per-statement as previously implemented.

  • Use a java.util.TreeMap to map column names to ordinal indexes for ResultSet.findColumn() instead of a HashMap. This allows us to have case-insensitive lookups (required by the JDBC specification) without resorting to the many transient object instances needed to support this requirement with a normal HashMap with either case-adjusted keys, or case-insensitive keys. (In the worst case scenario for lookups of a 1000 column result set, TreeMaps are about half as fast wall-clock time as a HashMap, however in normal applications their use gives many orders of magnitude reduction in transient object instance creation which pays off later for CPU usage in garbage collection).

  • Avoid static synchronized code in JVM class libraries for dealing with default timezones.

  • Fixed cases where ServerPreparedStatements weren't using cached metadata when cacheResultSetMetadata=true was used.

  • When using cached metadata, skip field-level metadata packets coming from the server, rather than reading them and discarding them without creating com.mysql.jdbc.Field instances.

  • Throw exceptions encountered during timeout to thread calling Statement.execute*(), rather than RuntimeException.

  • Take localSocketAddress property into account when creating instances of CommunicationsException when the underyling exception is a java.net.BindException, so that a friendlier error message is given with a little internal diagnostics.

  • Fixed some Null Pointer Exceptions (NPEs) when cached metadata was used with UpdatableResultSets.

  • When extracting foreign key information from SHOW CREATE TABLE in DatabaseMetaData, ignore exceptions relating to tables being missing (which could happen for cross-reference or imported-key requests, as the list of tables is generated first, then iterated).

C.5.2.3.聽Changes in MySQL Connector/J 5.0.4 (20 October 2006)

Bugs fixed:

  • Column names don't match metadata in cases where server doesn't return original column names (column functions) thus breaking compatibility with applications that expect 1-1 mappings between findColumn() and rsmd.getColumnName(), usually manifests itself as "Can't find column ('')" exceptions. (Bug#21379)

  • When using information_schema for metadata, COLUMN_SIZE for getColumns() is not clamped to range of java.lang.Integer as is the case when not using information_schema, thus leading to a truncation exception that isn't present when not using information_schema. (Bug#21544)

  • Newlines causing whitespace to span confuse procedure parser when getting parameter metadata for stored procedures. (Bug#22024)

  • Driver was using milliseconds for Statement.setQueryTimeout() when specification says argument is to be in seconds. (Bug#22359)

  • Workaround for server crash when calling stored procedures via a server-side prepared statement (driver now detects prepare(stored procedure) and substitutes client-side prepared statement). (Bug#22297)

  • Added new _ci collations to CharsetMapping - utf8_unicode_ci not working. (Bug#22456)

  • Driver issues truncation on write exception when it shouldn't (due to sending big decimal incorrectly to server with server-side prepared statement). (Bug#22290)

  • DBMD.getColumns() does not return expected COLUMN_SIZE for the SET type, now returns length of largest possible set disregarding whitespace or the "," delimitters to be consistent with the ODBC driver. (Bug#22613)

Other changes:

  • Fixed configuration property jdbcCompliantTruncation was not being used for reads of result set values.

  • Driver now supports {call sp} (without "()" if procedure has no arguments).

  • Driver now sends numeric 1 or 0 for client-prepared statement setBoolean() calls instead of '1' or '0'.

  • DatabaseMetaData correctly reports true for supportsCatalog*() methods.

C.5.2.4.聽Changes in MySQL Connector/J 5.0.3 (26 July 2006)

  • Fixed Statement.cancel() causes NullPointerException if underlying connection has been closed due to server failure. (Bug#20650)

  • Added configuration option noAccessToProcedureBodies which will cause the driver to create basic parameter metadata for CallableStatements when the user does not have access to procedure bodies via SHOW CREATE PROCEDURE or selecting from mysql.proc instead of throwing an exception. The default value for this option is false

Bugs fixed:

  • If the connection to the server has been closed due to a server failure, then the cleanup process will call Statement.cancel(), triggering a NullPointerException, even though there is no active connection. (Bug#20650)

C.5.2.5.聽Changes in MySQL Connector/J 5.0.2-beta (11 July 2006)

  • Fixed can't use XAConnection for local transactions when no global transaction is in progress. (Bug#17401)

  • Fixed driver fails on non-ASCII platforms. The driver was assuming that the platform character set would be a superset of MySQL's latin1 when doing the handshake for authentication, and when reading error messages. We now use Cp1252 for all strings sent to the server during the handshake phase, and a hard-coded mapping of the language systtem variable to the character set that is used for error messages. (Bug#18086)

  • Fixed ConnectionProperties (and thus some subclasses) are not serializable, even though some J2EE containers expect them to be. (Bug#19169)

  • Fixed MysqlValidConnectionChecker for JBoss doesn't work with MySQLXADataSources. (Bug#20242)

  • Better caching of character set converters (per-connection) to remove a bottleneck for multibyte character sets.

  • Added connection/datasource property pinGlobalTxToPhysicalConnection (defaults to false). When set to true, when using XAConnections, the driver ensures that operations on a given XID are always routed to the same physical connection. This allows the XAConnection to support XA START ... JOIN after XA END has been called, and is also a workaround for transaction managers that don't maintain thread affinity for a global transaction (most either always maintain thread affinity, or have it as a configuration option).

  • MysqlXaConnection.recover(int flags) now allows combinations of XAResource.TMSTARTRSCAN and TMENDRSCAN. To simulate the 鈥scanning鈥 nature of the interface, we return all prepared XIDs for TMSTARTRSCAN, and no new XIDs for calls with TMNOFLAGS, or TMENDRSCAN when not in combination with TMSTARTRSCAN. This change was made for API compliance, as well as integration with IBM WebSphere's transaction manager.

C.5.2.6.聽Changes in MySQL Connector/J 5.0.1-beta (Not Released)

Not released due to a packaging error

C.5.2.7.聽Changes in MySQL Connector/J 5.0.0-beta (22 December 2005)

  • XADataSource implemented (ported from 3.2 branch which won't be released as a product). Use com.mysql.jdbc.jdbc2.optional.MysqlXADataSource as your datasource class name in your application server to utilize XA transactions in MySQL-5.0.10 and newer.

  • PreparedStatement.setString() didn't work correctly when sql_mode on server contained NO_BACKSLASH_ESCAPES and no characters that needed escaping were present in the string.

  • Attempt detection of the MySQL type BINARY (it's an alias, so this isn't always reliable), and use the java.sql.Types.BINARY type mapping for it.

  • Moved -bin-g.jar file into separate debug subdirectory to avoid confusion.

  • Don't allow .setAutoCommit(true), or .commit() or .rollback() on an XA-managed connection as per the JDBC specification.

  • If the connection useTimezone is set to true, then also respect time zone conversions in escape-processed string literals (for example, "{ts ...}" and "{t ...}").

  • Return original column name for RSMD.getColumnName() if the column was aliased, alias name for .getColumnLabel() (if aliased), and original table name for .getTableName(). Note this only works for MySQL-4.1 and newer, as older servers don't make this information available to clients.

  • Setting useJDBCCompliantTimezoneShift=true (it's not the default) causes the driver to use GMT for all TIMESTAMP/DATETIME time zones, and the current VM time zone for any other type that refers to time zones. This feature can not be used when useTimezone=true to convert between server and client time zones.

  • Add one level of indirection of internal representation of CallableStatement parameter metadata to avoid class not found issues on JDK-1.3 for ParameterMetadata interface (which doesn't exist prior to JDBC-3.0).

  • Added unit tests for XADatasource, as well as friendlier exceptions for XA failures compared to the "stock" XAException (which has no messages).

  • Idle timeouts cause XAConnections to whine about rolling themselves back. (Bug#14729)

  • Added support for Connector/MXJ integration via url subprotocol jdbc:mysql:mxj://....

  • Moved all SQLException constructor usage to a factory in SQLError (ground-work for JDBC-4.0 SQLState-based exception classes).

  • Removed Java5-specific calls to BigDecimal constructor (when result set value is '', (int)0 was being used as an argument indirectly via method return value. This signature doesn't exist prior to Java5.)

  • Added service-provider entry to META-INF/services/java.sql.Driver for JDBC-4.0 support.

  • Return "[VAR]BINARY" for RSMD.getColumnTypeName() when that is actually the type, and it can be distinguished (MySQL-4.1 and newer).

  • When fix for Bug#14562 was merged from 3.1.12, added functionality for CallableStatement's parameter metadata to return correct information for .getParameterClassName().

  • Fuller synchronization of Connection to avoid deadlocks when using multithreaded frameworks that multithread a single connection (usually not recommended, but the JDBC spec allows it anyways), part of fix to Bug#14972).

  • Implementation of Statement.cancel() and Statement.setQueryTimeout(). Both require MySQL-5.0.0 or newer server, require a separate connection to issue the KILL QUERY statement, and in the case of setQueryTimeout() creates an additional thread to handle the timeout functionality.

    Note: Failures to cancel the statement for setQueryTimeout() may manifest themselves as RuntimeExceptions rather than failing silently, as there is currently no way to unblock the thread that is executing the query being cancelled due to timeout expiration and have it throw the exception instead.

C.5.3.聽Changes in MySQL Connector/J 3.1.x

C.5.3.1.聽Changes in MySQL Connector/J 3.1.15 (Not yet released)

Important change: Due to a number of issues with the use of server-side prepared statements, Connector/J 5.0.5 has disabled their use by default. The disabling of server-side prepared statements does not affect the operation of the connector in any way.

To enable server-side prepared statements you must add the following configuration property to your connector string:

useServerPrepStmts=true

The default value of this property is false (that is, Connector/J does not use server-side prepared statements).

Bugs fixed:

  • Specifying US-ASCII as the character set in a connection to a MySQL 4.1 or newer server does not map correctly. (Bug#24840)

C.5.3.2.聽Changes in MySQL Connector/J 3.1.14 (10-19-2006)

  • Fixed updatable result set throws ClassCastException when there is row data and moveToInsertRow() is called. (Bug#20479)

  • Fixed Updatable result set that contains a BIT column fails when server-side prepared statements are used. (Bug#20485)

  • Fixed memory leak with profileSQL=true. (Bug#16987)

  • Connection fails to localhost when using timeout and IPv6 is configured. (Bug#19726)

  • Fixed NullPointerException in MysqlDataSourceFactory due to Reference containing RefAddrs with null content. (Bug#16791)

  • Fixed ResultSet.getShort() for UNSIGNED TINYINT returns incorrect values when using server-side prepared statements. (Bug#20306)

  • Fixed can't pool server-side prepared statements, exception raised when re-using them. (Bug#20687)

  • ResultSet.getSomeInteger() doesn't work for BIT(>1). (Bug#21062)

  • ResultSet.getFloatFromString() can't retrieve values near Float.MIN/MAX_VALUE. (Bug#18880)

  • Escape of quotes in client-side prepared statements parsing not respected. Patch covers more than bug report, including NO_BACKSLASH_ESCAPES being set, and stacked quote characters forms of escaping (that is, '' or ""). (Bug#20888)

  • ReplicationDriver does not always round-robin load balance depending on URL used for slaves list. (Bug#19993)

  • Fixed calling toString() on ResultSetMetaData for driver-generated (that is, from DatabaseMetaData method calls, or from getGeneratedKeys()) result sets would raise a NullPointerException.

  • DDriver throws NPE when tracing prepared statements that have been closed (in asSQL()). (Bug#21207)

  • Removed logger autodetection altogether, must now specify logger explicitly if you want to use a logger other than one that logs to STDERR.

  • Driver issues truncation on write exception when it shouldn't (due to sending big decimal incorrectly to server with server-side prepared statement). (Bug#22290)

  • Driver now sends numeric 1 or 0 for client-prepared statement setBoolean() calls instead of '1' or '0'.

  • Fixed bug where driver would not advance to next host if roundRobinLoadBalance=true and the last host in the list is down.

  • Fixed Bug#18258 - DatabaseMetaData.getTables(), columns() with bad catalog parameter threw exception rather than return empty result set (as required by spec).

  • Check and store value for continueBatchOnError property in constructor of Statements, rather than when executing batches, so that Connections closed out from underneath statements don't cause NullPointerExceptions when it's required to check this property.

  • Fixed bug when calling stored functions, where parameters weren't numbered correctly (first parameter is now the return value, subsequent parameters if specified start at index "2").

C.5.3.3.聽Changes in MySQL Connector/J 3.1.13 (26 May 2006)

  • INOUT parameter does not store IN value. (Bug#15464)

  • Exception thrown for new decimal type when using updatable result sets. (Bug#14609)

  • No "dos" character set in MySQL > 4.1.0. (Bug#15544)

  • PreparedStatement.setObject() serializes BigInteger as object, rather than sending as numeric value (and is thus not complementary to .getObject() on an UNSIGNED LONG type). (Bug#15383)

  • ResultSet.getShort() for UNSIGNED TINYINT returned wrong values. (Bug#11874)

  • lib-nodist directory missing from package breaks out-of-box build. (Bug#15676)

  • DBMD.getColumns() returns wrong type for BIT. (Bug#15854)

  • Fixed issue where driver was unable to initialize character set mapping tables. Removed reliance on .properties files to hold this information, as it turns out to be too problematic to code around class loader hierarchies that change depending on how an application is deployed. Moved information back into the CharsetMapping class. (Bug#14938)

  • Fixed updatable result set doesn't return AUTO_INCREMENT values for insertRow() when multiple column primary keys are used. (the driver was checking for the existence of single-column primary keys and an autoincrement value > 0 instead of a straightforward isAutoIncrement() check). (Bug#16841)

  • Fixed Statement.getGeneratedKeys() throws NullPointerException when no query has been processed. (Bug#17099)

  • Fixed driver trying to call methods that don't exist on older and newer versions of Log4j. The fix is not trying to auto-detect presence of log4j, too many different incompatible versions out there in the wild to do this reliably. (Bug#13469)

    If you relied on autodetection before, you will need to add "logger=com.mysql.jdbc.log.Log4JLogger" to your JDBC URL to enable Log4J usage, or alternatively use the new "CommonsLogger" class to take care of this.

  • Added support for Apache Commons logging, use "com.mysql.jdbc.log.CommonsLogger" as the value for the "logger" configuration property.

  • LogFactory now prepends "com.mysql.jdbc.log" to log class name if it can't be found as-specified. This allows you to use "short names" for the built-in log factories, for example "logger=CommonsLogger" instead of "logger=com.mysql.jdbc.log.CommonsLogger".

  • Fixed issue with ReplicationConnection incorrectly copying state, doesn't transfer connection context correctly when transitioning between the same read-only states. (Bug#15570)

  • Fixed issue where server-side prepared statements don't cause truncation exceptions to be thrown when truncation happens. (Bug#18041)

  • Added performance feature, re-writing of batched executes for Statement.executeBatch() (for all DML statements) and PreparedStatement.executeBatch() (for INSERTs with VALUE clauses only). Enable by using "rewriteBatchedStatements=true" in your JDBC URL.

  • Fixed CallableStatement.registerOutParameter() not working when some parameters pre-populated. Still waiting for feedback from JDBC experts group to determine what correct parameter count from getMetaData() should be, however. (Bug#17898)

  • Fixed calling clearParameters() on a closed prepared statement causes NPE. (Bug#17587)

  • Map "latin1" on MySQL server to CP1252 for MySQL > 4.1.0.

  • Added additional accessor and mutator methods on ConnectionProperties so that DataSource users can use same naming as regular URL properties.

  • Fixed data truncation and getWarnings() only returns last warning in set. (Bug#18740)

  • Improved performance of retrieving BigDecimal, Time, Timestamp and Date values from server-side prepared statements by creating fewer short-lived instances of Strings when the native type is not an exact match for the requested type. (Bug#18496)

  • Fixed aliased column names where length of name > 251 are corrupted. (Bug#18554)

  • Fixed ResultSet.wasNull() not always reset correctly for booleans when done via conversion for server-side prepared statements. (Bug#17450)

  • Fixed invalid classname returned for ResultSetMetaData.getColumnClassName() for BIGINT type. (Bug#19282)

  • Fixed case where driver wasn't reading server status correctly when fetching server-side prepared statement rows, which in some cases could cause warning counts to be off, or multiple result sets to not be read off the wire.

  • Driver now aware of fix for BIT type metadata that went into MySQL-5.0.21 for server not reporting length consistently (Bug#13601).

  • Fixed PreparedStatement.setObject(int, Object, int) doesn't respect scale of BigDecimals. (Bug#19615)

  • Fixed ResultSet.wasNull() returns incorrect value when extracting native string from server-side prepared statement generated result set. (Bug#19282)

C.5.3.4.聽Changes in MySQL Connector/J 3.1.12 (30 November 2005)

  • Fixed client-side prepared statement bug with embedded ? characters inside quoted identifiers (it was recognized as a placeholder, when it was not).

  • Don't allow executeBatch() for CallableStatements with registered OUT/INOUT parameters (JDBC compliance).

  • Fall back to platform-encoding for URLDecoder.decode() when parsing driver URL properties if the platform doesn't have a two-argument version of this method.

  • Java type conversion may be incorrect for MEDIUMINT. (Bug#14562)

  • Added configuration property useGmtMillisForDatetimes which when set to true causes ResultSet.getDate(), .getTimestamp() to return correct millis-since GMT when .getTime() is called on the return value (currently default is false for legacy behavior).

  • Fixed DatabaseMetaData.stores*Identifiers():

    • If lower_case_table_names=0 (on server):

      • storesLowerCaseIdentifiers() returns false

      • storesLowerCaseQuotedIdentifiers() returns false

      • storesMixedCaseIdentifiers() returns true

      • storesMixedCaseQuotedIdentifiers() returns true

      • storesUpperCaseIdentifiers() returns false

      • storesUpperCaseQuotedIdentifiers() returns true

    • If lower_case_table_names=1 (on server):

      • storesLowerCaseIdentifiers() returns true

      • storesLowerCaseQuotedIdentifiers() returns true

      • storesMixedCaseIdentifiers() returns false

      • storesMixedCaseQuotedIdentifiers() returns false

      • storesUpperCaseIdentifiers() returns false

      • storesUpperCaseQuotedIdentifiers() returns true

  • DatabaseMetaData.getColumns() doesn't return TABLE_NAME correctly. (Bug#14815)

  • Escape processor replaces quote character in quoted string with string delimiter. (Bug#14909)

  • OpenOffice expects DBMD.supportsIntegrityEnhancementFacility() to return true if foreign keys are supported by the datasource, even though this method also covers support for check constraints, which MySQL doesn't have. Setting the configuration property overrideSupportsIntegrityEnhancementFacility to true causes the driver to return true for this method. (Bug#12975)

  • Added com.mysql.jdbc.testsuite.url.default system property to set default JDBC url for testsuite (to speed up bug resolution when I'm working in Eclipse).

  • Unable to initialize character set mapping tables (due to J2EE classloader differences). (Bug#14938)

  • Deadlock while closing server-side prepared statements from multiple threads sharing one connection. (Bug#14972)

  • logSlowQueries should give better info. (Bug#12230)

  • Extraneous sleep on autoReconnect. (Bug#13775)

  • Driver incorrectly closes streams passed as arguments to PreparedStatements. Reverts to legacy behavior by setting the JDBC configuration property autoClosePStmtStreams to true (also included in the 3-0-Compat configuration 鈥bundle鈥). (Bug#15024)

  • maxQuerySizeToLog is not respected. Added logging of bound values for execute() phase of server-side prepared statements when profileSQL=true as well. (Bug#13048)

  • Usage advisor complains about unreferenced columns, even though they've been referenced. (Bug#15065)

  • Don't increase timeout for failover/reconnect. (Bug#6577)

  • Process escape tokens in Connection.prepareStatement(...). (Bug#15141) You can disable this behavior by setting the JDBC URL configuration property processEscapeCodesForPrepStmts to false.

  • Reconnect during middle of executeBatch() should not occur if autoReconnect is enabled. (Bug#13255)

C.5.3.5.聽Changes in MySQL Connector/J 3.1.11-stable (07 October 2005)

  • Spurious ! on console when character encoding is utf8. (Bug#11629)

  • Fixed statements generated for testcases missing ; for 鈥plain鈥 statements.

  • Incorrect generation of testcase scripts for server-side prepared statements. (Bug#11663)

  • Fixed regression caused by fix for Bug#11552 that caused driver to return incorrect values for unsigned integers when those integers where within the range of the positive signed type.

  • Moved source code to Subversion repository.

  • Escape tokenizer doesn't respect stacked single quotes for escapes. (Bug#11797)

  • GEOMETRY type not recognized when using server-side prepared statements.

  • ReplicationConnection won't switch to slave, throws 鈥Catalog can't be null鈥 exception. (Bug#11879)

  • Properties shared between master and slave with replication connection. (Bug#12218)

  • Statement.getWarnings() fails with NPE if statement has been closed. (Bug#10630)

  • Only get char[] from SQL in PreparedStatement.ParseInfo() when needed.

  • Geometry types not handled with server-side prepared statements. (Bug#12104)

  • StringUtils.getBytes() doesn't work when using multi-byte character encodings and a length in characters is specified. (Bug#11614)

  • Pstmt.setObject(...., Types.BOOLEAN) throws exception. (Bug#11798)

  • maxPerformance.properties mis-spells 鈥elideSetAutoCommits鈥. (Bug#11976)

  • DBMD.storesLower/Mixed/UpperIdentifiers() reports incorrect values for servers deployed on Windows. (Bug#11575)

  • ResultSet.moveToCurrentRow() fails to work when preceded by a call to ResultSet.moveToInsertRow(). (Bug#11190)

  • VARBINARY data corrupted when using server-side prepared statements and .setBytes(). (Bug#11115)

  • explainSlowQueries hangs with server-side prepared statements. (Bug#12229)

  • Escape processor didn't honor strings demarcated with double quotes. (Bug#11498)

  • Lifted restriction of changing streaming parameters with server-side prepared statements. As long as all streaming parameters were set before execution, .clearParameters() does not have to be called. (due to limitation of client/server protocol, prepared statements can not reset individual stream data on the server side).

  • Reworked Field class, *Buffer, and MysqlIO to be aware of field lengths > Integer.MAX_VALUE.

  • Updated DBMD.supportsCorrelatedQueries() to return true for versions > 4.1, supportsGroupByUnrelated() to return true and getResultSetHoldability() to return HOLD_CURSORS_OVER_COMMIT.

  • Handling of catalog argument in DatabaseMetaData.getIndexInfo(), which also means changes to the following methods in DatabaseMetaData: (Bug#12541)

    • getBestRowIdentifier()

    • getColumns()

    • getCrossReference()

    • getExportedKeys()

    • getImportedKeys()

    • getIndexInfo()

    • getPrimaryKeys()

    • getProcedures() (and thus indirectly getProcedureColumns())

    • getTables()

    The catalog argument in all of these methods now behaves in the following way:

    • Specifying NULL means that catalog will not be used to filter the results (thus all databases will be searched), unless you've set nullCatalogMeansCurrent=true in your JDBC URL properties.

    • Specifying "" means 鈥current鈥 catalog, even though this isn't quite JDBC spec compliant, it's there for legacy users.

    • Specifying a catalog works as stated in the API docs.

    • Made Connection.clientPrepare() available from 鈥wrapped鈥 connections in the jdbc2.optional package (connections built by ConnectionPoolDataSource instances).

  • Added Connection.isMasterConnection() for clients to be able to determine if a multi-host master/slave connection is connected to the first host in the list.

  • Tokenizer for = in URL properties was causing sessionVariables=.... to be parameterized incorrectly. (Bug#12753)

  • Foreign key information that is quoted is parsed incorrectly when DatabaseMetaData methods use that information. (Bug#11781)

  • The sendBlobChunkSize property is now clamped to max_allowed_packet with consideration of stream buffer size and packet headers to avoid PacketTooBigExceptions when max_allowed_packet is similar in size to the default sendBlobChunkSize which is 1M.

  • CallableStatement.clearParameters() now clears resources associated with INOUT/OUTPUT parameters as well as INPUT parameters.

  • Connection.prepareCall() is database name case-sensitive (on Windows systems). (Bug#12417)

  • cp1251 incorrectly mapped to win1251 for servers newer than 4.0.x. (Bug#12752)

  • java.sql.Types.OTHER returned for BINARY and VARBINARY columns when using DatabaseMetaData.getColumns(). (Bug#12970)

  • ServerPreparedStatement.getBinding() now checks if the statement is closed before attempting to reference the list of parameter bindings, to avoid throwing a NullPointerException.

  • ResultSetMetaData from Statement.getGeneratedKeys() caused a NullPointerException to be thrown whenever a method that required a connection reference was called. (Bug#13277)

  • Backport of Field class, ResultSetMetaData.getColumnClassName(), and ResultSet.getObject(int) changes from 5.0 branch to fix behavior surrounding VARCHAR BINARY/VARBINARY and related types.

  • Fixed NullPointerException when converting catalog parameter in many DatabaseMetaDataMethods to byte[]s (for the result set) when the parameter is null. (null isn't technically allowed by the JDBC specification, but we've historically allowed it).

  • Backport of VAR[BINARY|CHAR] [BINARY] types detection from 5.0 branch.

  • Read response in MysqlIO.sendFileToServer(), even if the local file can't be opened, otherwise next query issued will fail, because it's reading the response to the empty LOAD DATA INFILE packet sent to the server.

  • Workaround for Bug#13374: ResultSet.getStatement() on closed result set returns NULL (as per JDBC 4.0 spec, but not backward-compatible). Set the connection property retainStatementAfterResultSetClose to true to be able to retrieve a ResultSet's statement after the ResultSet has been closed via .getStatement() (the default is false, to be JDBC-compliant and to reduce the chance that code using JDBC leaks Statement instances).

  • URL configuration parameters don't allow 鈥&鈥 or 鈥=鈥 in their values. The JDBC driver now parses configuration parameters as if they are encoded using the application/x-www-form-urlencoded format as specified by java.net.URLDecoder (http://java.sun.com/j2se/1.5.0/docs/api/java/net/URLDecoder.html). (Bug#13453)

    If the 鈥%鈥 character is present in a configuration property, it must now be represented as %25, which is the encoded form of 鈥%鈥 when using application/x-www-form-urlencoded encoding.

  • The configuration property sessionVariables now allows you to specify variables that start with the 鈥@鈥 sign.

  • When gatherPerfMetrics is enabled for servers older than 4.1.0, a NullPointerException is thrown from the constructor of ResultSet if the query doesn't use any tables. (Bug#13043)

C.5.3.6.聽Changes in MySQL Connector/J 3.1.10-stable (23 June 2005)

  • Fixed connecting without a database specified raised an exception in MysqlIO.changeDatabaseTo().

  • Initial implemention of ParameterMetadata for PreparedStatement.getParameterMetadata(). Only works fully for CallableStatements, as current server-side prepared statements return every parameter as a VARCHAR type.

C.5.3.7.聽Changes in MySQL Connector/J 3.1.9-stable (22 June 2005)

  • Overhaul of character set configuration, everything now lives in a properties file.

  • Driver now correctly uses CP932 if available on the server for Windows-31J, CP932 and MS932 java encoding names, otherwise it resorts to SJIS, which is only a close approximation. Currently only MySQL-5.0.3 and newer (and MySQL-4.1.12 or .13, depending on when the character set gets backported) can reliably support any variant of CP932.

  • com.mysql.jdbc.PreparedStatement.ParseInfo does unnecessary call to toCharArray(). (Bug#9064)

  • Memory leak in ServerPreparedStatement if serverPrepare() fails. (Bug#10144)

  • Actually write manifest file to correct place so it ends up in the binary jar file.

  • Added createDatabaseIfNotExist property (default is false), which will cause the driver to ask the server to create the database specified in the URL if it doesn't exist. You must have the appropriate privileges for database creation for this to work.

  • Unsigned SMALLINT treated as signed for ResultSet.getInt(), fixed all cases for UNSIGNED integer values and server-side prepared statements, as well as ResultSet.getObject() for UNSIGNED TINYINT. (Bug#10156)

  • Double quotes not recognized when parsing client-side prepared statements. (Bug#10155)

  • Made enableStreamingResults() visible on com.mysql.jdbc.jdbc2.optional.StatementWrapper.

  • Made ServerPreparedStatement.asSql() work correctly so auto-explain functionality would work with server-side prepared statements.

  • Made JDBC2-compliant wrappers public in order to allow access to vendor extensions.

  • Cleaned up logging of profiler events, moved code to dump a profiler event as a string to com.mysql.jdbc.log.LogUtils so that third parties can use it.

  • DatabaseMetaData.supportsMultipleOpenResults() now returns true. The driver has supported this for some time, DBMD just missed that fact.

  • Driver doesn't support {?=CALL(...)} for calling stored functions. This involved adding support for function retrieval to DatabaseMetaData.getProcedures() and getProcedureColumns() as well. (Bug#10310)

  • SQLException thrown when retrieving YEAR(2) with ResultSet.getString(). The driver will now always treat YEAR types as java.sql.Dates and return the correct values for getString(). Alternatively, the yearIsDateType connection property can be set to false and the values will be treated as SHORTs. (Bug#10485)

  • The datatype returned for TINYINT(1) columns when tinyInt1isBit=true (the default) can be switched between Types.BOOLEAN and Types.BIT using the new configuration property transformedBitIsBoolean, which defaults to false. If set to false (the default), DatabaseMetaData.getColumns() and ResultSetMetaData.getColumnType() will return Types.BOOLEAN for TINYINT(1) columns. If true, Types.BOOLEAN will be returned instead. Regardless of this configuration property, if tinyInt1isBit is enabled, columns with the type TINYINT(1) will be returned as java.lang.Boolean instances from ResultSet.getObject(...), and ResultSetMetaData.getColumnClassName() will return java.lang.Boolean.

  • SQLException is thrown when using property characterSetResults with cp932 or eucjpms. (Bug#10496)

  • Reorganized directory layout. Sources now are in src folder. Don't pollute parent directory when building, now output goes to ./build, distribution goes to ./dist.

  • Added support/bug hunting feature that generates .sql test scripts to STDERR when autoGenerateTestcaseScript is set to true.

  • 0-length streams not sent to server when using server-side prepared statements. (Bug#10850)

  • Setting cachePrepStmts=true now causes the Connection to also cache the check the driver performs to determine if a prepared statement can be server-side or not, as well as caches server-side prepared statements for the lifetime of a connection. As before, the prepStmtCacheSize parameter controls the size of these caches.

  • Try to handle OutOfMemoryErrors more gracefully. Although not much can be done, they will in most cases close the connection they happened on so that further operations don't run into a connection in some unknown state. When an OOM has happened, any further operations on the connection will fail with a 鈥Connection closed鈥 exception that will also list the OOM exception as the reason for the implicit connection close event.

  • Don't send COM_RESET_STMT for each execution of a server-side prepared statement if it isn't required.

  • Driver detects if you're running MySQL-5.0.7 or later, and does not scan for LIMIT ?[,?] in statements being prepared, as the server supports those types of queries now.

  • VARBINARY data corrupted when using server-side prepared statements and ResultSet.getBytes(). (Bug#11115)

  • Connection.setCatalog() is now aware of the useLocalSessionState configuration property, which when set to true will prevent the driver from sending USE ... to the server if the requested catalog is the same as the current catalog.

  • Added the following configuration bundles, use one or many via the useConfigs configuration property:

    • maxPerformance 鈥 maximum performance without being reckless

    • solarisMaxPerformance 鈥 maximum performance for Solaris, avoids syscalls where it can

    • 3-0-Compat 鈥 Compatibility with Connector/J 3.0.x functionality

  • Added maintainTimeStats configuration property (defaults to true), which tells the driver whether or not to keep track of the last query time and the last successful packet sent to the server's time. If set to false, removes two syscalls per query.

  • autoReconnect ping causes exception on connection startup. (Bug#11259)

  • Connector/J dumping query into SQLException twice. (Bug#11360)

  • Fixed PreparedStatement.setClob() not accepting null as a parameter.

  • Production package doesn't include JBoss integration classes. (Bug#11411)

  • Removed nonsensical 鈥costly type conversion鈥 warnings when using usage advisor.

C.5.3.8.聽Changes in MySQL Connector/J 3.1.8-stable (14 April 2005)

  • Fixed DatabaseMetaData.getTables() returning views when they were not asked for as one of the requested table types.

  • Added support for new precision-math DECIMAL type in MySQL 5.0.3 and up.

  • Fixed ResultSet.getTime() on a NULL value for server-side prepared statements throws NPE.

  • Made Connection.ping() a public method.

  • DATE_FORMAT() queries returned as BLOBs from getObject(). (Bug#8868)

  • ServerPreparedStatements now correctly 鈥streamBLOB/CLOB data to the server. You can configure the threshold chunk size using the JDBC URL property blobSendChunkSize (the default is 1MB).

  • BlobFromLocator now uses correct identifier quoting when generating prepared statements.

  • Server-side session variables can be preset at connection time by passing them as a comma-delimited list for the connection property sessionVariables.

  • Fixed regression in ping() for users using autoReconnect=true.

  • PreparedStatement.addBatch() doesn't work with server-side prepared statements and streaming BINARY data. (Bug#9040)

  • DBMD.supportsMixedCase*Identifiers() returns wrong value on servers running on case-sensitive filesystems. (Bug#8800)

  • Cannot use UTF-8 for characterSetResults configuration property. (Bug#9206)

  • A continuation of Bug#8868, where functions used in queries that should return non-string types when resolved by temporary tables suddenly become opaque binary strings (work-around for server limitation). Also fixed fields with type of CHAR(n) CHARACTER SET BINARY to return correct/matching classes for RSMD.getColumnClassName() and ResultSet.getObject(). (Bug#9236)

  • DBMD.supportsResultSetConcurrency() not returning true for forward-only/read-only result sets (we obviously support this). (Bug#8792)

  • DATA_TYPE column from DBMD.getBestRowIdentifier() causes ArrayIndexOutOfBoundsException when accessed (and in fact, didn't return any value). (Bug#8803)

  • Check for empty strings ('') when converting CHAR/VARCHAR column data to numbers, throw exception if emptyStringsConvertToZero configuration property is set to false (for backward-compatibility with 3.0, it is now set to true by default, but will most likely default to false in 3.2).

  • PreparedStatement.getMetaData() inserts blank row in database under certain conditions when not using server-side prepared statements. (Bug#9320)

  • Connection.canHandleAsPreparedStatement() now makes 鈥best effort鈥 to distinguish LIMIT clauses with placeholders in them from ones without in order to have fewer false positives when generating work-arounds for statements the server cannot currently handle as server-side prepared statements.

  • Fixed build.xml to not compile log4j logging if log4j not available.

  • Added support for the c3p0 connection pool's (http://c3p0.sf.net/) validation/connection checker interface which uses the lightweight COM_PING call to the server if available. To use it, configure your c3p0 connection pool's connectionTesterClassName property to use com.mysql.jdbc.integration.c3p0.MysqlConnectionTester.

  • Better detection of LIMIT inside/outside of quoted strings so that the driver can more correctly determine whether a prepared statement can be prepared on the server or not.

  • Stored procedures with same name in different databases confuse the driver when it tries to determine parameter counts/types. (Bug#9319)

  • Added finalizers to ResultSet and Statement implementations to be JDBC spec-compliant, which requires that if not explicitly closed, these resources should be closed upon garbage collection.

  • Stored procedures with DECIMAL parameters with storage specifications that contained 鈥,鈥 in them would fail. (Bug#9682)

  • PreparedStatement.setObject(int, Object, int type, int scale) now uses scale value for BigDecimal instances.

  • Statement.getMoreResults() could throw NPE when existing result set was .close()d. (Bug#9704)

  • The performance metrics feature now gathers information about number of tables referenced in a SELECT.

  • The logging system is now automatically configured. If the value has been set by the user, via the URL property logger or the system property com.mysql.jdbc.logger, then use that, otherwise, autodetect it using the following steps:

    1. Log4j, if it's available,

    2. Then JDK1.4 logging,

    3. Then fallback to our STDERR logging.

  • DBMD.getTables() shouldn't return tables if views are asked for, even if the database version doesn't support views. (Bug#9778)

  • Fixed driver not returning true for -1 when ResultSet.getBoolean() was called on result sets returned from server-side prepared statements.

  • Added a Manifest.MF file with implementation information to the .jar file.

  • More tests in Field.isOpaqueBinary() to distinguish opaque binary (that is, fields with type CHAR(n) and CHARACTER SET BINARY) from output of various scalar and aggregate functions that return strings.

  • Should accept null for catalog (meaning use current) in DBMD methods, even though it's not JDBC-compliant for legacy's sake. Disable by setting connection property nullCatalogMeansCurrent to false (which will be the default value in C/J 3.2.x). (Bug#9917)

  • Should accept null for name patterns in DBMD (meaning 鈥%鈥), even though it isn't JDBC compliant, for legacy's sake. Disable by setting connection property nullNamePatternMatchesAll to false (which will be the default value in C/J 3.2.x). (Bug#9769)

C.5.3.9.聽Changes in MySQL Connector/J 3.1.7-stable (18 February 2005)

  • Timestamp key column data needed _binary stripped for UpdatableResultSet.refreshRow(). (Bug#7686)

  • Timestamps converted incorrectly to strings with server-side prepared statements and updatable result sets. (Bug#7715)

  • Detect new sql_mode variable in string form (it used to be integer) and adjust quoting method for strings appropriately.

  • Added holdResultsOpenOverStatementClose property (default is false), that keeps result sets open over statement.close() or new execution on same statement (suggested by Kevin Burton).

  • Infinite recursion when 鈥falling back鈥 to master in failover configuration. (Bug#7952)

  • Disable multi-statements (if enabled) for MySQL-4.1 versions prior to version 4.1.10 if the query cache is enabled, as the server returns wrong results in this configuration.

  • Fixed duplicated code in configureClientCharset() that prevented useOldUTF8Behavior=true from working properly.

  • Removed dontUnpackBinaryResults functionality, the driver now always stores results from server-side prepared statements as is from the server and unpacks them on demand.

  • Emulated locators corrupt binary data when using server-side prepared statements. (Bug#8096)

  • Fixed synchronization issue with ServerPreparedStatement.serverPrepare() that could cause deadlocks/crashes if connection was shared between threads.

  • By default, the driver now scans SQL you are preparing via all variants of Connection.prepareStatement() to determine if it is a supported type of statement to prepare on the server side, and if it is not supported by the server, it instead prepares it as a client-side emulated prepared statement. You can disable this by passing emulateUnsupportedPstmts=false in your JDBC URL. (Bug#4718)

  • Remove _binary introducer from parameters used as in/out parameters in CallableStatement.

  • Always return byte[]s for output parameters registered as *BINARY.

  • Send correct value for 鈥booleantrue to server for PreparedStatement.setObject(n, "true", Types.BIT).

  • Fixed bug with Connection not caching statements from prepareStatement() when the statement wasn't a server-side prepared statement.

  • Choose correct 鈥direction鈥 to apply time adjustments when both client and server are in GMT time zone when using ResultSet.get(..., cal) and PreparedStatement.set(...., cal).

  • Added dontTrackOpenResources option (default is false, to be JDBC compliant), which helps with memory use for non-well-behaved apps (that is, applications that don't close Statement objects when they should).

  • ResultSet.getString() doesn't maintain format stored on server, bug fix only enabled when noDatetimeStringSync property is set to true (the default is false). (Bug#8428)

  • Fixed NPE in ResultSet.realClose() when using usage advisor and result set was already closed.

  • PreparedStatements not creating streaming result sets. (Bug#8487)

  • Don't pass NULL to String.valueOf() in ResultSet.getNativeConvertToString(), as it stringifies it (that is, returns null), which is not correct for the method in question.

  • ResultSet.getBigDecimal() throws exception when rounding would need to occur to set scale. The driver now chooses a rounding mode of 鈥half up鈥 if non-rounding BigDecimal.setScale() fails. (Bug#8424)

  • Added useLocalSessionState configuration property, when set to true the JDBC driver trusts that the application is well-behaved and only sets autocommit and transaction isolation levels using the methods provided on java.sql.Connection, and therefore can manipulate these values in many cases without incurring round-trips to the database server.

  • Added enableStreamingResults() to Statement for connection pool implementations that check Statement.setFetchSize() for specification-compliant values. Call Statement.setFetchSize(>=0) to disable the streaming results for that statement.

  • Added support for BIT type in MySQL-5.0.3. The driver will treat BIT(1-8) as the JDBC standard BIT type (which maps to java.lang.Boolean), as the server does not currently send enough information to determine the size of a bitfield when < 9 bits are declared. BIT(>9) will be treated as VARBINARY, and will return byte[] when getObject() is called.

C.5.3.10.聽Changes in MySQL Connector/J 3.1.6-stable (23 December 2004)

  • Fixed hang on SocketInputStream.read() with Statement.setMaxRows() and multiple result sets when driver has to truncate result set directly, rather than tacking a LIMIT n on the end of it.

  • DBMD.getProcedures() doesn't respect catalog parameter. (Bug#7026)

C.5.3.11.聽Changes in MySQL Connector/J 3.1.5-gamma (02 December 2004)

  • Fix comparisons made between string constants and dynamic strings that are converted with either toUpperCase() or toLowerCase() to use Locale.ENGLISH, as some locales 鈥override鈥 case rules for English. Also use StringUtils.indexOfIgnoreCase() instead of .toUpperCase().indexOf(), avoids creating a very short-lived transient String instance.

  • Server-side prepared statements did not honor zeroDateTimeBehavior property, and would cause class-cast exceptions when using ResultSet.getObject(), as the all-zero string was always returned. (Bug#5235)

  • Fixed batched updates with server prepared statements weren't looking if the types had changed for a given batched set of parameters compared to the previous set, causing the server to return the error 鈥Wrong arguments to mysql_stmt_execute()鈥.

  • Handle case when string representation of timestamp contains trailing 鈥.鈥 with no numbers following it.

  • Inefficient detection of pre-existing string instances in ResultSet.getNativeString(). (Bug#5706)

  • Don't throw exceptions for Connection.releaseSavepoint().

  • Use a per-session Calendar instance by default when decoding dates from ServerPreparedStatements (set to old, less performant behavior by setting property dynamicCalendars=true).

  • Added experimental configuration property dontUnpackBinaryResults, which delays unpacking binary result set values until they're asked for, and only creates object instances for non-numerical values (it is set to false by default). For some usecase/jvm combinations, this is friendlier on the garbage collector.

  • UNSIGNED BIGINT unpacked incorrectly from server-side prepared statement result sets. (Bug#5729)

  • ServerSidePreparedStatement allocating short-lived objects unnecessarily. (Bug#6225)

  • Removed unwanted new Throwable() in ResultSet constructor due to bad merge (caused a new object instance that was never used for every result set created). Found while profiling for Bug#6359.

  • Fixed too-early creation of StringBuffer in EscapeProcessor.escapeSQL(), also return String when escaping not needed (to avoid unnecessary object allocations). Found while profiling for Bug#6359.

  • Use null-safe-equals for key comparisons in updatable result sets.

  • SUM() on DECIMAL with server-side prepared statement ignores scale if zero-padding is needed (this ends up being due to conversion to DOUBLE by server, which when converted to a string to parse into BigDecimal, loses all 鈥padding鈥 zeros). (Bug#6537)

  • Use DatabaseMetaData.getIdentifierQuoteString() when building DBMD queries.

  • Use 1MB packet for sending file for LOAD DATA LOCAL INFILE if that is < max_allowed_packet on server.

  • ResultSetMetaData.getColumnDisplaySize() returns incorrect values for multi-byte charsets. (Bug#6399)

  • Make auto-deserialization of java.lang.Objects stored in BLOB columns configurable via autoDeserialize property (defaults to false).

  • Re-work Field.isOpaqueBinary() to detect CHAR(n) CHARACTER SET BINARY to support fixed-length binary fields for ResultSet.getObject().

  • Use our own implementation of buffered input streams to get around blocking behavior of java.io.BufferedInputStream. Disable this with useReadAheadInput=false.

  • Failing to connect to the server when one of the addresses for the given host name is IPV6 (which the server does not yet bind on). The driver now loops through all IP addresses for a given host, and stops on the first one that accepts() a socket.connect(). (Bug#6348)

C.5.3.12.聽Changes in MySQL Connector/J 3.1.4-beta (04 September 2004)

  • Connector/J 3.1.3 beta does not handle integers correctly (caused by changes to support unsigned reads in Buffer.readInt() -> Buffer.readShort()). (Bug#4510)

  • Added support in DatabaseMetaData.getTables() and getTableTypes() for views, which are now available in MySQL server 5.0.x.

  • ServerPreparedStatement.execute*() sometimes threw ArrayIndexOutOfBoundsException when unpacking field metadata. (Bug#4642)

  • Optimized integer number parsing, enable 鈥old鈥 slower integer parsing using JDK classes via useFastIntParsing=false property.

  • Added useOnlyServerErrorMessages property, which causes message text in exceptions generated by the server to only contain the text sent by the server (as opposed to the SQLState's 鈥standard鈥 description, followed by the server's error message). This property is set to true by default.

  • ResultSet.wasNull() does not work for primatives if a previous null was returned. (Bug#4689)

  • Track packet sequence numbers if enablePacketDebug=true, and throw an exception if packets received out-of-order.

  • ResultSet.getObject() returns wrong type for strings when using prepared statements. (Bug#4482)

  • Calling MysqlPooledConnection.close() twice (even though an application error), caused NPE. Fixed.

  • ServerPreparedStatements dealing with return of DECIMAL type don't work. (Bug#5012)

  • ResultSet.getObject() doesn't return type Boolean for pseudo-bit types from prepared statements on 4.1.x (shortcut for avoiding extra type conversion when using binary-encoded result sets obscured test in getObject() for 鈥pseudo鈥 bit type). (Bug#5032)

  • You can now use URLs in LOAD DATA LOCAL INFILE statements, and the driver will use Java's built-in handlers for retreiving the data and sending it to the server. This feature is not enabled by default, you must set the allowUrlInLocalInfile connection property to true.

  • The driver is more strict about truncation of numerics on ResultSet.get*(), and will throw an SQLException when truncation is detected. You can disable this by setting jdbcCompliantTruncation to false (it is enabled by default, as this functionality is required for JDBC compliance).

  • Added three ways to deal with all-zero datetimes when reading them from a ResultSet: exception (the default), which throws an SQLException with an SQLState of S1009; convertToNull, which returns NULL instead of the date; and round, which rounds the date to the nearest closest value which is '0001-01-01'.

  • Fixed ServerPreparedStatement to read prepared statement metadata off the wire, even though it's currently a placeholder instead of using MysqlIO.clearInputStream() which didn't work at various times because data wasn't available to read from the server yet. This fixes sporadic errors users were having with ServerPreparedStatements throwing ArrayIndexOutOfBoundExceptions.

  • Use com.mysql.jdbc.Message's classloader when loading resource bundle, should fix sporadic issues when the caller's classloader can't locate the resource bundle.

C.5.3.13.聽Changes in MySQL Connector/J 3.1.3-beta (07 July 2004)

  • Mangle output parameter names for CallableStatements so they will not clash with user variable names.

  • Added support for INOUT parameters in CallableStatements.

  • Null bitmask sent for server-side prepared statements was incorrect. (Bug#4119)

  • Use SQL Standard SQL states by default, unless useSqlStateCodes property is set to false.

  • Added packet debuging code (see the enablePacketDebug property documentation).

  • Added constants for MySQL error numbers (publicly accessible, see com.mysql.jdbc.MysqlErrorNumbers), and the ability to generate the mappings of vendor error codes to SQLStates that the driver uses (for documentation purposes).

  • Externalized more messages (on-going effort).

  • Error in retrieval of mediumint column with prepared statements and binary protocol. (Bug#4311)

  • Support new time zone variables in MySQL-4.1.3 when useTimezone=true.

  • Support for unsigned numerics as return types from prepared statements. This also causes a change in ResultSet.getObject() for the bigint unsigned type, which used to return BigDecimal instances, it now returns instances of java.lang.BigInteger.

C.5.3.14.聽Changes in MySQL Connector/J 3.1.2-alpha (09 June 2004)

  • Fixed stored procedure parameter parsing info when size was specified for a parameter (for example, char(), varchar()).

  • Enabled callable statement caching via cacheCallableStmts property.

  • Fixed case when no output parameters specified for a stored procedure caused a bogus query to be issued to retrieve out parameters, leading to a syntax error from the server.

  • Fixed case when no parameters could cause a NullPointerException in CallableStatement.setOutputParameters().

  • Removed wrapping of exceptions in MysqlIO.changeUser().

  • Fixed sending of split packets for large queries, enabled nio ability to send large packets as well.

  • Added .toString() functionality to ServerPreparedStatement, which should help if you're trying to debug a query that is a prepared statement (it shows SQL as the server would process).

  • Added gatherPerformanceMetrics property, along with properties to control when/where this info gets logged (see docs for more info).

  • ServerPreparedStatements weren't actually de-allocating server-side resources when .close() was called.

  • Added logSlowQueries property, along with slowQueriesThresholdMillis property to control when a query should be considered 鈥slow.

  • Correctly map output parameters to position given in prepareCall() versus. order implied during registerOutParameter(). (Bug#3146)

  • Correctly detect initial character set for servers >= 4.1.0.

  • Cleaned up detection of server properties.

  • Support placeholder for parameter metadata for server >= 4.1.2.

  • getProcedures() does not return any procedures in result set. (Bug#3539)

  • getProcedureColumns() doesn't work with wildcards for procedure name. (Bug#3540)

  • DBMD.getSQLStateType() returns incorrect value. (Bug#3520)

  • Added connectionCollation property to cause driver to issue set collation_connection=... query on connection init if default collation for given charset is not appropriate.

  • Fixed DatabaseMetaData.getProcedures() when run on MySQL-5.0.0 (output of SHOW PROCEDURE STATUS changed between 5.0.0 and 5.0.1.

  • getWarnings() returns SQLWarning instead of DataTruncation. (Bug#3804)

  • Don't enable server-side prepared statements for server version 5.0.0 or 5.0.1, as they aren't compatible with the '4.1.2+' style that the driver uses (the driver expects information to come back that isn't there, so it hangs).

C.5.3.15.聽Changes in MySQL Connector/J 3.1.1-alpha (14 February 2004)

  • Fixed bug with UpdatableResultSets not using client-side prepared statements.

  • Fixed character encoding issues when converting bytes to ASCII when MySQL doesn't provide the character set, and the JVM is set to a multi-byte encoding (usually affecting retrieval of numeric values).

  • Unpack 鈥unknown鈥 data types from server prepared statements as Strings.

  • Implemented long data (Blobs, Clobs, InputStreams, Readers) for server prepared statements.

  • Implemented Statement.getWarnings() for MySQL-4.1 and newer (using SHOW WARNINGS).

  • Default result set type changed to TYPE_FORWARD_ONLY (JDBC compliance).

  • Centralized setting of result set type and concurrency.

  • Refactored how connection properties are set and exposed as DriverPropertyInfo as well as Connection and DataSource properties.

  • Support for NIO. Use useNIO=true on platforms that support NIO.

  • Support for transaction savepoints (MySQL >= 4.0.14 or 4.1.1).

  • Support for mysql_change_user(). See the changeUser() method in com.mysql.jdbc.Connection.

  • Reduced number of methods called in average query to be more efficient.

  • Prepared Statements will be re-prepared on auto-reconnect. Any errors encountered are postponed until first attempt to re-execute the re-prepared statement.

  • Ensure that warnings are cleared before executing queries on prepared statements, as-per JDBC spec (now that we support warnings).

  • Support 鈥oldprofileSql capitalization in ConnectionProperties. This property is deprecated, you should use profileSQL if possible.

  • Optimized Buffer.readLenByteArray() to return shared empty byte array when length is 0.

  • Allow contents of PreparedStatement.setBlob() to be retained between calls to .execute*().

  • Deal with 0-length tokens in EscapeProcessor (caused by callable statement escape syntax).

  • Check for closed connection on delete/update/insert row operations in UpdatableResultSet.

  • Fix support for table aliases when checking for all primary keys in UpdatableResultSet.

  • Removed useFastDates connection property.

  • Correctly initialize datasource properties from JNDI Refs, including explicitly specified URLs.

  • DatabaseMetaData now reports supportsStoredProcedures() for MySQL versions >= 5.0.0

  • Fixed stack overflow in Connection.prepareCall() (bad merge).

  • Fixed IllegalAccessError to Calendar.getTimeInMillis() in DateTimeValue (for JDK < 1.4).

  • DatabaseMetaData.getColumns() is not returning correct column ordinal info for non-'%' column name patterns. (Bug#1673)

  • Merged fix of datatype mapping from MySQL type FLOAT to java.sql.Types.REAL from 3.0 branch.

  • Detect collation of column for RSMD.isCaseSensitive().

  • Fixed sending of queries larger than 16M.

  • Added named and indexed input/output parameter support to CallableStatement. MySQL-5.0.x or newer.

  • Fixed NullPointerException in ServerPreparedStatement.setTimestamp(), as well as year and month descrepencies in ServerPreparedStatement.setTimestamp(), setDate().

  • Added ability to have multiple database/JVM targets for compliance and regression/unit tests in build.xml.

  • Fixed NPE and year/month bad conversions when accessing some datetime functionality in ServerPreparedStatements and their resultant result sets.

  • Display where/why a connection was implicitly closed (to aid debugging).

  • CommunicationsException implemented, that tries to determine why communications was lost with a server, and displays possible reasons when .getMessage() is called.

  • NULL values for numeric types in binary encoded result sets causing NullPointerExceptions. (Bug#2359)

  • Implemented Connection.prepareCall(), and DatabaseMetaData. getProcedures() and getProcedureColumns().

  • Reset long binary parameters in ServerPreparedStatement when clearParameters() is called, by sending COM_RESET_STMT to the server.

  • Merged prepared statement caching, and .getMetaData() support from 3.0 branch.

  • Fixed off-by-1900 error in some cases for years in TimeUtil.fastDate/TimeCreate() when unpacking results from server-side prepared statements.

  • Fixed charset conversion issue in getTables(). (Bug#2502)

  • Implemented multiple result sets returned from a statement or stored procedure.

  • Server-side prepared statements were not returning datatype YEAR correctly. (Bug#2606)

  • Enabled streaming of result sets from server-side prepared statements.

  • Class-cast exception when using scrolling result sets and server-side prepared statements. (Bug#2623)

  • Merged unbuffered input code from 3.0.

  • Fixed ConnectionProperties that weren't properly exposed via accessors, cleaned up ConnectionProperties code.

  • NULL fields were not being encoded correctly in all cases in server-side prepared statements. (Bug#2671)

  • Fixed rare buffer underflow when writing numbers into buffers for sending prepared statement execution requests.

  • Use DocBook version of docs for shipped versions of drivers.

C.5.3.16.聽Changes in MySQL Connector/J 3.1.0-alpha (18 February 2003)

  • Added requireSSL property.

  • Added useServerPrepStmts property (default false). The driver will use server-side prepared statements when the server version supports them (4.1 and newer) when this property is set to true. It is currently set to false by default until all bind/fetch functionality has been implemented. Currently only DML prepared statements are implemented for 4.1 server-side prepared statements.

  • Track open Statements, close all when Connection.close() is called (JDBC compliance).

C.5.4.聽Changes in MySQL Connector/J 3.0.x

C.5.4.1.聽Changes in MySQL Connector/J 3.0.17-ga (23 June 2005)

  • Timestamp/Time conversion goes in the wrong 鈥direction鈥 when useTimeZone=true and server time zone differs from client time zone. (Bug#5874)

  • DatabaseMetaData.getIndexInfo() ignored unique parameter. (Bug#7081)

  • Support new protocol type MYSQL_TYPE_VARCHAR.

  • Added useOldUTF8Behavior' configuration property, which causes JDBC driver to act like it did with MySQL-4.0.x and earlier when the character encoding is utf-8 when connected to MySQL-4.1 or newer.

  • Statements created from a pooled connection were returning physical connection instead of logical connection when getConnection() was called. (Bug#7316)

  • PreparedStatements don't encode Big5 (and other multi-byte) character sets correctly in static SQL strings. (Bug#7033)

  • Connections starting up failed-over (due to down master) never retry master. (Bug#6966)

  • PreparedStatement.fixDecimalExponent() adding extra +, making number unparseable by MySQL server. (Bug#7061)

  • Timestamp key column data needed _binary stripped for UpdatableResultSet.refreshRow(). (Bug#7686)

  • Backported SQLState codes mapping from Connector/J 3.1, enable with useSqlStateCodes=true as a connection property, it defaults to false in this release, so that we don't break legacy applications (it defaults to true starting with Connector/J 3.1).

  • PreparedStatement.fixDecimalExponent() adding extra +, making number unparseable by MySQL server. (Bug#7601)

  • Escape sequence {fn convert(..., type)} now supports ODBC-style types that are prepended by SQL_.

  • Fixed duplicated code in configureClientCharset() that prevented useOldUTF8Behavior=true from working properly.

  • Handle streaming result sets with more than 2 billion rows properly by fixing wraparound of row number counter.

  • MS932, SHIFT_JIS, and Windows_31J not recognized as aliases for sjis. (Bug#7607)

  • Adding CP943 to aliases for sjis. (Bug#6549, fixed while fixing Bug#7607)

  • Which requires hex escaping of binary data when using multi-byte charsets with prepared statements. (Bug#8064)

  • NON_UNIQUE column from DBMD.getIndexInfo() returned inverted value. (Bug#8812)

  • Workaround for server Bug#9098: Default values of CURRENT_* for DATE, TIME, DATETIME, and TIMESTAMP columns can't be distinguished from string values, so UpdatableResultSet.moveToInsertRow() generates bad SQL for inserting default values.

  • EUCKR charset is sent as SET NAMES euc_kr which MySQL-4.1 and newer doesn't understand. (Bug#8629)

  • DatabaseMetaData.supportsSelectForUpdate() returns correct value based on server version.

  • Use hex escapes for PreparedStatement.setBytes() for double-byte charsets including 鈥aliasesWindows-31J, CP934, MS932.

  • Added support for the EUC_JP_Solaris character encoding, which maps to a MySQL encoding of eucjpms (backported from 3.1 branch). This only works on servers that support eucjpms, namely 5.0.3 or later.

C.5.4.2.聽Changes in MySQL Connector/J 3.0.16-ga (15 November 2004)

  • Re-issue character set configuration commands when re-using pooled connections and/or Connection.changeUser() when connected to MySQL-4.1 or newer.

  • Fixed ResultSetMetaData.isReadOnly() to detect non-writable columns when connected to MySQL-4.1 or newer, based on existence of 鈥original鈥 table and column names.

  • ResultSet.updateByte() when on insert row throws ArrayOutOfBoundsException. (Bug#5664)

  • Fixed DatabaseMetaData.getTypes() returning incorrect (this is, non-negative) scale for the NUMERIC type.

  • Off-by-one bug in Buffer.readString(string). (Bug#5664)

  • Made TINYINT(1) -> BIT/Boolean conversion configurable via tinyInt1isBit property (default true to be JDBC compliant out of the box).

  • Only set character_set_results during connection establishment if server version >= 4.1.1.

  • Fixed regression where useUnbufferedInput was defaulting to false.

  • ResultSet.getTimestamp() on a column with TIME in it fails. (Bug#5664)

C.5.4.3.聽Changes in MySQL Connector/J 3.0.15-production (04 September 2004)

  • StringUtils.escapeEasternUnicodeByteStream was still broken for GBK. (Bug#4010)

  • Failover for autoReconnect not using port numbers for any hosts, and not retrying all hosts. (Warning: This required a change to the SocketFactory connect() method signature, which is now public Socket connect(String host, int portNumber, Properties props); therefore, any third-party socket factories will have to be changed to support this signature. (Bug#4334)

  • Logical connections created by MysqlConnectionPoolDataSource will now issue a rollback() when they are closed and sent back to the pool. If your application server/connection pool already does this for you, you can set the rollbackOnPooledClose property to false to avoid the overhead of an extra rollback().

  • Removed redundant calls to checkRowPos() in ResultSet.

  • DOUBLE mapped twice in DBMD.getTypeInfo(). (Bug#4742)

  • Added FLOSS license exemption.

  • Calling .close() twice on a PooledConnection causes NPE. (Bug#4808)

  • DBMD.getColumns() returns incorrect JDBC type for unsigned columns. This affects type mappings for all numeric types in the RSMD.getColumnType() and RSMD.getColumnTypeNames() methods as well, to ensure that 鈥like鈥 types from DBMD.getColumns() match up with what RSMD.getColumnType() and getColumnTypeNames() return. (Bug#4138, Bug#4860)

  • Production鈥 is now 鈥GA鈥 (General Availability) in naming scheme of distributions.

  • RSMD.getPrecision() returning 0 for non-numeric types (should return max length in chars for non-binary types, max length in bytes for binary types). This fix also fixes mapping of RSMD.getColumnType() and RSMD.getColumnTypeName() for the BLOB types based on the length sent from the server (the server doesn't distinguish between TINYBLOB, BLOB, MEDIUMBLOB or LONGBLOB at the network protocol level). (Bug#4880)

  • ResultSet should release Field[] instance in .close(). (Bug#5022)

  • ResultSet.getMetaData() should not return incorrectly initialized metadata if the result set has been closed, but should instead throw an SQLException. Also fixed for getRow() and getWarnings() and traversal methods by calling checkClosed() before operating on instance-level fields that are nullified during .close(). (Bug#5069)

  • Parse new time zone variables from 4.1.x servers.

  • Use _binary introducer for PreparedStatement.setBytes() and set*Stream() when connected to MySQL-4.1.x or newer to avoid misinterpretation during character conversion.

C.5.4.4.聽Changes in MySQL Connector/J 3.0.14-production (28 May 2004)

  • Fixed URL parsing error.

C.5.4.5.聽Changes in MySQL Connector/J 3.0.13-production (27 May 2004)

  • Using a MySQLDatasource without server name fails. (Bug#3848)

  • No Database Selected when using MysqlConnectionPoolDataSource. (Bug#3920)

  • PreparedStatement.getGeneratedKeys() method returns only 1 result for batched insertions. (Bug#3873)

C.5.4.6.聽Changes in MySQL Connector/J 3.0.12-production (18 May 2004)

  • Add unsigned attribute to DatabaseMetaData.getColumns() output in the TYPE_NAME column.

  • Added failOverReadOnly property, to allow end-user to configure state of connection (read-only/writable) when failed over.

  • Backported 鈥change user鈥 and 鈥reset server state鈥 functionality from 3.1 branch, to allow clients of MysqlConnectionPoolDataSource to reset server state on getConnection() on a pooled connection.

  • Don't escape SJIS/GBK/BIG5 when using MySQL-4.1 or newer.

  • Allow url parameter for MysqlDataSource and MysqlConnectionPool DataSource so that passing of other properties is possible from inside appservers.

  • Map duplicate key and foreign key errors to SQLState of 23000.

  • Backport documentation tooling from 3.1 branch.

  • Return creating statement for ResultSets created by getGeneratedKeys(). (Bug#2957)

  • Allow java.util.Date to be sent in as parameter to PreparedStatement.setObject(), converting it to a Timestamp to maintain full precision. (Bug#103).

  • Don't truncate BLOB or CLOB values when using setBytes() and/or setBinary/CharacterStream(). (Bug#2670).

  • Dynamically configure character set mappings for field-level character sets on MySQL-4.1.0 and newer using SHOW COLLATION when connecting.

  • Map binary character set to US-ASCII to support DATETIME charset recognition for servers >= 4.1.2.

  • Use SET character_set_results during initialization to allow any charset to be returned to the driver for result sets.

  • Use charsetnr returned during connect to encode queries before issuing SET NAMES on MySQL >= 4.1.0.

  • Add helper methods to ResultSetMetaData (getColumnCharacterEncoding() and getColumnCharacterSet()) to allow end-users to see what charset the driver thinks it should be using for the column.

  • Only set character_set_results for MySQL >= 4.1.0.

  • StringUtils.escapeSJISByteStream() not covering all eastern double-byte charsets correctly. (Bug#3511)

  • Renamed StringUtils.escapeSJISByteStream() to more appropriate escapeEasternUnicodeByteStream().

  • Not specifying database in URL caused MalformedURL exception. (Bug#3554)

  • Auto-convert MySQL encoding names to Java encoding names if used for characterEncoding property.

  • Added encoding names that are recognized on some JVMs to fix case where they were reverse-mapped to MySQL encoding names incorrectly.

  • Use junit.textui.TestRunner for all unit tests (to allow them to be run from the command line outside of Ant or Eclipse).

  • UpdatableResultSet not picking up default values for moveToInsertRow(). (Bug#3557)

  • Inconsistent reporting of data type. The server still doesn't return all types for *BLOBs *TEXT correctly, so the driver won't return those correctly. (Bug#3570)

  • DBMD.getSQLStateType() returns incorrect value. (Bug#3520)

  • Fixed regression in PreparedStatement.setString() and eastern character encodings.

  • Made StringRegressionTest 4.1-unicode aware.

C.5.4.7.聽Changes in MySQL Connector/J 3.0.11-stable (19 February 2004)

  • Trigger a SET NAMES utf8 when encoding is forced to utf8 or utf-8 via the characterEncoding property. Previously, only the Java-style encoding name of utf-8 would trigger this.

  • AutoReconnect time was growing faster than exponentially. (Bug#2447)

  • Fixed failover always going to last host in list. (Bug#2578)

  • Added useUnbufferedInput parameter, and now use it by default (due to JVM issue http://developer.java.sun.com/developer/bugParade/bugs/4401235.html)

  • Detect on/off or 1, 2, 3 form of lower_case_table_names value on server.

  • Return java.lang.Integer for TINYINT and SMALLINT types from ResultSetMetaData.getColumnClassName(). (Bug#2852)

  • Return java.lang.Double for FLOAT type from ResultSetMetaData.getColumnClassName(). (Bug#2855)

  • Return [B instead of java.lang.Object for BINARY, VARBINARY and LONGVARBINARY types from ResultSetMetaData.getColumnClassName() (JDBC compliance).

  • Issue connection events on all instances created from a ConnectionPoolDataSource.

C.5.4.8.聽Changes in MySQL Connector/J 3.0.10-stable (13 January 2004)

  • Don't count quoted IDs when inside a 'string' in PreparedStatement parsing. (Bug#1511)

  • Friendlier鈥 exception message for PacketTooLargeException. (Bug#1534)

  • Backported fix for aliased tables and UpdatableResultSets in checkUpdatability() method from 3.1 branch.

  • Fix for ArrayIndexOutOfBounds exception when using Statement.setMaxRows(). (Bug#1695)

  • Barge blobs and split packets not being read correctly. (Bug#1576)

  • Fixed regression of Statement.getGeneratedKeys() and REPLACE statements.

  • Subsequent call to ResultSet.updateFoo() causes NPE if result set is not updatable. (Bug#1630)

  • Fix for 4.1.1-style authentication with no password.

  • Foreign Keys column sequence is not consistent in DatabaseMetaData.getImported/Exported/CrossReference(). (Bug#1731)

  • DatabaseMetaData.getSystemFunction() returning bad function VResultsSion. (Bug#1775)

  • Cross-database updatable result sets are not checked for updatability correctly. (Bug#1592)

  • DatabaseMetaData.getColumns() should return Types.LONGVARCHAR for MySQL LONGTEXT type.

  • ResultSet.getObject() on TINYINT and SMALLINT columns should return Java type Integer. (Bug#1913)

  • Added alwaysClearStream connection property, which causes the driver to always empty any remaining data on the input stream before each query.

  • Added more descriptive error message Server Configuration Denies Access to DataSource, as well as retrieval of message from server.

  • Autoreconnect code didn't set catalog upon reconnect if it had been changed.

  • Implement ResultSet.updateClob().

  • ResultSetMetaData.isCaseSensitive() returned wrong value for CHAR/VARCHAR columns.

  • Connection property maxRows not honored. (Bug#1933)

  • Statements being created too many times in DBMD.extractForeignKeyFromCreateTable(). (Bug#1925)

  • Support escape sequence {fn convert ... }. (Bug#1914)

  • ArrayIndexOutOfBounds when parameter number == number of parameters + 1. (Bug#1958)

  • ResultSet.findColumn() should use first matching column name when there are duplicate column names in SELECT query (JDBC-compliance). (Bug#2006)

  • Removed static synchronization bottleneck from PreparedStatement.setTimestamp().

  • Removed static synchronization bottleneck from instance factory method of SingleByteCharsetConverter.

  • Enable caching of the parsing stage of prepared statements via the cachePrepStmts, prepStmtCacheSize, and prepStmtCacheSqlLimit properties (disabled by default).

  • Speed up parsing of PreparedStatements, try to use one-pass whenever possible.

  • Fixed security exception when used in Applets (applets can't read the system property file.encoding which is needed for LOAD DATA LOCAL INFILE).

  • Use constants for SQLStates.

  • Map charset ko18_ru to ko18r when connected to MySQL-4.1.0 or newer.

  • Ensure that Buffer.writeString() saves room for the \0.

  • Fixed exception Unknown character set 'danish' on connect with JDK-1.4.0

  • Fixed mappings in SQLError to report deadlocks with SQLStates of 41000.

  • maxRows property would affect internal statements, so check it for all statement creation internal to the driver, and set to 0 when it is not.

C.5.4.9.聽Changes in MySQL Connector/J 3.0.9-stable (07 October 2003)

  • Faster date handling code in ResultSet and PreparedStatement (no longer uses Date methods that synchronize on static calendars).

  • Fixed test for end of buffer in Buffer.readString().

  • Fixed ResultSet.previous() behavior to move current position to before result set when on first row of result set. (Bug#496)

  • Fixed Statement and PreparedStatement issuing bogus queries when setMaxRows() had been used and a LIMIT clause was present in the query.

  • refreshRow didn't work when primary key values contained values that needed to be escaped (they ended up being doubly escaped). (Bug#661)

  • Support InnoDB contraint names when extracting foreign key information in DatabaseMetaData (implementing ideas from Parwinder Sekhon). (Bug#517, Bug#664)

  • Backported 4.1 protocol changes from 3.1 branch (server-side SQL states, new field information, larger client capability flags, connect-with-database, and so forth).

  • Fix UpdatableResultSet to return values for getXXX() when on insert row. (Bug#675)

  • The insertRow in an UpdatableResultSet is now loaded with the default column values when moveToInsertRow() is called. (Bug#688)

  • DatabaseMetaData.getColumns() wasn't returning NULL for default values that are specified as NULL.

  • Change default statement type/concurrency to TYPE_FORWARD_ONLY and CONCUR_READ_ONLY (spec compliance).

  • Don't try and reset isolation level on reconnect if MySQL doesn't support them.

  • Don't wrap SQLExceptions in RowDataDynamic.

  • Don't change timestamp TZ twice if useTimezone==true. (Bug#774)

  • Fixed regression in large split-packet handling. (Bug#848)

  • Better diagnostic error messages in exceptions for 鈥streaming鈥 result sets.

  • Issue exception on ResultSet.getXXX() on empty result set (wasn't caught in some cases).

  • Don't hide messages from exceptions thrown in I/O layers.

  • Don't fire connection closed events when closing pooled connections, or on PooledConnection.getConnection() with already open connections. (Bug#884)

  • Clip +/- INF (to smallest and largest representative values for the type in MySQL) and NaN (to 0) for setDouble/setFloat(), and issue a warning on the statement when the server does not support +/- INF or NaN.

  • Double-escaping of '\' when charset is SJIS or GBK and '\' appears in non-escaped input. (Bug#879)

  • When emptying input stream of unused rows for 鈥streaming鈥 result sets, have the current thread yield() every 100 rows in order to not monopolize CPU time.

  • DatabaseMetaData.getColumns() getting confused about the keyword 鈥set鈥 in character columns. (Bug#1099)

  • Fixed deadlock issue with Statement.setMaxRows().

  • Fixed CLOB.truncate(). (Bug#1130)

  • Optimized CLOB.setChracterStream(). (Bug#1131)

  • Made databaseName, portNumber, and serverName optional parameters for MysqlDataSourceFactory. (Bug#1246)

  • ResultSet.get/setString mashing char 127. (Bug#1247)

  • Backported authentication changes for 4.1.1 and newer from 3.1 branch.

  • Added com.mysql.jdbc.util.BaseBugReport to help creation of testcases for bug reports.

  • Added property to 鈥clobber鈥 streaming results, by setting the clobberStreamingResults property to true (the default is false). This will cause a 鈥streamingResultSet to be automatically closed, and any oustanding data still streaming from the server to be discarded if another query is executed before all the data has been read from the server.

C.5.4.10.聽Changes in MySQL Connector/J 3.0.8-stable (23 May 2003)

  • Allow bogus URLs in Driver.getPropertyInfo().

  • Return list of generated keys when using multi-value INSERTS with Statement.getGeneratedKeys().

  • Use JVM charset with filenames and LOAD DATA [LOCAL] INFILE.

  • Fix infinite loop with Connection.cleanup().

  • Changed Ant target compile-core to compile-driver, and made testsuite compilation a separate target.

  • Fixed result set not getting set for Statement.executeUpdate(), which affected getGeneratedKeys() and getUpdateCount() in some cases.

  • Unicode character 0xFFFF in a string would cause the driver to throw an ArrayOutOfBoundsException. (Bug#378).

  • Return correct number of generated keys when using REPLACE statements.

  • Fix problem detecting server character set in some cases.

  • Fix row data decoding error when using very large packets.

  • Optimized row data decoding.

  • Issue exception when operating on an already closed prepared statement.

  • Fixed SJIS encoding bug, thanks to Naoto Sato.

  • Optimized usage of EscapeProcessor.

  • Allow multiple calls to Statement.close().

C.5.4.11.聽Changes in MySQL Connector/J 3.0.7-stable (08 April 2003)

  • Fixed MysqlPooledConnection.close() calling wrong event type.

  • Fixed StringIndexOutOfBoundsException in PreparedStatement.setClob().

  • 4.1 Column Metadata fixes.

  • Remove synchronization from Driver.connect() and Driver.acceptsUrl().

  • IOExceptions during a transaction now cause the Connection to be closed.

  • Fixed missing conversion for YEAR type in ResultSetMetaData.getColumnTypeName().

  • Don't pick up indexes that start with pri as primary keys for DBMD.getPrimaryKeys().

  • Throw SQLExceptions when trying to do operations on a forcefully closed Connection (that is, when a communication link failure occurs).

  • You can now toggle profiling on/off using Connection.setProfileSql(boolean).

  • Fixed charset issues with database metadata (charset was not getting set correctly).

  • Updatable ResultSets can now be created for aliased tables/columns when connected to MySQL-4.1 or newer.

  • Fixed LOAD DATA LOCAL INFILE bug when file > max_allowed_packet.

  • Fixed escaping of 0x5c ('\') character for GBK and Big5 charsets.

  • Fixed ResultSet.getTimestamp() when underlying field is of type DATE.

  • Ensure that packet size from alignPacketSize() does not exceed max_allowed_packet (JVM bug)

  • Don't reset Connection.isReadOnly() when autoReconnecting.

C.5.4.12.聽Changes in MySQL Connector/J 3.0.6-stable (18 February 2003)

  • Fixed ResultSetMetaData to return "" when catalog not known. Fixes NullPointerExceptions with Sun's CachedRowSet.

  • Fixed DBMD.getTypeInfo() and DBMD.getColumns() returning different value for precision in TEXT and BLOB types.

  • Allow ignoring of warning for 鈥non transactional tables鈥 during rollback (compliance/usability) by setting ignoreNonTxTables property to true.

  • Fixed SQLExceptions getting swallowed on initial connect.

  • Fixed Statement.setMaxRows() to stop sending LIMIT type queries when not needed (performance).

  • Clean up Statement query/method mismatch tests (that is, INSERT not allowed with .executeQuery()).

  • More checks added in ResultSet traversal method to catch when in closed state.

  • Fixed ResultSetMetaData.isWritable() to return correct value.

  • Add 鈥window鈥 of different NULL sorting behavior to DBMD.nullsAreSortedAtStart (4.0.2 to 4.0.10, true; otherwise, no).

  • Implemented Blob.setBytes(). You still need to pass the resultant Blob back into an updatable ResultSet or PreparedStatement to persist the changes, because MySQL does not support 鈥locators鈥.

  • Backported 4.1 charset field info changes from Connector/J 3.1.

C.5.4.13.聽Changes in MySQL Connector/J 3.0.5-gamma (22 January 2003)

  • Fixed Buffer.fastSkipLenString() causing ArrayIndexOutOfBounds exceptions with some queries when unpacking fields.

  • Implemented an empty TypeMap for Connection.getTypeMap() so that some third-party apps work with MySQL (IBM WebSphere 5.0 Connection pool).

  • Added missing LONGTEXT type to DBMD.getColumns().

  • Retrieve TX_ISOLATION from database for Connection.getTransactionIsolation() when the MySQL version supports it, instead of an instance variable.

  • Quote table names in DatabaseMetaData.getColumns(), getPrimaryKeys(), getIndexInfo(), getBestRowIdentifier().

  • Greatly reduce memory required for setBinaryStream() in PreparedStatements.

  • Fixed ResultSet.isBeforeFirst() for empty result sets.

  • Added update options for foreign key metadata.

C.5.4.14.聽Changes in MySQL Connector/J 3.0.4-gamma (06 January 2003)

  • Added quoted identifiers to database names for Connection.setCatalog.

  • Added support for quoted identifiers in PreparedStatement parser.

  • Streamlined character conversion and byte[] handling in PreparedStatements for setByte().

  • Reduce memory footprint of PreparedStatements by sharing outbound packet with MysqlIO.

  • Added strictUpdates property to allow control of amount of checking for 鈥correctness鈥 of updatable result sets. Set this to false if you want faster updatable result sets and you know that you create them from SELECT statements on tables with primary keys and that you have selected all primary keys in your query.

  • Added support for 4.0.8-style large packets.

  • Fixed PreparedStatement.executeBatch() parameter overwriting.

C.5.4.15.聽Changes in MySQL Connector/J 3.0.3-dev (17 December 2002)

  • Changed charsToByte in SingleByteCharConverter to be non-static.

  • Changed SingleByteCharConverter to use lazy initialization of each converter.

  • Fixed charset handling in Fields.java.

  • Implemented Connection.nativeSQL().

  • More robust escape tokenizer: Recognize -- comments, and allow nested escape sequences (see testsuite.EscapeProcessingTest).

  • DBMD.getImported/ExportedKeys() now handles multiple foreign keys per table.

  • Fixed ResultSetMetaData.getPrecision() returning incorrect values for some floating-point types.

  • Fixed ResultSetMetaData.getColumnTypeName() returning BLOB for TEXT and TEXT for BLOB types.

  • Fixed Buffer.isLastDataPacket() for 4.1 and newer servers.

  • Added CLIENT_LONG_FLAG to be able to get more column flags (isAutoIncrement() being the most important).

  • Because of above, implemented ResultSetMetaData.isAutoIncrement() to use Field.isAutoIncrement().

  • Honor lower_case_table_names when enabled in the server when doing table name comparisons in DatabaseMetaData methods.

  • Some MySQL-4.1 protocol support (extended field info from selects).

  • Use non-aliased table/column names and database names to fullly qualify tables and columns in UpdatableResultSet (requires MySQL-4.1 or newer).

  • Allow user to alter behavior of Statement/ PreparedStatement.executeBatch() via continueBatchOnError property (defaults to true).

  • Check for connection closed in more Connection methods (createStatement, prepareStatement, setTransactionIsolation, setAutoCommit).

  • More robust implementation of updatable result sets. Checks that all primary keys of the table have been selected.

  • LOAD DATA LOCAL INFILE ... now works, if your server is configured to allow it. Can be turned off with the allowLoadLocalInfile property (see the README).

  • Substitute '?' for unknown character conversions in single-byte character sets instead of '\0'.

  • NamedPipeSocketFactory now works (only intended for Windows), see README for instructions.

C.5.4.16.聽Changes in MySQL Connector/J 3.0.2-dev (08 November 2002)

  • Fixed issue with updatable result sets and PreparedStatements not working.

  • Fixed ResultSet.setFetchDirection(FETCH_UNKNOWN).

  • Fixed issue when calling Statement.setFetchSize() when using arbitrary values.

  • Fixed incorrect conversion in ResultSet.getLong().

  • Implemented ResultSet.updateBlob().

  • Removed duplicate code from UpdatableResultSet (it can be inherited from ResultSet, the extra code for each method to handle updatability I thought might someday be necessary has not been needed).

  • Fixed UnsupportedEncodingException thrown when 鈥forcing鈥 a character encoding via properties.

  • Fixed various non-ASCII character encoding issues.

  • Added driver property useHostsInPrivileges. Defaults to true. Affects whether or not @hostname will be used in DBMD.getColumn/TablePrivileges.

  • All DBMD result set columns describing schemas now return NULL to be more compliant with the behavior of other JDBC drivers for other database systems (MySQL does not support schemas).

  • Added SSL support. See README for information on how to use it.

  • Properly restore connection properties when autoReconnecting or failing-over, including autoCommit state, and isolation level.

  • Use SHOW CREATE TABLE when possible for determining foreign key information for DatabaseMetaData. Also allows cascade options for DELETE information to be returned.

  • Escape 0x5c character in strings for the SJIS charset.

  • Fixed start position off-by-1 error in Clob.getSubString().

  • Implemented Clob.truncate().

  • Implemented Clob.setString().

  • Implemented Clob.setAsciiStream().

  • Implemented Clob.setCharacterStream().

  • Added com.mysql.jdbc.MiniAdmin class, which allows you to send shutdown command to MySQL server. This is intended to be used when 鈥embedding鈥 Java and MySQL server together in an end-user application.

  • Added connectTimeout parameter that allows users of JDK-1.4 and newer to specify a maxium time to wait to establish a connection.

  • Failover and autoReconnect work only when the connection is in an autoCommit(false) state, in order to stay transaction-safe.

  • Added queriesBeforeRetryMaster property that specifies how many queries to issue when failed over before attempting to reconnect to the master (defaults to 50).

  • Fixed DBMD.supportsResultSetConcurrency() so that it returns true for ResultSet.TYPE_SCROLL_INSENSITIVE and ResultSet.CONCUR_READ_ONLY or ResultSet.CONCUR_UPDATABLE.

  • Fixed ResultSet.isLast() for empty result sets (should return false).

  • PreparedStatement now honors stream lengths in setBinary/Ascii/Character Stream() unless you set the connection property useStreamLengthsInPrepStmts to false.

  • Removed some not-needed temporary object creation by smarter use of Strings in EscapeProcessor, Connection and DatabaseMetaData classes.

C.5.4.17.聽Changes in MySQL Connector/J 3.0.1-dev (21 September 2002)

  • Fixed ResultSet.getRow() off-by-one bug.

  • Fixed RowDataStatic.getAt() off-by-one bug.

  • Added limited Clob functionality (ResultSet.getClob(), PreparedStatemtent.setClob(), PreparedStatement.setObject(Clob).

  • Added socketTimeout parameter to URL.

  • Connection.isClosed() no longer 鈥pings鈥 the server.

  • Connection.close() issues rollback() when getAutoCommit() is false.

  • Added paranoid parameter, which sanitizes error messages by removing 鈥sensitive鈥 information from them (such as hostnames, ports, or usernames), as well as clearing 鈥sensitive鈥 data structures when possible.

  • Fixed ResultSetMetaData.isSigned() for TINYINT and BIGINT.

  • Charsets now automatically detected. Optimized code for single-byte character set conversion.

  • Implemented ResultSet.getCharacterStream().

  • Added LOCAL TEMPORARY to table types in DatabaseMetaData.getTableTypes().

  • Massive code clean-up to follow Java coding conventions (the time had come).

C.5.4.18.聽Changes in MySQL Connector/J 3.0.0-dev (31 July 2002)

  • !!! LICENSE CHANGE !!! The driver is now GPL. If you need non-GPL licenses, please contact me <mark@mysql.com>.

  • JDBC-3.0 functionality including Statement/PreparedStatement.getGeneratedKeys() and ResultSet.getURL().

  • Performance enchancements: Driver is now 50鈥100% faster in most situations, and creates fewer temporary objects.

  • Repackaging: New driver name is com.mysql.jdbc.Driver, old name still works, though (the driver is now provided by MySQL-AB).

  • Better checking for closed connections in Statement and PreparedStatement.

  • Support for streaming (row-by-row) result sets (see README) Thanks to Doron.

  • Support for large packets (new addition to MySQL-4.0 protocol), see README for more information.

  • JDBC Compliance: Passes all tests besides stored procedure tests.

  • Fix and sort primary key names in DBMetaData (SF bugs 582086 and 582086).

  • Float types now reported as java.sql.Types.FLOAT (SF bug 579573).

  • ResultSet.getTimestamp() now works for DATE types (SF bug 559134).

  • ResultSet.getDate/Time/Timestamp now recognizes all forms of invalid values that have been set to all zeros by MySQL (SF bug 586058).

  • Testsuite now uses Junit (which you can get from http://www.junit.org.

  • The driver now only works with JDK-1.2 or newer.

  • Added multi-host failover support (see README).

  • General source-code cleanup.

  • Overall speed improvements via controlling transient object creation in MysqlIO class when reading packets.

  • Performance improvements in string handling and field metadata creation (lazily instantiated) contributed by Alex Twisleton-Wykeham-Fiennes.

C.5.5.聽Changes in MySQL Connector/J 2.0.x

C.5.5.1.聽Changes in MySQL Connector/J 2.0.14 (16 May 2002)

  • More code cleanup.

  • PreparedStatement now releases resources on .close(). (SF bug 553268)

  • Quoted identifiers not used if server version does not support them. Also, if server started with --ansi or --sql-mode=ANSI_QUOTES, 鈥"鈥 will be used as an identifier quote character, otherwise 鈥'鈥 will be used.

  • ResultSet.getDouble() now uses code built into JDK to be more precise (but slower).

  • LogicalHandle.isClosed() calls through to physical connection.

  • Added SQL profiling (to STDERR). Set profileSql=true in your JDBC URL. See README for more information.

  • Fixed typo for relaxAutoCommit parameter.

C.5.5.2.聽Changes in MySQL Connector/J 2.0.13 (24 April 2002)

  • More code cleanup.

  • Fixed unicode chars being read incorrectly. (SF bug 541088)

  • Faster blob escaping for PrepStmt.

  • Added set/getPortNumber() to DataSource(s). (SF bug 548167)

  • Added setURL() to MySQLXADataSource. (SF bug 546019)

  • PreparedStatement.toString() fixed. (SF bug 534026)

  • ResultSetMetaData.getColumnClassName() now implemented.

  • Rudimentary version of Statement.getGeneratedKeys() from JDBC-3.0 now implemented (you need to be using JDK-1.4 for this to work, I believe).

  • DBMetaData.getIndexInfo() - bad PAGES fixed. (SF BUG 542201)

C.5.5.3.聽Changes in MySQL Connector/J 2.0.12 (07 April 2002)

  • General code cleanup.

  • Added getIdleFor() method to Connection and MysqlLogicalHandle.

  • Relaxed synchronization in all classes, should fix 520615 and 520393.

  • Added getTable/ColumnPrivileges() to DBMD (fixes 484502).

  • Added new types to getTypeInfo(), fixed existing types thanks to Al Davis and Kid Kalanon.

  • Added support for BIT types (51870) to PreparedStatement.

  • Fixed getRow() bug (527165) in ResultSet.

  • Fixes for ResultSet updatability in PreparedStatement.

  • Fixed time zone off-by-1-hour bug in PreparedStatement (538286, 528785).

  • ResultSet: Fixed updatability (values being set to null if not updated).

  • DataSources - fixed setUrl bug (511614, 525565), wrong datasource class name (532816, 528767).

  • Added identifier quoting to all DatabaseMetaData methods that need them (should fix 518108).

  • Added support for YEAR type (533556).

  • ResultSet.insertRow() should now detect auto_increment fields in most cases and use that value in the new row. This detection will not work in multi-valued keys, however, due to the fact that the MySQL protocol does not return this information.

  • ResultSet.refreshRow() implemented.

  • Fixed testsuite.Traversal afterLast() bug, thanks to Igor Lastric.

C.5.5.4.聽Changes in MySQL Connector/J 2.0.11 (27 January 2002)

  • Fixed missing DELETE_RULE value in DBMD.getImported/ExportedKeys() and getCrossReference().

  • Full synchronization of Statement.java.

  • More changes to fix Unexpected end of input stream errors when reading BLOB values. This should be the last fix.

C.5.5.5.聽Changes in MySQL Connector/J 2.0.10 (24 January 2002)

  • Fixed spurious Unexpected end of input stream errors in MysqlIO (bug 507456).

  • Fixed null-pointer-exceptions when using MysqlConnectionPoolDataSource with Websphere 4 (bug 505839).

C.5.5.6.聽Changes in MySQL Connector/J 2.0.9 (13 January 2002)

  • Ant build was corrupting included jar files, fixed (bug 487669).

  • Fixed extra memory allocation in MysqlIO.readPacket() (bug 488663).

  • Implementation of DatabaseMetaData.getExported/ImportedKeys() and getCrossReference().

  • Full synchronization on methods modifying instance and class-shared references, driver should be entirely thread-safe now (please let me know if you have problems).

  • DataSource implementations moved to org.gjt.mm.mysql.jdbc2.optional package, and (initial) implementations of PooledConnectionDataSource and XADataSource are in place (thanks to Todd Wolff for the implementation and testing of PooledConnectionDataSource with IBM WebSphere 4).

  • Added detection of network connection being closed when reading packets (thanks to Todd Lizambri).

  • Fixed quoting error with escape processor (bug 486265).

  • Report batch update support through DatabaseMetaData (bug 495101).

  • Fixed off-by-one-hour error in PreparedStatement.setTimestamp() (bug 491577).

  • Removed concatenation support from driver (the || operator), as older versions of VisualAge seem to be the only thing that use it, and it conflicts with the logical || operator. You will need to start mysqld with the --ansi flag to use the || operator as concatenation (bug 491680).

  • Fixed casting bug in PreparedStatement (bug 488663).

C.5.5.7.聽Changes in MySQL Connector/J 2.0.8 (25 November 2001)

  • Batch updates now supported (thanks to some inspiration from Daniel Rall).

  • XADataSource/ConnectionPoolDataSource code (experimental)

  • PreparedStatement.setAnyNumericType() now handles positive exponents correctly (adds + so MySQL can understand it).

  • DatabaseMetaData.getPrimaryKeys() and getBestRowIdentifier() are now more robust in identifying primary keys (matches regardless of case or abbreviation/full spelling of Primary Key in Key_type column).

C.5.5.8.聽Changes in MySQL Connector/J 2.0.7 (24 October 2001)

  • PreparedStatement.setCharacterStream() now implemented

  • Fixed dangling socket problem when in high availability (autoReconnect=true) mode, and finalizer for Connection will close any dangling sockets on GC.

  • Fixed ResultSetMetaData.getPrecision() returning one less than actual on newer versions of MySQL.

  • ResultSet.getBlob() now returns null if column value was null.

  • Character sets read from database if useUnicode=true and characterEncoding is not set. (thanks to Dmitry Vereshchagin)

  • Initial transaction isolation level read from database (if avaialable). (thanks to Dmitry Vereshchagin)

  • Fixed DatabaseMetaData.supportsTransactions(), and supportsTransactionIsolationLevel() and getTypeInfo() SQL_DATETIME_SUB and SQL_DATA_TYPE fields not being readable.

  • Fixed PreparedStatement generating SQL that would end up with syntax errors for some queries.

  • Fixed ResultSet.isAfterLast() always returning false.

  • Fixed time zone issue in PreparedStatement.setTimestamp(). (thanks to Erik Olofsson)

  • Captialize type names when captializeTypeNames=true is passed in URL or properties (for WebObjects. (thanks to Anjo Krank)

  • Updatable result sets now correctly handle NULL values in fields.

  • PreparedStatement.setDouble() now uses full-precision doubles (reverting a fix made earlier to truncate them).

  • PreparedStatement.setBoolean() will use 1/0 for values if your MySQL version is 3.21.23 or higher.

C.5.5.9.聽Changes in MySQL Connector/J 2.0.6 (16 June 2001)

  • Fixed PreparedStatement parameter checking.

  • Fixed case-sensitive column names in ResultSet.java.

C.5.5.10.聽Changes in MySQL Connector/J 2.0.5 (13 June 2001)

  • Fixed ResultSet.getBlob() ArrayIndex out-of-bounds.

  • Fixed ResultSetMetaData.getColumnTypeName for TEXT/BLOB.

  • Fixed ArrayIndexOutOfBounds when sending large BLOB queries. (Max size packet was not being set)

  • Added ISOLATION level support to Connection.setIsolationLevel()

  • Fixed NPE on PreparedStatement.executeUpdate() when all columns have not been set.

  • Fixed data parsing of TIMESTAMP values with 2-digit years.

  • Added Byte to PreparedStatement.setObject().

  • ResultSet.getBoolean() now recognizes -1 as true.

  • ResultSet has +/-Inf/inf support.

  • ResultSet.insertRow() works now, even if not all columns are set (they will be set to NULL).

  • DataBaseMetaData.getCrossReference() no longer ArrayIndexOOB.

  • getObject() on ResultSet correctly does TINYINT->Byte and SMALLINT->Short.

C.5.5.11.聽Changes in MySQL Connector/J 2.0.3 (03 December 2000)

  • Implemented getBigDecimal() without scale component for JDBC2.

  • Fixed composite key problem with updatable result sets.

  • Added detection of -/+INF for doubles.

  • Faster ASCII string operations.

  • Fixed incorrect detection of MAX_ALLOWED_PACKET, so sending large blobs should work now.

  • Fixed off-by-one error in java.sql.Blob implementation code.

  • Added ultraDevHack URL parameter, set to true to allow (broken) Macromedia UltraDev to use the driver.

C.5.5.12.聽Changes in MySQL Connector/J 2.0.1 (06 April 2000)

  • Fixed RSMD.isWritable() returning wrong value. Thanks to Moritz Maass.

  • Cleaned up exception handling when driver connects.

  • Columns that are of type TEXT now return as Strings when you use getObject().

  • DatabaseMetaData.getPrimaryKeys() now works correctly with respect to key_seq. Thanks to Brian Slesinsky.

  • No escape processing is done on PreparedStatements anymore per JDBC spec.

  • Fixed many JDBC-2.0 traversal, positioning bugs, especially with respect to empty result sets. Thanks to Ron Smits, Nick Brook, Cessar Garcia and Carlos Martinez.

  • Fixed some issues with updatability support in ResultSet when using multiple primary keys.

C.5.5.13.聽Changes in MySQL Connector/J 2.0.0pre5 (21 February 2000)

  • Fixed Bad Handshake problem.

C.5.5.14.聽Changes in MySQL Connector/J 2.0.0pre4 (10 January 2000)

  • Fixes to ResultSet for insertRow() - Thanks to Cesar Garcia

  • Fix to Driver to recognize JDBC-2.0 by loading a JDBC-2.0 class, instead of relying on JDK version numbers. Thanks to John Baker.

  • Fixed ResultSet to return correct row numbers

  • Statement.getUpdateCount() now returns rows matched, instead of rows actually updated, which is more SQL-92 like.

10-29-99

  • Statement/PreparedStatement.getMoreResults() bug fixed. Thanks to Noel J. Bergman.

  • Added Short as a type to PreparedStatement.setObject(). Thanks to Jeff Crowder

  • Driver now automagically configures maximum/preferred packet sizes by querying server.

  • Autoreconnect code uses fast ping command if server supports it.

  • Fixed various bugs with respect to packet sizing when reading from the server and when alloc'ing to write to the server.

C.5.5.15.聽Changes in MySQL Connector/J 2.0.0pre (17 August 1999)

  • Now compiles under JDK-1.2. The driver supports both JDK-1.1 and JDK-1.2 at the same time through a core set of classes. The driver will load the appropriate interface classes at runtime by figuring out which JVM version you are using.

  • Fixes for result sets with all nulls in the first row. (Pointed out by Tim Endres)

  • Fixes to column numbers in SQLExceptions in ResultSet (Thanks to Blas Rodriguez Somoza)

  • The database no longer needs to specified to connect. (Thanks to Christian Motschke)

C.5.6.聽Changes in MySQL Connector/J 1.2b (04 July 1999)

  • Better Documentation (in progress), in doc/mm.doc/book1.html

  • DBMD now allows null for a column name pattern (not in spec), which it changes to '%'.

  • DBMD now has correct types/lengths for getXXX().

  • ResultSet.getDate(), getTime(), and getTimestamp() fixes. (contributed by Alan Wilken)

  • EscapeProcessor now handles \{ \} and { or } inside quotes correctly. (thanks to Alik for some ideas on how to fix it)

  • Fixes to properties handling in Connection. (contributed by Juho Tikkala)

  • ResultSet.getObject() now returns null for NULL columns in the table, rather than bombing out. (thanks to Ben Grosman)

  • ResultSet.getObject() now returns Strings for types from MySQL that it doesn't know about. (Suggested by Chris Perdue)

  • Removed DataInput/Output streams, not needed, 1/2 number of method calls per IO operation.

  • Use default character encoding if one is not specified. This is a work-around for broken JVMs, because according to spec, EVERY JVM must support "ISO8859_1", but they don't.

  • Fixed Connection to use the platform character encoding instead of "ISO8859_1" if one isn't explicitly set. This fixes problems people were having loading the character- converter classes that didn't always exist (JVM bug). (thanks to Fritz Elfert for pointing out this problem)

  • Changed MysqlIO to re-use packets where possible to reduce memory usage.

  • Fixed escape-processor bugs pertaining to {} inside quotes.

C.5.7.聽Changes in MySQL Connector/J 1.2.x and lower

C.5.7.1.聽Changes in MySQL Connector/J 1.2a (14 April 1999)

  • Fixed character-set support for non-Javasoft JVMs (thanks to many people for pointing it out)

  • Fixed ResultSet.getBoolean() to recognize 'y' & 'n' as well as '1' & '0' as boolean flags. (thanks to Tim Pizey)

  • Fixed ResultSet.getTimestamp() to give better performance. (thanks to Richard Swift)

  • Fixed getByte() for numeric types. (thanks to Ray Bellis)

  • Fixed DatabaseMetaData.getTypeInfo() for DATE type. (thanks to Paul Johnston)

  • Fixed EscapeProcessor for "fn" calls. (thanks to Piyush Shah at locomotive.org)

  • Fixed EscapeProcessor to not do extraneous work if there are no escape codes. (thanks to Ryan Gustafson)

  • Fixed Driver to parse URLs of the form "jdbc:mysql://host:port" (thanks to Richard Lobb)

C.5.7.2.聽Changes in MySQL Connector/J 1.1i (24 March 1999)

  • Fixed Timestamps for PreparedStatements

  • Fixed null pointer exceptions in RSMD and RS

  • Re-compiled with jikes for valid class files (thanks ms!)

C.5.7.3.聽Changes in MySQL Connector/J 1.1h (08 March 1999)

  • Fixed escape processor to deal with unmatched { and } (thanks to Craig Coles)

  • Fixed escape processor to create more portable (between DATETIME and TIMESTAMP types) representations so that it will work with BETWEEN clauses. (thanks to Craig Longman)

  • MysqlIO.quit() now closes the socket connection. Before, after many failed connections some OS's would run out of file descriptors. (thanks to Michael Brinkman)

  • Fixed NullPointerException in Driver.getPropertyInfo. (thanks to Dave Potts)

  • Fixes to MysqlDefs to allow all *text fields to be retrieved as Strings. (thanks to Chris at Leverage)

  • Fixed setDouble in PreparedStatement for large numbers to avoid sending scientific notation to the database. (thanks to J.S. Ferguson)

  • Fixed getScale() and getPrecision() in RSMD. (contrib'd by James Klicman)

  • Fixed getObject() when field was DECIMAL or NUMERIC (thanks to Bert Hobbs)

  • DBMD.getTables() bombed when passed a null table-name pattern. Fixed. (thanks to Richard Lobb)

  • Added check for "client not authorized" errors during connect. (thanks to Hannes Wallnoefer)

C.5.7.4.聽Changes in MySQL Connector/J 1.1g (19 February 1999)

  • Result set rows are now byte arrays. Blobs and Unicode work bidriectonally now. The useUnicode and encoding options are implemented now.

  • Fixes to PreparedStatement to send binary set by setXXXStream to be sent untouched to the MySQL server.

  • Fixes to getDriverPropertyInfo().

C.5.7.5.聽Changes in MySQL Connector/J 1.1f (31 December 1998)

  • Changed all ResultSet fields to Strings, this should allow Unicode to work, but your JVM must be able to convert between the character sets. This should also make reading data from the server be a bit quicker, because there is now no conversion from StringBuffer to String.

  • Changed PreparedStatement.streamToString() to be more efficient (code from Uwe Schaefer).

  • URL parsing is more robust (throws SQL exceptions on errors rather than NullPointerExceptions)

  • PreparedStatement now can convert Strings to Time/Date values via setObject() (code from Robert Currey).

  • IO no longer hangs in Buffer.readInt(), that bug was introduced in 1.1d when changing to all byte-arrays for result sets. (Pointed out by Samo Login)

C.5.7.6.聽Changes in MySQL Connector/J 1.1b (03 November 1998)

  • Fixes to DatabaseMetaData to allow both IBM VA and J-Builder to work. Let me know how it goes. (thanks to Jac Kersing)

  • Fix to ResultSet.getBoolean() for NULL strings (thanks to Barry Lagerweij)

  • Beginning of code cleanup, and formatting. Getting ready to branch this off to a parallel JDBC-2.0 source tree.

  • Added "final" modifier to critical sections in MysqlIO and Buffer to allow compiler to inline methods for speed.

9-29-98

  • If object references passed to setXXX() in PreparedStatement are null, setNull() is automatically called for you. (Thanks for the suggestion goes to Erik Ostrom)

  • setObject() in PreparedStatement will now attempt to write a serialized representation of the object to the database for objects of Types.OTHER and objects of unknown type.

  • Util now has a static method readObject() which given a ResultSet and a column index will re-instantiate an object serialized in the above manner.

C.5.7.7.聽Changes in MySQL Connector/J 1.1 (02 September 1998)

  • Got rid of "ugly hack" in MysqlIO.nextRow(). Rather than catch an exception, Buffer.isLastDataPacket() was fixed.

  • Connection.getCatalog() and Connection.setCatalog() should work now.

  • Statement.setMaxRows() works, as well as setting by property maxRows. Statement.setMaxRows() overrides maxRows set via properties or url parameters.

  • Automatic re-connection is available. Because it has to "ping" the database before each query, it is turned off by default. To use it, pass in "autoReconnect=true" in the connection URL. You may also change the number of reconnect tries, and the initial timeout value via "maxReconnects=n" (default 3) and "initialTimeout=n" (seconds, default 2) parameters. The timeout is an exponential backoff type of timeout; for example, if you have initial timeout of 2 seconds, and maxReconnects of 3, then the driver will timeout 2 seconds, 4 seconds, then 16 seconds between each re-connection attempt.

C.5.7.8.聽Changes in MySQL Connector/J 1.0 (24 August 1998)

  • Fixed handling of blob data in Buffer.java

  • Fixed bug with authentication packet being sized too small.

  • The JDBC Driver is now under the LPGL

8-14-98

  • Fixed Buffer.readLenString() to correctly read data for BLOBS.

  • Fixed PreparedStatement.stringToStream to correctly read data for BLOBS.

  • Fixed PreparedStatement.setDate() to not add a day. (above fixes thanks to Vincent Partington)

  • Added URL parameter parsing (?user=... and so forth).

C.5.7.9.聽Changes in MySQL Connector/J 0.9d (04 August 1998)

  • Big news! New package name. Tim Endres from ICE Engineering is starting a new source tree for GNU GPL'd Java software. He's graciously given me the org.gjt.mm package directory to use, so now the driver is in the org.gjt.mm.mysql package scheme. I'm "legal" now. Look for more information on Tim's project soon.

  • Now using dynamically sized packets to reduce memory usage when sending commands to the DB.

  • Small fixes to getTypeInfo() for parameters, and so forth.

  • DatabaseMetaData is now fully implemented. Let me know if these drivers work with the various IDEs out there. I've heard that they're working with JBuilder right now.

  • Added JavaDoc documentation to the package.

  • Package now available in .zip or .tar.gz.

C.5.7.10.聽Changes in MySQL Connector/J 0.9 (28 July 1998)

  • Implemented getTypeInfo(). Connection.rollback() now throws an SQLException per the JDBC spec.

  • Added PreparedStatement that supports all JDBC API methods for PreparedStatement including InputStreams. Please check this out and let me know if anything is broken.

  • Fixed a bug in ResultSet that would break some queries that only returned 1 row.

  • Fixed bugs in DatabaseMetaData.getTables(), DatabaseMetaData.getColumns() and DatabaseMetaData.getCatalogs().

  • Added functionality to Statement that allows executeUpdate() to store values for IDs that are automatically generated for AUTO_INCREMENT fields. Basically, after an executeUpdate(), look at the SQLWarnings for warnings like "LAST_INSERTED_ID = 'some number', COMMAND = 'your SQL query'". If you are using AUTO_INCREMENT fields in your tables and are executing a lot of executeUpdate()s on one Statement, be sure to clearWarnings() every so often to save memory.

C.5.7.11.聽Changes in MySQL Connector/J 0.8 (06 July 1998)

  • Split MysqlIO and Buffer to separate classes. Some ClassLoaders gave an IllegalAccess error for some fields in those two classes. Now mm.mysql works in applets and all classloaders. Thanks to Joe Ennis <jce@mail.boone.com> for pointing out the problem and working on a fix with me.

C.5.7.12.聽Changes in MySQL Connector/J 0.7 (01 July 1998)

  • Fixed DatabaseMetadata problems in getColumns() and bug in switch statement in the Field constructor. Thanks to Costin Manolache <costin@tdiinc.com> for pointing these out.

C.5.7.13.聽Changes in MySQL Connector/J 0.6 (21 May 1998)

  • Incorporated efficiency changes from Richard Swift <Richard.Swift@kanatek.ca> in MysqlIO.java and ResultSet.java:

  • We're now 15% faster than gwe's driver.

  • Started working on DatabaseMetaData.

  • The following methods are implemented:

    • getTables()

    • getTableTypes()

    • getColumns

    • getCatalogs()