X DevAPI Traffic Compression With Connector/J

X Protocol traffic compression is available on MySQL Server since version 8.0.19. A connector that also supports compression on its end can leverage this feature and reduce the byte streams that are exchanged with the Server.

By default, connections to a MySQL server are uncompressed, thus permitting exchanging data with a client or connector that doesn’t support compression. However, given a client or connector that also supports compression, it is recommended that client and server negotiate the connection compression by default. If this negotiation concludes successfully, both ends can then compress the data they send.

Compression at this level allows reducing the amount of bytes exchanged over the network, but at the cost of additional CPU resources required to run data inflate and deflate operations. The benefits of compression, therefore, occur primarily on low network bandwidth. One can assess the gain or loss due to the compression only after measuring properly the average traffic sizes for a period of time for both the compressed and uncompressed connections.

Connector/J version 8.0.20 came out with basic support for traffic compression over X Protocol connections. For this purpose, a new connection option: xdevapi.compression, was introduced. As of Connector/J 8.0.22, this feature was leveled up with the introduction of two additional connection options: xdevapi.compression-extensions and xdevapi.compression-algorithms.

Let it be clear that the new compression features in the X DevAPI has no impact whatsoever on the existing compression behavior or settings of Connector/J JDBC implementation.

Continue reading

MySQL Connector/ODBC 8.0.22 has been released

Dear MySQL users,

MySQL Connector/ODBC 8.0.22 is a new version in the MySQL Connector/ODBC 8.0 series, the ODBC driver for the MySQL Server.

The available downloads include both a Unicode driver and an ANSI driver based on the same modern codebase. Please select the driver type you need based on the type of your application – Unicode or ANSI. Server-side prepared statements are enabled by default. It is suitable for use with the latest MySQL server version 8.0.

This release of the MySQL ODBC driver is conforming to the ODBC 3.8 specification. It contains implementations of key 3.8 features, including self-identification as a ODBC 3.8 driver, streaming of out for binary types only), and support of the SQL_ATTR_RESET_CONNECTION connection attribute (for the Unicode driver only).

The release is now available in source and binary form for a number of platforms from our download pages at

https://dev.mysql.com/downloads/connector/odbc/

For information on installing, please see the documentation at

https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-installation.html

Enjoy and thanks for the support!

================================================================

Changes in MySQL Connector/ODBC 8.0.22 (2020-10-19, General Availability)

Functionality Added or Changed

  • For enhanced security of the existing ENABLE_LOCAL_INFILE connection string option, the new ENABLE_LOCAL_DIR option allows restricting LOCAL data loading to files located i this designated directory. Example usage:
 // LOAD LOCAL DATA DIR FROM /tmp
SQLRETURN rc =
  SQLDriverConnect(
    hdbc1,NULL,
     "DSN=myDSN;UID=root;PWD=pwd;DATABASE=test;LOAD_DATA_LOCAL_DIR=/tmp",
    SQL_NTS, conn_out, sizeof(conn_out), &conn_out_len,
    SQL_DRIVER_NOPROMPT);

// LOAD LOCAL DATA FROM EVERYWHERE
SQLRETURN rc =
  SQLDriverConnect(
    hdbc1,NULL,
    "DSN=myDSN;UID=root;PWD=pwd;DATABASE=test;ENABLE_LOCAL_INFILE=1;",
    SQL_NTS, conn_out, sizeof(conn_out), &conn_out_len,
    SQL_DRIVER_NOPROMPT);
  • Connections made using the MySQL Enterprise Edition SAS LDAP authentication plugin now are supported on Windows and Linux, but not on macOS. Connector/ODBC implement the SCRAM-SHA-1 authentication method of the SASL authentication protocol.

Bugs Fixed

  • Fixed an issue where a parameterized query could cause memory corruption. (Bug #31678876, Bug #100329)
  • Under some circumstances when using server-side prepared statements, the first row of a multi-row match was not returned with the result; while it was returned when using client-side prepared statements instead. (Bug #31373948, Bug #95423)
  • Inserting binary data (BLOBs) using SQLPutData() would report a syntax error. (Bug #31349038)

On Behalf of MySQL Release Engineering Team,
Kent Boortz

MySQL Connector/Node.js 8.0.22 has been released

Dear MySQL users,

MySQL Connector/Node.js is a new Node.js driver for use with the X
DevAPI. This release, v8.0.22, is a maintenance release of the
MySQL Connector/Node.js 8.0 series.

The X DevAPI enables application developers to write code that combines
the strengths of the relational and document models using a modern,
NoSQL-like syntax that does not assume previous experience writing
traditional SQL.

MySQL Connector/Node.js can be downloaded through npm (see
  https://www.npmjs.com/package/@mysql/xdevapi for details) or from
  https://dev.mysql.com/downloads/connector/nodejs/.

To learn more about how to write applications using the X DevAPI, see
  http://dev.mysql.com/doc/x-devapi-userguide/en/.
For more information about how the X DevAPI is implemented in MySQL
Connector/Node.js, and its usage, see
  http://dev.mysql.com/doc/dev/connector-nodejs/.

Please note that the X DevAPI requires at least MySQL Server version
8.0 or higher with the X Plugin enabled. For general documentation
about how to get started using MySQL as a document store, see
  http://dev.mysql.com/doc/refman/8.0/en/document-store.html.


Changes in MySQL Connector/Node.js 8.0.22 (2020-10-19, General Availability)

Functionality Added or Changed

     * Improved test execution configuration to better align
       with other connectors. For example, unified environment
       variable names (such as changing NODE_TEST_MYSQL_HOST to
       MYSQLX_HOST). See the Connector/Node.js documentation
       (https://dev.mysql.com/doc/dev/connector-nodejs/8.0/) for
       usage information.


Bugs Fixed

     * Non-BIGINT values stored in BIGINT columns were not
       decoded properly in result sets. (Bug #31686805, Bug
       #100324)

     * Fetched results from a SET column would only contain one
       value from the set. (Bug #31654667, Bug #100255)

     * Deprecated the dbPassword and dbUser property names;
       which were aliases to the password and user properties.
       Their usage now emits deprecation level errors. (Bug
       #31599660)

     * Added a SERVER_GONE error handler to avoid potential
       circular dependency warnings with Node.js >= 14.0.0. (Bug
       #31586107, Bug #99869)

     * Restricted the offset() method to the CollectionFind and
       TableSelect APIs, as described in the X DevAPI
       specification. Using offset() on other APIs yielded this
       error: “Error: The server has gone away”. Instead, this
       intended behavior is available by using a combination of
       “sort()” or “orderBy()” and “limit()”. (Bug #31418813)

     * The nextResult() method returned false against an empty
       result set, and now returns true. Alternatively, use
       hasData() to check if a result set has data. (Bug
       #31037211)

     * The column.getType() method now returns the stringified
       type identifier when before it returned its numeric
       value. For example, DATETIME is now returned instead of
       12. (Bug #30922711)

     * Improved memory management for work performed by 3rd
       party APIs. (Bug #30845472)

     * Added support for lazy decoding of binary column metadata
       content. (Bug #30845366)

On Behalf of Oracle/MySQL Release Engineering Team,

Hery Ramilison

MySQL Connector/C++ 8.0.22 has been released

Dear MySQL users,

MySQL Connector/Node.js is a new Node.js driver for use with the X
DevAPI. This release, v8.0.22, is a maintenance release of the
MySQL Connector/Node.js 8.0 series.

The X DevAPI enables application developers to write code that combines
the strengths of the relational and document models using a modern,
NoSQL-like syntax that does not assume previous experience writing
traditional SQL.

MySQL Connector/Node.js can be downloaded through npm (see
  https://www.npmjs.com/package/@mysql/xdevapi for details) or from
  https://dev.mysql.com/downloads/connector/nodejs/.

To learn more about how to write applications using the X DevAPI, see
  http://dev.mysql.com/doc/x-devapi-userguide/en/.
For more information about how the X DevAPI is implemented in MySQL
Connector/Node.js, and its usage, see
  http://dev.mysql.com/doc/dev/connector-nodejs/.

Please note that the X DevAPI requires at least MySQL Server version
8.0 or higher with the X Plugin enabled. For general documentation
about how to get started using MySQL as a document store, see
  http://dev.mysql.com/doc/refman/8.0/en/document-store.html.


Changes in MySQL Connector/Node.js 8.0.22 (2020-10-19, General Availability)

Functionality Added or Changed

     * Improved test execution configuration to better align
       with other connectors. For example, unified environment
       variable names (such as changing NODE_TEST_MYSQL_HOST to
       MYSQLX_HOST). See the Connector/Node.js documentation
       (https://dev.mysql.com/doc/dev/connector-nodejs/8.0/) for
       usage information.


Bugs Fixed

     * Non-BIGINT values stored in BIGINT columns were not
       decoded properly in result sets. (Bug #31686805, Bug
       #100324)

     * Fetched results from a SET column would only contain one
       value from the set. (Bug #31654667, Bug #100255)

     * Deprecated the dbPassword and dbUser property names;
       which were aliases to the password and user properties.
       Their usage now emits deprecation level errors. (Bug
       #31599660)

     * Added a SERVER_GONE error handler to avoid potential
       circular dependency warnings with Node.js >= 14.0.0. (Bug
       #31586107, Bug #99869)

     * Restricted the offset() method to the CollectionFind and
       TableSelect APIs, as described in the X DevAPI
       specification. Using offset() on other APIs yielded this
       error: “Error: The server has gone away”. Instead, this
       intended behavior is available by using a combination of
       “sort()” or “orderBy()” and “limit()”. (Bug #31418813)

     * The nextResult() method returned false against an empty
       result set, and now returns true. Alternatively, use
       hasData() to check if a result set has data. (Bug
       #31037211)

     * The column.getType() method now returns the stringified
       type identifier when before it returned its numeric
       value. For example, DATETIME is now returned instead of
       12. (Bug #30922711)

     * Improved memory management for work performed by 3rd
       party APIs. (Bug #30845472)

     * Added support for lazy decoding of binary column metadata
       content. (Bug #30845366) Dear MySQL users,

MySQL Connector/C++ 8.0.22 is a new release version of the MySQL
Connector/C++ 8.0 series.

Connector/C++ 8.0 can be used to access MySQL implementing Document
Store or in a traditional way, using SQL queries. It allows writing
both C++ and plain C applications using X DevAPI and X DevAPI for C.
It also supports the legacy API of Connector/C++ 1.1 based on JDBC4.

To learn more about how to write applications using X DevAPI, see
“X DevAPI User Guide” at

  https://dev.mysql.com/doc/x-devapi-userguide/en/

See also “X DevAPI Reference” at

  https://dev.mysql.com/doc/dev/connector-cpp/devapi_ref.html

and “X DevAPI for C Reference” at

  https://dev.mysql.com/doc/dev/connector-cpp/xapi_ref.html

For generic information on using Connector/C++ 8.0, see

  https://dev.mysql.com/doc/dev/connector-cpp/

For general documentation about how to get started using MySQL
as a document store, see

  http://dev.mysql.com/doc/refman/8.0/en/document-store.html

To download MySQL Connector/C++ 8.0.22, see the “General Availability (GA)
Releases” tab at

  https://dev.mysql.com/downloads/connector/cpp/


Changes in MySQL Connector/C++ 8.0.22 (2020-10-19, General Availability)

Compilation Notes

     * Connector/C++ now can be compiled using MinGW on Windows.
       Thanks to Eric Beuque for the contribution. Note that
       this enables building on MinGW but does not make MinGW an
       officially supported platform for Connector/C++. (Bug
       #31636723, Bug #100248)


Connection Management Notes

     * For connections made using X Plugin, Connector/C++ now
       enables specifying the compression algorithms to be used
       for connections that use compression. Connection URIs and
       SessionSettings objects permit explicitly specifying the
       preferred algorithms:

          + URI strings permit a compression-algorithms option.
            The value is an algorithm name, or a list of one or
            more comma-separated algorithms specified as an
            array. Examples:
            mysqlx://user:password@host:port/db?compression-algorithms=lz4
            mysqlx://user:password@host:port/db?compression-algorithms=[lz4,zstd_stream]

          + SessionSettings objects permit a
            SessionOption::COMPRESSION_ALGORITHMS option. The
            value is a list of one or more comma-separated
            algorithms. Examples:
            mysqlx::Session sess(SessionOption::USER, “user_name”,
                     SessionOption::PWD, “password”,
                     SessionOption::COMPRESSION_ALGORITHMS, “lz4”);
            mysqlx::Session sess(SessionOption::USER, “user_name”,
                     SessionOption::PWD, “password”,
                     SessionOption::COMPRESSION_ALGORITHMS, “lz4,zstd_stream”);

            Alternatively, the algorithms value can be given as
            a container:
            std::list<std::string> algorithms = {“lz4″,”zstd_stream”};
            mysqlx::Session sess(SessionOption::USER, “user_name”,
                     SessionOption::PWD, “password”,
                     SessionOption::COMPRESSION_ALGORITHMS, algorithms);

          + For X DevAPI for C, there is a new
            MYSQLX_OPT_COMPRESSION_ALGORITHMS option and
            corresponding OPT_COMPRESSION_ALGORITHMS helper
            macro.
            URI mode follows X DevAPI URI mode:
            mysqlx_session_t *sess = mysqlx_get_session_from_url(
            “mysqlx://user:password@host:port/db?compression-algorithms=[lz4,zstd_stream]”, &error);

            Option mode follows the string format used for
            SessionOption:
            mysqlx_session_option_set(opt,
                      OPT_HOST(“host_name”),
                      OPT_USER(“user”),
                      OPT_PWD(“password”),
                      OPT_COMPRESSION_ALGORITHMS(“lz4,zstd_stream”),
                      PARAM_END));

       These rules apply:

          + Permitted algorithm names are zstd_stream,
            lz4_message, and deflate_stream, and their aliases
            zstd, lz4, and deflate. Names are case-insensitive.
            Unknown names are ignored.

          + Compression algorithms options permit multiple
            algorithms, which should be listed in priority
            order. Options that specify multiple algorithms can
            mix full algorithm names and aliases.

          + If no compression algorithms option is specified,
            the default is
            zstd_stream,lz4_message,deflate_stream.

          + The actual algorithm used is the first of those
            listed in the compression algorithms option that is
            also permitted on the server side. However, the
            option for compression algorithms is subject to the
            compression mode:
               o If the compression mode is disabled, the
                 compression algorithms option is ignored.
               o If the compression mode is preferred but no
                 listed algorithm is permitted on the server
                 side, the connection is uncompressed.
               o If the compression mode is required but no
                 listed algorithm is permitted on the server
                 side, an error occurs.
       See also Connection Compression with X Plugin
       (https://dev.mysql.com/doc/refman/8.0/en/x-plugin-connection-compression.html).


Legacy (JDBC API) Notes

     * For applications that use the legacy JDBC API (that is,
       not X DevAPI or X DevAPI for C), Connector/C++ binary
       distributions now include the libraries that provide the
       client-side LDAP authentication plugins, as well as any
       dependent libraries required by the plugins. This enables
       Connector/C++ application programs to connect to MySQL
       servers using simple LDAP authentication, or SASL LDAP
       authentication using the SCRAM-SHA-1 authentication
       method.
       Note
       LDAP authentication requires use of a server from a MySQL
       Enterprise Edition distribution. For more information
       about the LDAP authentication plugins, see LDAP Pluggable
       Authentication
       (https://dev.mysql.com/doc/refman/8.0/en/ldap-pluggable-authentication.html).
       If Connector/C++ was installed from a compressed tar file
       or Zip archive, the application program will need to set
       the OPT_PLUGIN_DIR connection option to the appropriate
       directory so that the bundled plugin library can be
       found. (Alternatively, copy the required plugin library
       to the default directory expected by the client library.)
       Example:
            sql::ConnectOptionsMap connection_properties;

            // To use simple LDAP authentication …

            connection_properties[“userName”] = “simple_ldap_user_name”;
            connection_properties[“password”] = “simple_ldap_password”;
            connection_properties[OPT_ENABLE_CLEARTEXT_PLUGIN]=true;

            // To use SASL LDAP authentication using SCRAM-SHA-1 …

            connection_properties[“userName”] = “sasl_ldap_user_name”;
            connection_properties[“password”] = “sasl_ldap_scram_password”;

            // Needed if Connector/C++ was installed from tar file or Zip archive …

            connection_properties[OPT_PLUGIN_DIR] = “${INSTALL_DIR}/lib{64}/plugin”;

            auto *driver = get_driver_instance();
            auto *con = driver->connect(connection_properties);

            // Execute statements …

            con->close();

     * For applications that use the legacy JDBC API (that is,
       not X DevAPI or X DevAPI for C), LOCAL data loading
       capability for the LOAD DATA statement previously could
       be controlled on the client side only by enabling it for
       all files accessible to the client, or by disabling it
       altogether. The new OPT_LOAD_DATA_LOCAL_DIR option
       enables restricting LOCAL data loading to files located
       in a designated directory. For example, to set the value
       at connect time:
            sql::ConnectOptionsMap opt;
            opt[OPT_HOSTNAME] = “localhost”;
            opt[OPT_LOAD_DATA_LOCAL_DIR] = “/tmp”;

            sql::Connection *conn = driver->connect(opt);

       OPT_LOAD_DATA_LOCAL_DIR can also be set after connect
       time:
            sql::ConnectOptionsMap opt;
            opt[OPT_HOSTNAME] = “localhost”;

            sql::Connection *conn = driver->connect(opt);

            //…. some queries / inserts / updates

            std::string path= “/tmp”;
            conn->setClientOption(OPT_LOAD_DATA_LOCAL_DIR, path);

            // LOAD LOCAL DATA DIR …

            //Disable LOCAL INFILE by setting to null
            conn->setClientOption(OPT_LOAD_DATA_LOCAL_DIR, nullptr);

       The OPT_LOAD_DATA_LOCAL_DIR option maps onto the
       MYSQL_OPT_LOAD_DATA_LOCAL_DIR option for the
       mysql_options() C API function. For more information, see
       Security Considerations for LOAD DATA LOCAL
       (https://dev.mysql.com/doc/refman/8.0/en/load-data-local-security.html).


Bugs Fixed

     * String decoding failed for utf-8 strings that began with
       a \xEF byte-order mark. (Bug #31656092)

     * With the CLIENT_MULTI_FLAG option enabled, executing
       multiple statements in a batch caused the next query to
       fail with a Commands out of sync error. (Bug #31399362)

     * For connections made using X Plugin, connections over
       Unix socket files did not work. (Bug #31329938)

     * For connections made using X Plugin, the default
       compression mode was DISABLED rather than PREFERRED. (Bug
       #31173447) Dear MySQL users,

MySQL Connector/Node.js is a new Node.js driver for use with the X
DevAPI. This release, v8.0.22, is a maintenance release of the
MySQL Connector/Node.js 8.0 series.

The X DevAPI enables application developers to write code that combines
the strengths of the relational and document models using a modern,
NoSQL-like syntax that does not assume previous experience writing
traditional SQL.

MySQL Connector/Node.js can be downloaded through npm (see
  https://www.npmjs.com/package/@mysql/xdevapi for details) or from
  https://dev.mysql.com/downloads/connector/nodejs/.

To learn more about how to write applications using the X DevAPI, see
  http://dev.mysql.com/doc/x-devapi-userguide/en/.
For more information about how the X DevAPI is implemented in MySQL
Connector/Node.js, and its usage, see
  http://dev.mysql.com/doc/dev/connector-nodejs/.

Please note that the X DevAPI requires at least MySQL Server version
8.0 or higher with the X Plugin enabled. For general documentation
about how to get started using MySQL as a document store, see
  http://dev.mysql.com/doc/refman/8.0/en/document-store.html.


Changes in MySQL Connector/Node.js 8.0.22 (2020-10-19, General Availability)

Functionality Added or Changed

     * Improved test execution configuration to better align
       with other connectors. For example, unified environment
       variable names (such as changing NODE_TEST_MYSQL_HOST to
       MYSQLX_HOST). See the Connector/Node.js documentation
       (https://dev.mysql.com/doc/dev/connector-nodejs/8.0/) for
       usage information.


Bugs Fixed

     * Non-BIGINT values stored in BIGINT columns were not
       decoded properly in result sets. (Bug #31686805, Bug
       #100324)

     * Fetched results from a SET column would only contain one
       value from the set. (Bug #31654667, Bug #100255)

     * Deprecated the dbPassword and dbUser property names;
       which were aliases to the password and user properties.
       Their usage now emits deprecation level errors. (Bug
       #31599660)

     * Added a SERVER_GONE error handler to avoid potential
       circular dependency warnings with Node.js >= 14.0.0. (Bug
       #31586107, Bug #99869)

     * Restricted the offset() method to the CollectionFind and
       TableSelect APIs, as described in the X DevAPI
       specification. Using offset() on other APIs yielded this
       error: “Error: The server has gone away”. Instead, this
       intended behavior is available by using a combination of
       “sort()” or “orderBy()” and “limit()”. (Bug #31418813)

     * The nextResult() method returned false against an empty
       result set, and now returns true. Alternatively, use
       hasData() to check if a result set has data. (Bug
       #31037211)

     * The column.getType() method now returns the stringified
       type identifier when before it returned its numeric
       value. For example, DATETIME is now returned instead of
       12. (Bug #30922711)

     * Improved memory management for work performed by 3rd
       party APIs. (Bug #30845472)

     * Added support for lazy decoding of binary column metadata
       content. (Bug #30845366)

On Behalf of Oracle/MySQL Release Engineering Team,

Hery Ramilison

MySQL Connector/Python 8.0.22 has been released

Dear MySQL users,

MySQL Connector/Python 8.0.22 is the latest GA release version of the
MySQL Connector Python 8.0 series. The X DevAPI enables application
developers to write code that combines the strengths of the relational
and document models using a modern, NoSQL-like syntax that does not
assume previous experience writing traditional SQL.

To learn more about how to write applications using the X DevAPI, see

http://dev.mysql.com/doc/x-devapi-userguide/en/

For more information about how the X DevAPI is implemented in MySQL
Connector/Python, and its usage, see

http://dev.mysql.com/doc/dev/connector-python

Please note that the X DevAPI requires at least MySQL Server version 8.0
or higher with the X Plugin enabled. For general documentation about how
to get started using MySQL as a document store, see

http://dev.mysql.com/doc/refman/8.0/en/document-store.html

To download MySQL Connector/Python 8.0.22, see the “General Availability
(GA) Releases” tab at

http://dev.mysql.com/downloads/connector/python/

Enjoy!

Changes in MySQL Connector/Python 8.0.22 (2020-10-19, General Availability)

Functionality Added or Changed


     * Added Django 3.0 support while preserving compatibility with
       Django 2.2. Removed support for Django 1.11 with Python 2.7.

     * Previously, the client-side mysql_clear_password authentication
       plugin was not supported. Now, it is permitted to send passwords
       without hashing or encryption by using mysql_clear_password on
       the client side together with any server-side plugin that needs a
       clear text password, such as for LDAP pluggable authentication.
       Connector/Python returns an exception if the mysql_clear_password
       plugin is requested but the connection is neither encrypted nor
       using Unix domain sockets. For usage information, see Client-Side
       Cleartext Pluggable Authentication
(https://dev.mysql.com/doc/refman/8.0/en/cleartext-pluggable-authentication.html).

     * Connections made using the MySQL Enterprise Edition SASL LDAP
       authentication plugin now are supported on Windows and Linux, but
       not on macOS. Connector/Python implements the SCRAM-SHA-1
       authentication method of the SASL authentication protocol.

     * The new compression-algorithms connection option sets the order
       by which supported algorithms are negotiated and selected to send
       compressed data over X Protocol connections. The algorithms
       available are specified by the server and currently include:
       lz4_message, deflate_stream, and zstd_stream. Supported algorithm
       aliases are lz4, deflate, and zstd. Unknown or unsupported values
       are ignored.  Example usage:
session = mysqlx.get_session({
    “host”: “localhost”,
    “port”: 33060,
    “user”: “root”,
    “password”: “s3cr3t”,
    “compression”: “required”,
    “compression-algorithms”: [“lz4′, “zstd_stream”]
})


     * For enhanced security of the existing allow_local_infile
       connection string option, the new allow_local_infile_in_path
       option allows restricting LOCAL data loading to files located in
       this designated directory.

     * Refactored the Connector/Python build system by removing
       artifacts of old implementations, improved debugging, and now
       statically link the C extensions. This also exposes the distutils
       commands, to allow the end-user build packages.

     * The pure Python and C extension implementations were combined
       into a single package; this applies to both DEB and RPM packages.

Bugs Fixed


     * Fixed a memory leak in the C-extension implementation when using
       the Decimal data type. Thanks to Kan Liyong for the patch.
       (Bug #31335275, Bug #99517)

     * Copyright and License headers were missing in the Python modules
       generated by protoc. (Bug #31267800)

     * When creating an index on a collection, if a collation was
       specified but the field is not of the type TEXT, then an error
       message was generated with a wrong field type.  It’d always
       report it as GEOJSON. (Bug #27535063)

     * The reset connection command was missing from the C-extension
       implementation, which is required to reuse a connection from the
       pool. As such, connection pooling is now allowed with the
       C-extension implementation. (Bug #20811567, Bug #27489937)

Enjoy and thanks for the support!

On behalf of the MySQL Release Team,
Nawaz Nazeer Ahamed

MySQL Connector/NET 8.0.22 has been released

Dear MySQL users,

MySQL Connector/NET 8.0.22 is the latest General Availability release of
the MySQL Connector/NET 8.0 series. This version supports .NET 5.0
and the X DevAPI, which enables application developers to write code
that combines the strengths of the relational and document models using
a modern, NoSQL-like syntax that does not assume previous experience
writing traditional SQL.

To learn more about how to write applications using the X DevAPI, see
http://dev.mysql.com/doc/x-devapi-userguide/en/index.html. For more
information about how the X DevAPI is implemented in Connector/NET, see
http://dev.mysql.com/doc/dev/connector-net.
NuGet packages provide functionality at a project level. To get the
full set of features available in Connector/NET such as availability
in the GAC, integration with Visual Studio’s Entity Framework Designer
and integration with MySQL for Visual Studio, installation through
the MySQL Installer or the stand-alone MSI is required.

Please note that the X DevAPI requires at least MySQL Server version
8.0 or higher with the X Plugin enabled. For general documentation
about how to get started using MySQL as a document store, see
http://dev.mysql.com/doc/refman/8.0/en/document-store.html.

To download MySQL Connector/NET 8.0.22, see
http://dev.mysql.com/downloads/connector/net/

Installation instructions can be found at
https://dev.mysql.com/doc/connector-net/en/connector-net-installation.html

Changes in MySQL Connector/NET 8.0.22 (2020-10-19, General Availability)

* Functionality Added or Changed

* Bugs Fixed

Functionality Added or Changed

* Revisions to the MySql.Data.EntityFrameworkCore namespace
reduced the number of public classes. (Bug #31353208)

* The following synonyms for the Server connection string
option are deprecated in this release: address, addr, and
network address. (Bug #31248601)

* Previously, the client-side mysql_clear_password
authentication plugin was not supported. Now, it is
permitted to send passwords without hashing or encryption
by using mysql_clear_password on the client side together
with any server-side plugin that needs a clear text
password, such as for LDAP pluggable authentication.
Connector/NET returns an error if the
mysql_clear_password plugin is requested, but the
connection is neither encrypted nor using Unix domain
sockets. For usage information, see Client-Side Cleartext
Pluggable Authentication
(https://dev.mysql.com/doc/refman/8.0/en/cleartext-pluggable-authentication.html). (Bug #30340510)

* For enhanced security of the existing
AllowLoadLocalInfile connection string option, a single
folder that is safe to upload files from now can be
specified with the new AllowLoadLocalInfileInPath option
(see Options for Classic MySQL Protocol Only (https://dev.mysql.com/doc/connector-net/en/connector-net-8-0-connection-options.html#connector-net-8-0-connection-options-classic)).

* Connector/NET now supports Entity Framework 6.4, which
extends the compatibility of the provider to include the
Linux and macOS platforms when used with the Universal
Windows Platform (UWP) .NET implementation (see Entity
Framework 6 Support (https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html)).
Connector/NET continues to support the .NET Framework
implementation of Entity Framework.

* Connections made using the MySQL Enterprise Edition SASL
LDAP authentication plugin now are supported on Windows
and Linux, but not on macOS. Connector/NET implements the
SCRAM-SHA-1 authentication method of the SASL
authentication protocol.

* The new compression-algorithms connection option sets the
order by which supported algorithms are negotiated and
selected to send compressed data over X Protocol
connections (see Options for X Protocol Only (https://dev.mysql.com/doc/connector-net/en/connector-net-8-0-connection-options.html#connector-net-8-0-connection-options-xprotocol)).

* In addition to providing continued support for .NET Core
and .NET Framework, Connector/NET now includes support
for the new .NET 5.0 framework. Compatibility testing was
performed with the preview versions of .NET 5.0 and
Visual Studio to encourage the efforts of early adopters.
Among other capabilities, .NET 5.0 offers uniform runtime
behaviors and developer experiences by taking the best of
.NET Core, .NET Framework, Xamarin, and Mono.

Bugs Fixed

* Procedure names were malformed before being sent to the
server when the database name was not specified in the
connection string. (Bug #31669587, Bug #100306)

* Microseconds were deserialized incorrectly when
MySqlCommand.Prepare() was called for a statement that
selects a TIME(n) column, resulting in a loss of trailing
zeros in the returned result. Now, the MySqlTime class
calculates ticks, rather than converting the microseconds
to a string. (Bug #31623730, Bug #100218)

* MySqlConnection.GetSchema(“Procedures”) returned the
literal string System.Byte[] as the value of the
ROUTINE_DEFINITION column, rather than the actual routine
definition. (Bug #31622907, Bug #100208)

* Valid query parameters of type DateTime were
misinterpreted as a string values. (Bug #31598178, Bug
#100159)

* A mismatch of data types between the parameter of a
stored procedure and the corresponding MySqlParameter
when the Prepare() method was called did not generate an
exception. (Bug #31458774, Bug #99793)

* An SQL syntax error was reported on valid code for
creating a dynamic dropdown list from data in an ASP.NET
Core application. (Bug #31337609, Bug #99523)

* Entity Framework code-first migration omitted the schema
attribute that was assigned to an entity, although the
automatic migration appeared to generate a table with the
proper schema value at first. Subsequent queries using
the schema name returned errors. (Bug # 31323788, Bug
#94343)

* The mapping from the TINYINT and BIT data types to
BOOLEAN was not performed as expected when scaffolding
was used. (Bug #31304070, Bug #99419)

* The Entity Framework Core migration script replaced NULL
with NOT NULL on a column in the migrated table when the
MaxLength attribute of the property for it was changed in
the model. (Bug #31070175, Bug #96913)

* The Ubiety.Dns.Core.dll binary included with the
MySQL.Data NuGet package was built in debug mode, which
prevented the publishing of applications to Microsoft
Store. (Bug #31061034, Bug #98955)

* An application using Entity Framework code-first
migration without the default system decimal separator,
the period character (.), could not generate a new
database. Now, setting the system decimal separator to a
different character is permitted. (Bug #30965702, Bug
#94358)

* Every column of type CHAR(36) was interpreted as a GUID,
which could cause the first query made by a restarted
application using the MySQL.Data package to return an
exception. This fix introduces a dedicated format
(8-4-4-4-12) to interpret the column type properly. (Bug
#29963760, Bug #93399)

* Connector/NET code did not read from the
MySql.Data.Properties.ReservedWords.txt assembly resource
consistently and could return an incomplete set of
reserved keywords. (Bug #27536342, Bug #89639)

* No error occurred when MySqlCommand.CommandTimeout was
set to a negative number, however, subsequently setting
it to a positive number returned an exception. (Bug
#26574860, Bug #87316)

* The TcpClient implementation limited some of the
connection options when an external wrapper from a
Windows Forms application made the connection. This fix
enables the related external destructor to be called
without returning an error. (Bug #26427802, Bug #82810)

* An exception was returned in debug mode after a command
was canceled within a connection that was not null when
CancelQuery was called. Thanks to Denis Yarkovoy for the
improved validation patch. (Bug #26362494, Bug #86836)

* The DbContext.Database.Migrate() method did not succeed
because the __efmigrationshistory table was not found.
This fix modifies the method that validates the existence
of the table. (Bug #25901276, Bug #85902)

* When a parameter value of zero was passed to the
MySqlParameter constructor, Connector/NET used the
MySqlDbType enumeration by default for type mapping and
changed the value to NULL. This fix maps the default type
to int32. (Bug #25573071, Bug #85027)

* Entity Framework code-first migration excluded the length
specifier in the resulting binary columns. (Bug
#23171349, Bug #81179)

* Create Table statements generated with Entity Framework
were missing some of the semicolons, which caused MySQL
Server to return errors. (Bug #22669961, Bug #80159)

On Behalf of MySQL Release Engineering Team,
Surabhi Bhat


MySQL Connector/J 8.0.22 has been released

Dear MySQL users,

MySQL Connector/J 8.0.22 is the latest General Availability release of
the MySQL Connector/J 8.0 series. It is suitable for use with MySQL
Server versions 8.0, 5.7, and 5.6. It supports the Java Database
Connectivity (JDBC) 4.2 API, and implements the X DevAPI.

This release includes the following new features and changes, also
described in more detail on

https://dev.mysql.com/doc/relnotes/connector-j/8.0/en/news-8.0.22.html

As always, we recommend that you check the “CHANGES” file in the
download archive to be aware of changes in behavior that might affect
your application.

To download MySQL Connector/J 8.0.22 GA, see the “General Availability
(GA) Releases” tab at http://dev.mysql.com/downloads/connector/j/

Enjoy!

Changes in MySQL Connector/J 8.0.22 (2020-10-19, General
Availability)

Functionality Added or Changed


     * Security Enhancement: Previously, the LOCAL data loading
       capability for the LOAD DATA statement can be controlled on the
       client side only by enabling it for all files accessible to the
       client or by disabling it altogether, using the connection
       property allowLoadLocalInfile. A new connection property,
       allowLoadLocalInfileInPath, has been introduced to allow LOCAL
       data loading only from a specific filepath; see the description
       for the option in Configuration Properties
(https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-configuration-properties.html)
       for details.

     * X DevAPI: A new connection property,
       xdevapi.compression-algorithms, has been introduced for
       specifying the compression algorithms to use and the priority in
       which they will be negotiated for.  Also, the older connection
       property xdevapi.compression-algorithm (without an “s” at the end
       of its name) has been renamed to xdevapi.compression-extensions;
       its function remains the same as before (providing
       implementations for compression algorithms), but the syntax for
       its value has been changed: each element in a triplet for an
       algorithm is now separated by a colon (:). See Connection
       Compression Using X DevAPI
(https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-connection-compression-xdevapi.html)
       for details.

     * X DevAPI: The asynchronous variant of the X Protocol is no
       longer supported by Connector/J; the connection properties
       useAsyncProtocol and asyncResponseTimeout are now deprecated and
       have no effect when used.

     * X DevAPI: Connector/J now supports Java keystore for SSL client
       certificates for X DevAPI sessions. The following new connection
       properties have been introduced for the purpose:

          + xdevapi.ssl-keystore

          + xdevapi.ssl-keystore-type

          + xdevapi.ssl-keystore-password
       See Connecting Securely Using SSL
(https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-using-ssl.html)
       for details.

     * When trying to open multiple connections to a MySQL server using
       Connector/J with a named pipe on Windows systems, the attempt
       sometimes failed with the “All pipe instances are busy” error.
       With this fix, if a timeout has been set using the connection
       property connectTimeout or the method
       DriverManager.setLoginTimeout(), Connector/J will retry opening
       the named pipe repeatedly until the timeout is reached or the
       named pipe is opened successfully. As a side-effect of this new
       behavior, there will be a delay, equal to the length of the
       timeout, for throwing an error for a failed named-pipe connection
       even when it is caused by an error other than “All pipe instances
       are busy.” (Bug #31711961, Bug #98667)

     * When the connection option sslMode is set to VERIFY_IDENTITY,
       Connector/J now validates the host name in the connection string
       against the host names or IP addresses provided under the Subject
       Alternative Name (SAN) extension in the server’s X.509
       certificate. Also, verification against the Common Name (CN) is
       now performed when a SAN is not provided in the certificate or if
       it does not contain any DNS name or IP address entries. Host
       names listed in the certificate, under either the SAN or the CN,
       can contain a wildcard character as specified in the RFC 6125
       standard. Thanks to Daniël van Eeden for contributing to the
       patch. (Bug #31443178, Bug #99767, Bug #28834903, Bug #92903)

     * When using Connector/J, the AbandonedConnectionCleanupThread
       thread can now be disabled completely by setting the new system
       property com.mysql.disableAbandonedConnectionCleanup to true when
       configuring the JVM. The feature is for well-behaving
       applications that always close all connections they create.
       Thanks to Andrey Turbanov for contributing to the new feature.
       (Bug #30304764, Bug #96870)

     * Connector/J now supports client authentication with MySQL
       Enterprise Server using simple or SASL (SCRAM-SHA-1) LDAP
       authentication
(https://dev.mysql.com/doc/refman/8.0/en/ldap-pluggable-authentication.html#ldap-pluggable-authentication-usage)
       on Windows and Linux platforms.

     * Connector/J can now be prevented from falling back to the
       system-wide truststore and keystore for server and client
       identity authentication, respectively. For JDBC connections, two
       new connection properties, fallbackToSystemKeyStore and
       fallbackToSystemTrustStore, have been introduced for the control.
       While those properties are true by default (fallbacks enabled),
       setting them to false disable fallbacks. See Connecting Securely
       Using SSL
(https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-using-ssl.html)
       for details.  X DevAPI: Similar
       control for fallback for X DevAPI connections are provided by
       the new connection properties,
       xdevapi.fallback-to-system-keystore, and
       xdevapi.fallback-to-system-truststore.

     * The integration classes for JBoss have been removed from
       Connector/J.

Bugs Fixed


     * In a load balancing setup, if the connection parameter
       loadBalanceBlacklistTimeout was set, a server that was once
       unavailable remained in the blocklist even after a connection to
       it has been reestablished, and this affected the system’s
       performance. With this fix, the server is removed from the
       blocklist as soon as it becomes available again. (Bug #31699357,
       Bug #96309)

     * Using a PreparedStatement to store a Date into a database
       sometimes resulted in a NullPointerException. It was
       because some assignments were missing in
       ServerPreparedQueryBindValue.clone(), and this patch
       corrects the issue. (Bug #31418928, Bug #99713)

* When a client attempted to establish a JDBC connection using the server’s X Protocol port, Connector/J threw an ArrayIndexOutOfBoundsException. With this fix, Connector/J throws the proper exception for using the wrong protocol with the port and returns a proper error message. (Bug #31083755, Bug #99076)

     * LocalDate, LocalDateTime, and LocalTime values set through
       Connector/J were altered when there was a timezone difference
       between the server and the client.  This fix corrects the issue
       by handling the LocalDate, LocalTime, and LocalDateTime with no
       time zone conversion and no intermediate conversions to other
       date-time classes. Thanks to Iwao Abe for his contribution to the
       fix. (Bug #29015453, Bug #93444)

Enjoy and thanks for the support!

On behalf of the MySQL Release Team,
Nawaz Nazeer Ahamed

MySQL Connector/J 8.0.21 has been released

Dear MySQL users,

MySQL Connector/J 8.0.21 is the latest General Availability release of
the MySQL Connector/J 8.0 series.  It is suitable for use with MySQL
Server versions 8.0, 5.7, and 5.6.  It supports the Java Database
Connectivity (JDBC) 4.2 API, and implements the X DevAPI.

In the documentation for MySQL 8.0.21, we have started
changing the term “master” to “source”, the term “slave” to
“replica”, the term “whitelist” to “allowlist”, and the term
“blacklist” to “blocklist”. There are currently no changes to
the product’s syntax, so these terms are still present in the
documentation where the current code requires their use. See
the blog post MySQL Terminology Updates
(https://mysqlhighavailability.com/mysql-terminology-updates/)
for more information.

This release includes the following new features and changes, also
described in more detail on

https://dev.mysql.com/doc/relnotes/connector-j/8.0/en/news-8-0-21.html

As always, we recommend that you check the “CHANGES” file in the
download archive to be aware of changes in behavior that might affect
your application.

To download MySQL Connector/J 8.0.21 GA, see the “General Availability
(GA) Releases” tab at http://dev.mysql.com/downloads/connector/j/

Enjoy!

Changes in MySQL Connector/J 8.0.21 (2020-07-13, General Availability)

* Functionality Added or Changed

* Bugs Fixed Functionality Added or Changed

Functionality Added or Changed

* X DevAPI: The JSON Schema Validation Functions (https://dev.mysql.com/doc/refman/8.0/en/json-validation-functions.html)
on MySQL servers are now supported by
Connector/J; see Schema Validation for details.

* The required versions of the 3rd-party libraries needed
for running or compiling Connector/J have been changed;
new requirements for additional libraries have also been
added. See Installing Connector/J from a Binary
Distribution
(https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-binary-installation.html)
and Installing from Source
(https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-installing-source.html) for details.

Bugs Fixed

* When trying to set a parameter for a PreparedStatement
using the method
PreparedStatement.setObject(parameterIndex, “false”,
Types.BOOLEAN), the value was set to true instead of
false. (Bug #30911870, Bug #98237)

On Behalf of MySQL Release Engineering Team,
Surabhi Bhat




MySQL Connector/C++ 8.0.21 has been released

Dear MySQL users,

MySQL Connector/C++ 8.0.21 is a new release version of the MySQL
Connector/C++ 8.0 series.

Connector/C++ 8.0 can be used to access MySQL implementing Document
Store or in a traditional way, using SQL queries. It allows writing
both C++ and plain C applications using X DevAPI and X DevAPI for C.
It also supports the legacy API of Connector/C++ 1.1 based on JDBC4.

To learn more about how to write applications using X DevAPI, see
“X DevAPI User Guide” at

https://dev.mysql.com/doc/x-devapi-userguide/en/

See also “X DevAPI Reference” at

https://dev.mysql.com/doc/dev/connector-cpp/devapi_ref.html

and “X DevAPI for C Reference” at

https://dev.mysql.com/doc/dev/connector-cpp/xapi_ref.html

For generic information on using Connector/C++ 8.0, see

https://dev.mysql.com/doc/dev/connector-cpp/

For general documentation about how to get started using MySQL
as a document store, see

http://dev.mysql.com/doc/refman/8.0/en/document-store.html

To download MySQL Connector/C++ 8.0.21, see the “General Availability (GA)
Releases” tab at

https://dev.mysql.com/downloads/connector/cpp/

Changes in MySQL Connector/C++ 8.0.21 (2020-07-13, General Availability)

Configuration Notes


     * The CMake configuration files were revised to work better
       when Connector/C++ is used as a subproject of application
       projects. Thanks to Lou Shuai for the contribution.
       This revision does not change the fact that the intended
       (and supported) usage scenario is to build the connector
       in a separate project, install it somewhere and then use
       it in application projects from that installed location
       (for example, by defining the imported library target in
       CMake). (Bug #31095993, Bug #99093)

JSON Notes


     * The rapidjson library included with Connector/C++ has
       been upgraded to the GitHub snapshot of 16 January 2020.

Security Notes


     * For platforms on which OpenSSL libraries are bundled, the
       linked OpenSSL library for Connector/C++ has been updated
       to version 1.1.1g. Issues fixed in the new OpenSSL
       version are described at
https://www.openssl.org/news/cl111.txt and
https://www.openssl.org/news/vulnerabilities.html. (Bug
       #31296689)

X DevAPI Notes


     * For X DevAPI or X DevAPI for C applications, methods and
       functions that create or modify collections now accept
       options to enable validation of a JSON schema that
       documents must adhere to before they are permitted to be
       inserted or updated. Schema validation is performed by
       the server, which returns an error message if a document
       in a collection does not match the schema definition or
       if the server does not support validation.
       These new classes are implemented to support validation
       options:

          + CollectionOptions: The base class that has all
            options. Contains an Option enumeration with
            constants REUSE and VALIDATION.

          + CollectionValidation: Handles only subkey
            validation. Contains a Level enumeration with
            constants STRICT and OFF, and an Option enumeration
            with constants SCHEMA and LEVEL.
       X DevAPI now has these signatures for createCollection()
       (and modifyCollection()):
       // Accepts the full document
       createCollection(“name”, “JSON_Document”);

       // DbDoc usage is also permitted
       createCollection(“name”, DbDoc(“validation”, DbDoc(“level”,”off”,…)));

       // List of pairs with Option enum constant and value
       createCollection(CollectionOptions::REUSE, true,
                 CollectionOptions::VALIDATION, CollectionValidation(…));

       // Old REUSE way is also acceptable
       createCollection(“name”, true);

       createCollection(“name”, CollectionValidation(…));

       // createCollection also allows a list of pairs of
       // CollectionValidation Option enum constant and value
       createCollection(“name”, CollectionOptions::VALIDATION,
                         CollectionValidation::OFF,
                         CollectionValidation::SCHEMA,
                         “Object”);

       X DevAPI for C examples:
       These are the possible options for
       mysqlx_collection_options_set():
       OPT_COLLECTION_VALIDATION_LEVEL(VALIDATION_OFF)
       OPT_COLLECTION_VALIDATION_SCHEMA(“Object”)
       OPT_COLLECTION_REUSE(true)

       Perform option operations like this:
       mysqlx_collection_options_t *options = mysqlx_collection_options_new() //creates collection options object
       mysqlx_free(options) //frees collection options
       mysqlx_collection_options_set(options,…);

       Creation and modification functions have these signatures:
       mysqlx_collection_create_with_options(mysqlx_schema_t *schema, mysqlx_collection_options_t *options);

       mysqlx_collection_create_with_json_options(mysqlx_schema_t *schema, const char* json_options);

       mysqlx_collection_modify_with_options(mysqlx_schema_t *schema, mysqlx_collection_options_t *options);

       mysqlx_collection_modify_with_json_options(mysqlx_schema_t *schema, const char* json_options);

       For modifications, the REUSE option is not supported and
       an error occurs if it is used.

Functionality Added or Changed


     * The MySQL_Connection_Options enumeration is no longer
       sensitive to the order in which the underlying options
       are declared in the C API source. (Bug #30799197)

     * Connector/C++ now implements blocking of failed
       connection-pool endpoints to prevent them from being
       reused until a timeout period has elapsed. This should
       reduce average wait time for applications to obtain a
       connection from the pool in the event that endpoints
       become temporarily unavailable.

Bugs Fixed


     * For applications that use the legacy JDBC API (that is,
       not X DevAPI or X DevAPI for C) on a system that does not
       have OpenSSL libraries installed, the libraries that are
       bundled with Connector/C++ could not be found when
       resolving run-time dependencies of the application. (Bug
       #31007317)

     * For a reply with multiple result sets (such as the result
       from a stored procedure that executed multiple queries),
       an error in reply processing logic could incorrectly
       deregister the reply object after reading the first
       result set while more result sets from the server were
       pending, resulting in an application error. (Bug
       #30989042)

On Behalf of Oracle/MySQL Release Engineering Team,

Hery Ramilison 

MySQL Connector/NET 8.0.21 has been released

Dear MySQL users,

MySQL Connector/NET 8.0.21 is the latest General Availability release of
the MySQL Connector/NET 8.0 series. This version supports .NET Core 3.1
and the X DevAPI, which enables application developers to write code
that combines the strengths of the relational and document models using
a modern, NoSQL-like syntax that does not assume previous experience
writing traditional SQL.

To learn more about how to write applications using the X DevAPI, see
http://dev.mysql.com/doc/x-devapi-userguide/en/index.html. For more
information about how the X DevAPI is implemented in Connector/NET, see
http://dev.mysql.com/doc/dev/connector-net.

NuGet packages provide functionality at a project level. To get the full
set of features available in Connector/NET such as availability in the
GAC, integration with Visual Studio’s Entity Framework Designer and
integration with MySQL for Visual Studio, installation through the MySQL
Installer or the stand-alone MSI is required.

Please note that the X DevAPI requires at least MySQL Server version 8.0
or higher with the X Plugin enabled. For general documentation about how
to get started using MySQL as a document store, see
http://dev.mysql.com/doc/refman/8.0/en/document-store.html.

To download MySQL Connector/NET 8.0.21, see
http://dev.mysql.com/downloads/connector/net/

Installation instructions can be found at
https://dev.mysql.com/doc/connector-net/en/connector-net-installation.html

Changes in MySQL Connector/NET 8.0.21 (2020-07-13, General
Availability)

Functionality Added or Changed

     * The following ciphers and algorithms are deprecated for
       SSH connections made using Connector/NET:
       Encryptions

          + 3des-cbc
       Key Exchange Algorithms

          + diffie-hellman-group14-sha1

          + diffie-hellman-group-exchange-sha1
       Message Authentication Codes

          + hmac-ripemd160

          + hmac-sha1

          + hmac-sha1-96
       (Bug #31030347)

Bugs Fixed

     * Connector/NET returned an error when the name of a
       database or stored procedure contained one or more period
       characters. Now, names with this format can be used when the name
       is enclosed properly between grave accent (`) symbols; for
       example, `db_1.2.3.45678`. (Bug #31237338, Bug #99371)

     * An error was generated when the database name within a
       connection string that was passed to MySQL 5.6 or MySQL 5.7 did
       not match the casing used to search a related stored procedure.
       (Bug #31173265)

     * In Connector/NET 8.0.19, calling new
       MySqlConnection(null) returned NullReferenceException, rather
       than returning an object with a ConnectionString property equal
       to String.Empty as the previous versions of Connector/NET did.
       This fix restores the earlier behavior. (Bug #30791289,
       Bug #98322)

     * An expected empty result set generated by executing
       MySQLDataReader for a stored procedure instead returned a data
       table containing the @_cnet_param_value column. This fix
       eliminates an internal error that affected the result set and now
       GetSchemaTable() returns a null value as expected.
       (Bug #30444429, Bug #97300)

     * The BLOB type was inferred internally when a value or
       object of type MySqlGeometry was used in different situations,
       which caused to server to return either zero matching rows or an
       exception. (Bug #30169716, Bug #96499, Bug #30169715, Bug #96498)

     * Attempts to execute a function or stored procedure
       returned a null exception unexpectedly when the caller was not
       the creator of the routine. This fix introduces a mechanism to
       manage null values for these cases, permits the granting of
       privilege to SHOW_ROUTINE, and revises SqlNullValueException to
       identify when a user account lacks adequate permission to access
       a routine. (Bug #30029732, Bug #96143)

     * Columns of type BIGINT in a table that was loaded using
       MySqlDataReader did not include the UNSIGNED flag, even though
       UNSIGNED was specified in the CREATE TABLE statement. An
       exception was generated if the value of such a column exceeded
       2147483647. (Bug #29802379, Bug #95382)

     * The microseconds value in the return results was set to
       zero consistently when SqlCommand.Prepare() was called for a
       SELECT statement with a TIME(n) column. This fix revises the way
       the value is produced to ensure accurate results. (Bug #28393733,
       Bug #91770)

     * The isolation level set for a transaction did not revert
       to using the session value after the transaction finished.
       (Bug #26035791, Bug #86263)

     * A valid call made to the
       MySqlSimpleRoleProvider.AddUsersToRoles method failed to execute
       because it violated the foreign key constraint. This fix removes
       an error from the code that gets the role ID. Thanks to Stein
       Setvik for the patch. (Bug #25046352, Bug #83657)

     * The absence of a target schema in the generated WHERE
       statement produced during an Entity Framework migration caused an
       error when the identical table was present in multiple databases.
       This fix adds the table_schema column to the generated SQL query.
       (Bug #23291095, Bug #72424)

On Behalf of Oracle/MySQL Release Engineering Team,
Nawaz Nazeer Ahamed