RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Глава 6. Работа с Connector/J

Этот раздел руководства содержит справочный материал для MySQL Connector/J.

6.1. Имя класса драйвера и источника данных

Название класса, который осуществляет java.sql.Driver в MySQL Connector/J: com.mysql.cj.jdbc.Driver.

6.2. Синтаксис URL связи

Эта секция объясняет синтаксис URL для соединения с MySQL.

Это универсальный формат связи URL:

protocol//[hosts][/database][?properties]

URL состоит из следующих частей:

Любые зарезервированные символы для URL (например, /, :, @, (, ), [, ], &, #, =, ? и пробел), которые появляются в любой части URL, должны быть закодированы процентом.

protocol

Есть возможные протоколы для связи:

  • jdbc:mysql: для обычных и основных связей отказоустойчивости JDBC.

  • jdbc:mysql:loadbalance: для выравнивания нагрузки связи JDBC. Посмотрите раздел 9.3 для деталей.

  • jdbc:mysql:replication: для соединений репликации JDBC. Посмотрите раздел 9.4.

  • mysqlx: для связей X DevAPI.

  • jdbc:mysql+srv: для обычной и основной отказоустойчивости связи JDBC, которые используют записи DNS SRV.

  • jdbc:mysql+srv:loadbalance: для выравнивания нагрузки связи JDBC, которые используют записи DNS SRV.

  • jdbc:mysql+srv:replication: для соединений репликации JDBC, которые используют записи DNS SRV.

  • mysqlx+srv: для связей X DevAPI, которые используют записи DNS SRV.

hosts

В зависимости от ситуации, host может состоять просто из имени хоста, или это может быть сложная структура, состоящая из различных элементов как многократные имена хоста, номера портов, определенные для хоста свойства и удостоверения пользователя.

  • Единственный хост:

    • Связи единственного хоста, не добавляя определенные для него свойства:

      • hosts написан в формате host: port. Это пример простой связи единственного хоста URL:

        jdbc:mysql://host1:33060/sakila
        
      • host может быть IPv4 или IPv6, в последнем случае это должно быть помещено в квадратных скобках, например, [1000:2000::abcd]. Когда host не указан, используется значение по умолчанию localhost.

      • port это стандартный номер порта, т.е. целое число между 1 и 65535. Номер порта по умолчанию для обычного подключения MySQL 3306 и 33060 для для связи, использующей X Protocol. Если port не указан, соответствующее умолчание используется.

    • Связи единственного хоста, добавляющие определенные для хоста свойства:

      • В этом случае хост определяется как последовательность key= value. Ключи используются, чтобы опознать хост, порт, а также любые определенные для хоста свойства. Есть два дополнительных формата для определения ключей:

        • Форма address-equals:

          address=(host=host_or_ip)(port=port)(key1=value1)(key2=value2)...(keyN=valueN)
          

          Вот типовой URL, использующий форму address-equals:

          jdbc:mysql://address=(host=myhost)(port=1111)(key1=value1)/db
          
        • Форма key-value:

          (host=host,port=port,key1=value1,key2=value2,...,keyN=valueN)
          

          Вот типовой URL, использующий форму key-value:

          jdbc:mysql://(host=myhost,port=1111,key1=value1)/db
          
      • Хост и порт опознаются ключами host и port. Описания формата и значения по умолчанию host и port, данные выше, также применяются здесь.

      • Другие ключи, которые могут быть добавлены, включают user, password, protocol и т.д. Они отвергают глобальные значения в части properties URL. Перекрыть можно только пользователя, пароль, сетевые тайм-ауты и размеры кэшей метаданных и запросов, эффекты других переопределений для хоста не определяются.

      • Различные протоколы могут потребовать различных ключей. Например, схема mysqlx: использует два специальных ключа, address и priority. address это пара host: port, а priority целое число. Например:

        mysqlx://(address=host:1111,priority=1,key1=value1)/db
        
      • key чувствительное к регистру. Два ключей с отличиями только в регистре, это разные ключи, и нет никаких гарантий, который будет использоваться.

  • Много хостов

    Есть два формата для определения многократных хостов:

    • Сптсок разделенных запятой значений:

      host1,host2,...,hostN
      

      Каждый хост может быть определен любым из этих трех способов, описанных выше. Вот некоторые примеры:

      jdbc:mysql://myhost1:1111,myhost2:2222/db
      jdbc:mysql://address=(host=myhost1)(port=1111)(key1=value1),address=(host=myhost2)(port=2222)(key2=value2)/db
      jdbc:mysql://(host=myhost1,port=1111,key1=value1),(host=myhost2,port=2222,key2=value2)/db
      jdbc:mysql://myhost1:1111,(host=myhost2,port=2222,key2=value2)/db
      mysqlx://(address=host1:1111,priority=1,key1=value1),(address=host2:2222,priority=2,key2=value2)/db
      
    • Хосты в списке разделены запятой, затем идет список в квадратных скобках:

      [host1,host2,...,hostN]
      

      Это называют формой подсписка хоста, которая позволяет разделять удостоверения пользователя всех хостов в списке, как будто они единственный хост. Каждый хост в списке может быть определен любым из этих трех способов, описанных выше. Вот некоторые примеры:

      jdbc:mysql://sandy:secret@[myhost1:1111,myhost2:2222]/db
      jdbc:mysql://sandy:secret@[address=(host=myhost1)(port=1111)(key1=value1),address=(host=myhost2)(port=2222)(key2=value2)]/db
      jdbc:mysql://sandy:secret@[myhost1:1111,address=(host=myhost2)(port=2222)(key2=value2)]/db
      

      В то время как невозможно написать подсписки хоста рекурсивно, список хостов может содержать подсписки хостов как своих членских хостов.

  • Данные пользователей

    Данные пользователей могут быть установлены за пределами связи URL, например, как аргументы, получая связь от java.sql.DriverManager (см. раздел 6.3 для деталей). Когда работают со связью URL, есть несколько способов определить их:

    • Префикс единственный хост, подсписок хоста (см. здесь) или или любой хост в списке хостов с удостоверениями пользователя с @:

      user:password@host_or_host_sublist
      

      Например:

      mysqlx://sandy:secret@[(address=host1:1111, priority=1, key1=value1),
                             (address=host2:2222, priority=2, key2=value2))]/db
      
    • Используйте ключи user и password, чтобы определить параметры для каждого хоста:

      (user=sandy)(password=mypass)
      

      Например:

      jdbc:mysql://[(host=myhost1,port=1111,user=sandy,password=secret),
                    (host=myhost2,port=2222,user=finn,password=secret)]/db
      jdbc:mysql://address=(host=myhost1)(port=1111)(user=sandy)(password=secret),
                   address=(host=myhost2)(port=2222)(user=finn)(password=secret)/db
      

    В обеих формах, когда многопользовательские параметры определяются, левая имеет приоритет, то есть, идя слева направо в строке подключения, используется первый найденный параметр, который применим к хосту.

    Внутри подсписка хостов ни у какого хоста не может быть параметров пользователя в формате @, но отдельному хосту можно определить параметры пользователя в формате ключа.

database

База данных по умолчанию или каталог, чтобы открыть. Если база данных не определяется, связь установлена без базы данных по умолчанию. В этом случае нужен вызов метода setCatalog() в экземпляре Connection или указание имени таблицы, используя имя базы данных (то есть, SELECT dbname. tablename. colname FROM dbname.tablename...) в ваших SQL-операторах. Открытие связи, не определяя базу данных, в целом полезно только при разработке инструментов, которые работают с многими базами данных, такими как GUI-менеджеры баз данных.

Всегда используйте метод Connection.setCatalog(), чтобы определить желаемую базу данных в запросах JDBC вместо применения вызова USE database .

properties

Последовательность глобальных свойств, относящихся ко всем хостам, которым предшествует ?, записанная как пары key= value, отделенные символом &. Вот некоторые примеры:

jdbc:mysql://(host=myhost1,port=1111),(host=myhost2,port=2222)/db?key1=value1&key2=value2&key3=value3

Следующее верно для пар ключ/значение:

  • key и value просто последовательности. Надлежащее преобразование типов и проверка выполняются внутренне в Connector/J.

  • key чувствительны к регистру. Два ключа с отличием только в регистре входят в противоречие и неизвестно, какой будет использоваться.

  • Любые определенные для хоста значения, определенные с парами ключ/значение, как объяснено в здесь и здесь, отвергают глобальные значения.

См. раздел 6.3 для получения дополнительной информации о свойствах конфигурации.

6.3. Свойства конфигурации

Свойства конфигурации определяют, как Connector/J установит связь с сервером MySQL. Если не указано иное, свойства могут быть установлены для объекта DataSource или объекта Connection.

Свойства конфигурации могут быть установлены одним из следующих способов:

  • Используя методы set*() на MySQL-реализации java.sql.DataSource (который является предпочтительным методом, используя java.sql.DataSource):

    • com.mysql.cj.jdbc.MysqlDataSource

    • com.mysql.cj.jdbc.MysqlConnectionPoolDataSource

  • Как пара ключ/значение в экземпляре java.util.Properties, переданном к DriverManager.getConnection() или Driver.connect().

  • Как параметр URL JDBC в URL, данном java.sql.DriverManager.getConnection(), java.sql.Driver.connect() или MySQL-реализации метода javax.sql.DataSource setURL(). Если вы определите свойство конфигурации в URL, не предоставляя значение для него, ничто не будет установлено, например, добавление useServerPrepStmts к URL не заставляет Connector/J использовать подготовленные запросы серверной стороны, необходимо добавить useServerPrepStmts=true.

    Если механизм, который вы используете, чтобы формировать URL JDBC, основан на XML, используйте символ XML &, чтобы отделить параметры конфигурации, поскольку амперсанд это зарезервированный символ для XML.

Свойства перечисляются в следующих таблицах.

Идентификация.

Свойства и описания

user

Пользователь, чтобы соединиться с сервером.

Начиная с версии: все версии.

password

Пароль, чтобы соединиться с сервером.

Начиная с версии: все версии.

Связь.

Свойства и описания

connectionAttributes

Разграниченный запятой список определенных пользователями пар key:value (в дополнение к типичным MySQL-определенным парам key:value), чтобы быть переданными в MySQL Server для показа как атрибуты связи в таблице PERFORMANCE_SCHEMA.SESSION_CONNECT_ATTRS. Использование в качестве примера: connectionAttributes=key1:value1,key2:value2. Эта функциональность доступна для использования только с MySQL Server 5.6 или позже. Более ранние версии MySQL Server не поддерживают признаки связи, заставляя этот параметр конфигурации быть проигнорированным. Определение connectionAttributes=none заставит обработку признака связи быть обойденной для ситуаций, где скорость создания/инициализации связи очень важна.

Начиная с версии: 5.1.25.

connectionLifecycleInterceptors

Разграниченный запятой список классов, которые реализуют "com.mysql.cj.jdbc.interceptors.ConnectionLifecycleInterceptor", который должен зарегистрировать события жизненного цикла связи (создание, разрушение, передача, отмена, установка текущей базы данных и изменение режима autocommit) и потенциально изменяет выполнение этих команд. ConnectionLifecycleInterceptors "наращиваемый", больше чем один перехватчик может быть определен через свойство конфигурации как разграниченный запятой список с перехватчиками в порядке слева направо.

Начиная с версии: 5.1.4.

useConfigs

Загрузите разграниченный запятой список свойств конфигурации прежде, чем разобрать URL или применить определенные пользователями свойства. Эти конфигурации объяснены в документации.

Начиная с версии: 3.1.5.

authenticationPlugins

Разграниченный запятой список классов, которые реализуют com.mysql.cj.protocol.AuthenticationPlugin и будет использоваться для идентификации, если не отключено свойство "disabledAuthenticationPlugins".

Начиная с версии: 5.1.19.

clientInfoProvider

Название класса, который осуществляет интерфейс com.mysql.cj.jdbc.ClientInfoProvider, чтобы поддержать методы JDBC 4.0 Connection.get/setClientInfo().

Значение по умолчанию: com.mysql.cj.jdbc.CommentClientInfoProvider.

Начиная с версии: 5.1.0.

createDatabaseIfNotExist

Создает базу данных, данную в URL, если это еще не существует. Предполагает, что у пользователя есть разрешения создать базы данных.

Значение по умолчанию: false.

Начиная с версии: 3.1.9.

databaseTerm

MySQL использует термин "схема" как синоним термина "база данных", в то время как Connector/J исторически берет термин JDBC "каталог" в качестве синонимичного с "базой данных". Это свойство для Connector/J определяет, какой термин, "каталог" или "схема", используется в запросе к базе данных. Свойство берет одно из двух значений CATALOG или SCHEMA и использует его, чтобы определить (1), какие методы связи могут использоваться, чтобы установить/получить текущую базу данных (например, setCatalog() or setSchema()), (2) какие аргументы могут использоваться в рамках различных методов DatabaseMetaData, чтобы отфильтровать результаты (например, параметр catalog или schemaPattern в getColumns()) и (3) какие области в ResultSet, возвращенном методами DatabaseMetaData, содержат идентификационную информацию базы данных (т.е. TABLE_CAT или TABLE_SCHEM в ResultSet, возвращенном getTables()).

Если databaseTerm=CATALOG, schemaPattern для поисков проигнорированы и требования методов схемы (как setSchema() или get Schema()) не работают.

Значение по умолчанию: CATALOG.

Начиная с версии: 8.0.17.

defaultAuthenticationPlugin

Название класса, осуществляющего com.mysql.cj.protocol.AuthenticationPlugin, который будет использоваться в качестве плагина идентификации по умолчанию (см. ниже). Ошибка использовать класс, который не перечисляется в "authenticationPlugins". Ошибка установить плагин, который был отключен свойством "disabledAuthenticationPlugins". Ошибка установить это значение к пустому указателю или пустой строке (т.е. должен быть, по крайней мере, действительный плагин идентификации по умолчанию, определенный для связи).

Значение по умолчанию: com.mysql.cj.protocol.a.authentication.MysqlNativePasswordPlugin

Начиная с версии: 5.1.19.

detectCustomCollations

Если драйвер обнаруживает наборы символов/сопоставления, установленные на сервере (true/false, по умолчанию 'false'), то если опция = 'true', драйвер получает фактические наборы символов/сопоставления от сервера каждый раз, когда связь устанавливается. Это может значительно замедлить инициализацию связи.

Значение по умолчанию: false.

Начиная с версии: 5.1.29.

disabledAuthenticationPlugins

Разграниченный запятой список классов, осуществляющих com.mysql.cj.protocol.AuthenticationPlugin или механизмы вроде "mysql_native_password". Плагины идентификации или перечисленные механизмы не будут использоваться для идентификации, которая потерпит неудачу, если она потребует одного из них. Ошибка отключить плагин идентификации по умолчанию (или названный свойством "defaultAuthenticationPlugin" или строго закодированный, если свойство "defaultAuthenticationPlugin" не установлено).

Начиная с версии: 5.1.19.

disconnectOnExpiredPasswords

Если "disconnectOnExpiredPasswords" = "false" и пароль выдохся, сервер входит в режим "sandbox" и посылает ERR(08001, ER_MUST_CHANGE_PASSWORD) для всех команд, которые не необходимы, чтобы установить новый пароль, пока новый пароль не установлен.

Значение по умолчанию: true.

Начиная с версии: 5.1.23.

interactiveClient

Установит флаг CLIENT_INTERACTIVE, который говорит MySQL-связям тайм-аут на основе INTERACTIVE_TIMEOUT вместо WAIT_TIMEOUT.

Значение по умолчанию: false.

Начиная с версии: 3.1.0.

passwordCharacterEncoding

Какая кодировка символов используется для паролей? Если оставить этот набор значением по умолчанию (пустой указатель), то используется набор значений в "characterEncoding", если оно есть, иначе используется UTF-8 в качестве кодировки по умолчанию. Если пароль содержит знаки не-ASCII, кодировка пароля должна соответствовать той, какая была установлена на сервере в то время, когда пароль был создан. Для паролей в других кодировках символов кодировка должна быть определена с этим свойством (или с "characterEncoding"), поскольку для драйвера невозможно опознать это автоматически.

Начиная с версии: 5.1.7.

propertiesTransform

Реализация com.mysql.cj.conf.ConnectionPropertiesTransform, который драйвер будет использовать, чтобы изменить свойства URL, переданные ему прежде, чем делать попытку связи.

Начиная с версии: 3.1.4.

rollbackOnPooledClose

Драйвер должен выпустить rollback(), когда логическая связь в пуле закрывается?

Значение по умолчанию: true.

Начиная с версии: 3.0.15.

useAffectedRows

Не устанавливайте флаг CLIENT_FOUND_ROWS, соединяясь с сервером (несовместимо с JDBC, сломает большинство запросов, которые полагаются на "найденные" вместо "затронутых" для запросов DML), но действительно получает "правильное" количество обновлений из "INSERT ... ON DUPLICATE KEY UPDATE", которые будут возвращены сервером.

Значение по умолчанию: false.

Начиная с версии: 5.1.7.

Сессия.

Свойства и описания

sessionVariables

Разделенный запятой или точкой с запятой список пар name=value, чтобы быть посланными как SET [SESSION] ... к серверу, когда драйвер соединяется.

Начиная с версии: 3.1.8.

characterEncoding

Какую кодировку символов драйвер должен использовать, имея дело с последовательностями (по умолчанию 'autodetect').

Начиная с версии: 1.1g.

characterSetResults

Набор символов, в котором серверу надлежит возвращать результаты.

Начиная с версии: 3.0.13.

connectionCollation

Если установлено, говорит серверу использовать это сопоставление в SET NAMES charset COLLATE connectionCollation. Также отвергает characterEncoding, которые соответствуют набору символов этого сопоставления.

Начиная с версии: 3.0.13.

Организация сети.

Свойства и описания

socksProxyHost

Имя или IP-адрес хоста SOCKS.

Начиная с версии: 5.1.34.

socksProxyPort

Порт сервера SOCKS.

Значение по умолчанию: 1080.

Начиная с версии: 5.1.34.

socketFactory

Название класса, который драйвер должен использовать для создания сокетных соединений с сервером. Этот класс должен осуществить интерфейс 'com.mysql.cj.protocol.SocketFactory' и иметь конструктор public без параметров.

Значение по умолчанию: com.mysql.cj.protocol.StandardSocketFactory.

Начиная с версии: 3.0.3.

connectTimeout

Тайм-аут для соединения сокета (в миллисекундах), 0 = нет тайм-аута. Работает только с JDK-1.4 или более новым.

Значение по умолчанию: 0.

Начиная с версии: 3.0.1.

socketTimeout

Тайм-аут для сетевых операций с сокетом (в миллисекундах), 0 = нет тайм-аута.

Значение по умолчанию: 0.

Начиная с версии: 3.0.1.

dnsSrv

Драйвер должен использовать данное имя хоста для поиска записи DNS SRV и использовать получающийся список хостов в связи отказоустойчивости? Обратите внимание на то, что единственное имя хоста без порта должно быть обеспечено, когда эта опция включена.

Значение по умолчанию: false.

Начиная с версии: 8.0.19.

localSocketAddress

Имя хоста или IP-адрес, чтобы явно формировать интерфейс, с которым драйвер свяжет клиентскую сторону связи TCP/IP, соединяясь.

Начиная с версии: 5.0.5.

maxAllowedPacket

Максимальный позволенный размер пакета, чтобы послать на сервер. Если не задан, значение системной переменной 'max_allowed_packet' будет использоваться, чтобы инициализировать это после соединения. Это значение не вступит в силу, если установлено больше, чем значение 'max_allowed_packet'. Кроме того, из-за внутренней зависимости от свойства "blobSendChunkSize" есть минимальное значение "8203", если "useServerPrepStmts" = "true".

Значение по умолчанию: 65535.

Начиная с версии: 5.1.8.

tcpKeepAlive

Соединяясь по TCP/IP, должен ли драйвер установить SO_KEEPALIVE?

Значение по умолчанию: true.

Начиная с версии: 5.0.7.

tcpNoDelay

Соединяясь по TCP/IP, должен ли драйвер установить SO_TCP_NODELAY (отключающий Nagle Algorithm)?

Значение по умолчанию: true.

Начиная с версии: 5.0.7.

tcpRcvBuf

Соединяясь по TCP/IP, должен ли драйвер установить SO_RCV_BUF к данному значению? Значение по умолчанию '0' означает использование значения по умолчанию платформы для этого.

Значение по умолчанию: 0.

Начиная с версии: 5.0.7.

tcpSndBuf

Соединяясь по TCP/IP, должен ли драйвер установить SO_SND_BUF к данному значению? Значение по умолчанию '0' означает использование значения по умолчанию платформы для этого.

Значение по умолчанию: 0.

Начиная с версии: 5.0.7.

tcpTrafficClass

Соединяясь по TCP/IP, должен ли драйвер установить класс трафика или поле type-of-service? См. документацию для java.net.Socket.setTrafficClass() для получения дополнительной информации.

Значение по умолчанию: 0.

Начиная с версии: 5.0.7.

useCompression

Использовать zlib сжатие, общаясь с сервером? (true/false).

Значение по умолчанию: false.

Начиная с версии: 3.0.17.

useUnbufferedInput

Не используйте BufferedInputStream для чтения данных из сервера.

Значение по умолчанию: true.

Начиная с версии: 3.0.11.

Безопасность.

Свойства и описания

allowMultiQueries

Позволить использование ';', чтобы разграничить много запросов во время одного запроса (true/false). Умолчание 'false' не затрагивает методы addBatch() и executeBatch(), которые полагаются на rewriteBatchStatements.

Значение по умолчанию: false.

Начиная с версии: 3.1.1.

useSSL

Для 8.0.12 и ранее: используйте SSL, общаясь с сервером, по умолчанию 'true', соединяясь с MySQL 5.5.45+, 5.6.26+ или 5.7.6+, иначе по умолчанию 'false'.

Для 8.0.13 и позже: по умолчанию 'true'. Устарело. См. sslMode для деталей.

Значение по умолчанию: true.

Начиная с версии: 3.0.2.

requireSSL

Для 8.0.12 и ранее: потребовать от сервера поддержки связи SSL, если useSSL=true?

Для 8.0.13 и позже: устарело. См. sslMode для деталей.

Значение по умолчанию: false.

Начиная с версии: 3.1.0.

verifyServerCertificate

Для 8.0.12 и ранее: Если "useSSL" установлен в "true", драйвер должен проверить сертификат сервера? Используя эту функцию, параметры keystore должны быть определены свойствами "clientCertificateKeyStore*", а не свойствами системы. По умолчанию 'false', соединяясь с MySQL 5.5.45+, 5.6.26+ or 5.7.6+ и "useSSL" не было явно установлено в "true". Иначе по умолчанию 'true'.

Для 8.0.13 и позже: по умолчанию 'false'. Устарело. См. описание sslMode для деталей.

Значение по умолчанию: false.

Начиная с версии: 5.1.6.

clientCertificateKeyStoreUrl

URL к сертификату клиента KeyStore (если не определен, используйте по умолчанию).

Начиная с версии: 5.1.0.

clientCertificateKeyStoreType

Тип KeyStore для сертификатов клиента (NULL или пустое значение используют тип по умолчанию, который "JKS"). Стандартные типы keystore, поддержанные JVM: "JKS" и "PKCS12", ваша среда может иметь больше вариантов в зависимости от того, какие продукты безопасности устанавливаются и доступны JVM.

Значение по умолчанию: JKS.

Начиная с версии: 5.1.0.

clientCertificateKeyStorePassword

Пароль для сертификатов клиента KeyStore.

Начиная с версии: 5.1.0.

trustCertificateKeyStoreUrl

URL к доверенному корневому сертификату KeyStore (если не определено, используйте по умолчанию).

Начиная с версии: 5.1.0.

trustCertificateKeyStoreType

Тип KeyStore для доверенных корневых сертификатов (NULL или пустое значение используют тип по умолчанию, который "JKS"). Стандартные типы keystore, поддержанные JVM: "JKS" и "PKCS12", ваша среда может иметь больше вариантов в зависимости от того, какие продукты безопасности устанавливаются и доступны JVM.

Значение по умолчанию: JKS.

Начиная с версии: 5.1.0.

trustCertificateKeyStorePassword

Пароль для доверенных корневых сертификатов KeyStore.

Начиная с версии: 5.1.0.

enabledSSLCipherSuites

Если "useSSL" установлено в "true", отвергает шифры, позволенные для использования на сокетах SSL. Это может требоваться, используя внешних поставщиков JSSE или чтобы определить шифры, совместимые с сервером MySQL и с используемой JVM.

Начиная с версии: 5.1.35.

enabledTLSProtocols

Если "useSSL" установлено в "true", отвергает протоколы TLS, позволенные для использования на сокетах SSL. Это может использоваться, чтобы ограничить связи с определенными версиями TLS.

Начиная с версии: 8.0.8.

allowLoadLocalInfile

Драйвер должен позволить использование 'LOAD DATA LOCAL INFILE...'?

Значение по умолчанию: false.

Начиная с версии: 3.0.3.

allowUrlInLocalInfile

Драйвер должен позволить URL в 'LOAD DATA LOCAL INFILE'?

Значение по умолчанию: false.

Начиная с версии: 3.1.4.

allowPublicKeyRetrieval

Позволяет специальный обмен, чтобы получить открытый ключ RSA сервера непосредственно от сервера.

Значение по умолчанию: false.

Начиная с версии: 5.1.31.

paranoid

Предотвратить показ уязвимой иинформации в сообщениях об ошибках и структурах данных, хранящих уязвимые данные, когда возможно?

Значение по умолчанию: false.

Начиная с версии: 3.0.1.

serverRSAPublicKeyFile

Путь к файлу открытого ключа RSA сервера для идентификации sha256_password. Если не определено, открытый ключ будет получен от сервера.

Начиная с версии: 5.1.31.

sslMode

По умолчанию сетевые соединения зашифрованы SSL, это свойство разрешает безопасным соединениям быть выключенными или применить разные уровни безопасности, которые будут выбраны. Следующие значения позволены: "DISABLED" устанавливает незашифрованные связи, "PREFERRED" (по умолчанию) устанавливает зашифрованные связи, если сервер их позволил, иначе отступит к незашифрованным связям, "REQUIRED" устанавливает безопасные соединения, если сервер их позволил, терпит неудачу иначе, "VERIFY_CA" аналог "REQUIRED", но дополнительно проверяет сертификат TLS сервера по настроенным сертификатам Certificate Authority (CA), "VERIFY_IDENTITY" аналог "VERIFY_CA", но дополнительно проверяет, что сертификат сервера соответствует хосту, к которому предпринята связь.

Эта свойство заменило устаревшие свойства "useSSL", "requireSSL" и "verifyServerCertificate", которые все еще приняты, но переведены на значение для "sslMode", если "sslMode" явно не установлен: "useSSL=false" переведен к "sslMode=DISABLED", {"useSSL=true", "requireSSL=false", "verifyServerCertificate=false"} превращается в "sslMode=PREFERRED", {"useSSL=true", "requireSSL=true", "verifyServerCertificate=false"} превращается в "sslMode=REQUIRED", {"useSSL=true" И "verifyServerCertificate=true"} превращается в "sslMode=VERIFY_CA". Нет никаких эквивалентных устаревших параметров настройки для "sslMode=VERIFY_IDENTITY". Обратите внимание на то, что для ВСЕХ версий сервера настройка по умолчанию "sslMode" = "PREFERRED", и это эквивалентно устаревшим параметрам настройки "useSSL=true", "requireSSL=false" и "verifyServerCertificate=false", которые отличаются от их настроек по умолчанию для Connector/J 8.0.12 и ранее в некоторых ситуациях. Должны быть рассмотрены запросы, которые продолжают использовать устаревшие свойства и полагаться на их старые настройки по умолчанию.

Устаревшие свойства проигнорированы, если "sslMode" установлен явно. Если ни один из "sslMode" или "useSSL" не установлен явно, настройка по умолчанию "sslMode=PREFERRED".

Значение по умолчанию: PREFERRED.

Начиная с версии: 8.0.13.

Запросы.

Свойства и описания

continueBatchOnError

Драйвер продолжает обрабатывать пакетные команды, если один запрос терпит неудачу? JDBC позволяет оба варианта.

Значение по умолчанию: true.

Начиная с версии: 3.0.3.

dontTrackOpenResources

Спецификация JDBC требует, чтобы драйвер автоматически отследил и закрыл ресурсы, однако если ваше запрос не делает явного вызова close() на запросах или наборах результатов, это может вызвать утечку памяти. Установка этого свойства в true ослабляет это ограничение и может поднять эффективность памяти для некоторых запросов. Также автоматическое закрытие запросов и текущего ResultSet в Statement.closeOnCompletion() и Statement.getMoreResults ([Statement.CLOSE_CURRENT_RESULT | Statement.CLOSE_ALL_RESULTS]), соответственно, прекращается. Это свойство автоматически устанавливает holdResultsOpenOverStatementClose=true.

Значение по умолчанию: false.

Начиная с версии: 3.1.7.

queryInterceptors

Разграниченный запятой список классов, реализующих "com.mysql.cj.interceptors.QueryInterceptor", который должен быть размещен в "промежуточном" выполнении запросов, чтобы влиять на результаты. QueryInterceptors результаты, возвращенные цепочкой, результаты, возвращенные "текущим" перехватчиком, будут переданы следующему в цепи слева направо, как определено в этом свойстве.

Начиная с версии: 8.0.7.

queryTimeoutKillsConnection

Если перерыв, данный в Statement.setQueryTimeout() истекает, драйвер должен насильственно прервать Связь вместо того, чтобы пытаться прервать запрос?

Значение по умолчанию: false.

Начиная с версии: 5.1.9.

Подготовленные запросы.

Свойства и описания

allowNanAndInf

Драйвер должен разрешить NaN или +/-INF в PreparedStatement.setDouble()?

Значение по умолчанию: false.

Начиная с версии: 3.1.5.

autoClosePStmtStreams

Драйвер должен автоматически вызвать .close() на потоках/читателях, переданных как аргументы через методы set*()?

Значение по умолчанию: false.

Начиная с версии: 3.1.12.

compensateOnDuplicateKeyUpdateCounts

Драйвер должен компенсировать количество обновлений "ON DUPLICATE KEY" INSERT (2 = 1, 0 = 1), используя подготовленные запросы?

Значение по умолчанию: false.

Начиная с версии: 5.1.7.

emulateUnsupportedPstmts

Драйвер должен обнаружить подготовленные запросы, которые не поддерживаются сервером, и замениюь их клиентскими эмулированными версиями?

Значение по умолчанию: true.

Начиная с версии: 3.1.7.

generateSimpleParameterMetadata

Драйвер должен произвести упрощенные метаданные параметра для PreparedStatements, когда никакие метаданные недоступны или потому что сервер не мог поддержать подготовку запроса или подготовленные запросы серверной стороны отключены?

Значение по умолчанию: false.

Начиная с версии: 5.0.5.

processEscapeCodesForPrepStmts

Драйвер должен обработать коды экранировки в запросах, которые подготовлены? Поведение обработки по умолчанию в неподготовленных запросах должно быть определено свойством 'enableEscapeProcessing'.

Значение по умолчанию: true.

Начиная с версии: 3.1.12.

useServerPrepStmts

Используйте подготовленные запросы серверной стороны, если сервер поддерживает их?

Значение по умолчанию: false.

Начиная с версии: 3.1.0.

useStreamLengthsInPrepStmts

Учитывать параметр длины потока в вызове метода PreparedStatement/ResultSet.setXXXStream()?

Значение по умолчанию: true.

Начиная с версии: 3.0.2.

Наборы результатов.

Свойства и описания

clobberStreamingResults

Это заставит текущий ResultSet быть автоматически закрытым, и любые данные, все еще поступающие от сервера, будут отклонены, если другой запрос будет выполнен, прежде чем все данные были прочитаны из сервера.

Значение по умолчанию: false.

Начиная с версии: 3.0.9.

emptyStringsConvertToZero

Драйвер должен позволить преобразования от пустой строки до числовых значений '0'?

Значение по умолчанию: true.

Начиная с версии: 3.1.8.

holdResultsOpenOverStatementClose

Драйвер должен закрыть наборы результатов Statement.close() как требуется спецификацией JDBC?

Значение по умолчанию: false.

Начиная с версии: 3.1.7.

jdbcCompliantTruncation

Драйвер бросает исключения java.sql.DataTruncation, когда данные усечены, как требуется спецификацией JDBC, когда связан с сервером, который поддерживает предупреждения (MySQL 4.1.0 и более новый)? Это свойство не имеет никакого эффекта, если sql-режим сервера включает STRICT_TRANS_TABLES.

Значение по умолчанию: true.

Начиная с версии: 3.1.2.

maxRows

Максимальное количество строк, чтобы возвратить (0 возвращает все).

Значение по умолчанию: 0.

Начиная с версии: все версии.

netTimeoutForStreamingResults

Какое значение драйвер должен автоматически установить серверному параметру 'net_write_timeout', когда текущая передача наборов результатов используется? В секундах, значение '0' означает, что драйвер не пытается приспособить это значение.

Значение по умолчанию: 600.

Начиная с версии: 5.1.0.

padCharsWithSpace

Если у колонки набора результатов есть тип CHAR, и значение не заполняет количество символов, определенных в DDL для колонки, драйвер должен дополнить оставшиеся символы пробелами (для соблюдения ANSI)?

Значение по умолчанию: false.

Начиная с версии: 5.0.6.

populateInsertRowWithDefaultValues

Используя ResultSets, которые являются CONCUR_UPDATABLE, драйвер должен предварительно заполнить строку значениями по умолчанию от DDL для таблицы, используемой в запросе, таким образом, те значения немедленно доступны для ResultSet? Эта функциональность требует обращения к базе данных для метаданных каждый раз, когда набор результатов этого типа создается. Если отключено (по умолчанию), значения по умолчанию будут заполнены внутренним вызовом refreshRow(), который задерживает значения по умолчанию и/или значения, измененные триггерами

Значение по умолчанию: false.

Начиная с версии: 5.0.5.

strictUpdates

Драйвер должен сделать строгую проверку (все отобранные первичные ключи) обновляемых наборов результатов?

Значение по умолчанию: true.

Начиная с версии: 3.0.4.

tinyInt1isBit

Драйвер должен рассматривать тип данных TINYINT(1) как тип BIT (потому что сервер тихо преобразовывает BIT -> TINYINT(1), составляя таблицы)?

Значение по умолчанию: true.

Начиная с версии: 3.0.16.

transformedBitIsBoolean

Если драйвер преобразовывает TINYINT(1) в другой тип, он должен использовать BOOLEAN вместо BIT для будущей совместимости с MySQL-5.0, поскольку у MySQL-5.0 есть тип BIT?

Значение по умолчанию: false.

Начиная с версии: 3.1.9.

Метаданные.

Свойства и описания

getProceduresReturnsFunctions

У Pre-JDBC4 DatabaseMetaData API есть только методы getProcedures() и getProcedureColumns(), таким образом, они возвращают информацию о метаданных для хранимых процедур и для функций. JDBC4 был расширен методами getFunctions() и getFunctionColumns(), ожидаемые поведения предыдущих методов не определены четко. Для JDBC4 и выше по умолчанию 'true' в этой опции означает, что вызовы DatabaseMetaData.getProcedures() и DatabaseMetaData.getProcedureColumns() возвращают метаданные для процедур и для функций как прежде, поддерживая обратную совместимость. Установка в 'false' предписывает возвратить метаданные только для процедур.

Значение по умолчанию: true.

Начиная с версии: 5.1.26.

noAccessToProcedureBodies

Когда определение типов параметра процедуры для CallableStatements и подключенного пользователя не может получить доступ к телам процедуры через "SHOW CREATE PROCEDURE" или выбрать в mysql.proc, драйвер должен вместо этого создать основные метаданные (все параметры, о которых сообщают как INOUT VARCHAR) вместо того, чтобы бросить исключение?

Значение по умолчанию: false.

Начиная с версии: 5.0.3.

nullDatabaseMeansCurrent

Когда методы DatabaseMetadata просят параметр 'каталога' или 'схемы', пустой указатель означает использовать текущую базу данных? См. также свойство 'databaseTerm'.

Значение по умолчанию: false.

Начиная с версии: 3.1.8.

useHostsInPrivileges

Добавить '@hostname' к пользователям в DatabaseMetaData.getColumn/TablePrivileges().

Значение по умолчанию: true.

Начиная с версии: 3.0.2.

useInformationSchema

Драйвер должен использовать INFORMATION_SCHEMA, чтобы получить информацию, используемую DatabaseMetaData? По умолчанию 'true', соединяясь с MySQL 8.0.3+, иначе по умолчанию 'false'.

Значение по умолчанию: false.

Начиная с версии: 5.0.0.

Обработка BLOB/CLOB.

Свойства и описания

autoDeserialize

Драйвер должен автоматически обнаружить и десериализовать объекты в полях BLOB?

Значение по умолчанию: false.

Начиная с версии: 3.1.5.

blobSendChunkSize

Размер куска, чтобы использовать, посылая BLOB/CLOB через ServerPreparedStatements. Обратите внимание на то, что это значение не может превысить значение "maxAllowedPacket" и, если это так, тогда это значение будет исправлено автоматически.

Значение по умолчанию: 1048576.

Начиная с версии: 3.1.9.

blobsAreStrings

Драйвер должен всегда рассматривать BLOB как Strings, чтобы работать в обход сомнительных метаданных, возвращенных сервером для GROUP BY?

Значение по умолчанию: false.

Начиная с версии: 5.0.8.

clobCharacterEncoding

Кодировка символов, чтобы использовать для отправки и получения TEXT, MEDIUMTEXT и LONGTEXT вместо формируемой связи characterEncoding.

Начиная с версии: 5.0.0.

emulateLocators

Драйвер должен подражать java.sql.Blobs с локаторами? С этой активированной опцией драйвер задержит загрузку фактических данных Blob, пока к тому из методов получения (getInputStream(), getBytes() и т.д.) на потоке blob не получили доступ. Для этого необходимо использовать псевдоним столбца к актуальному имени Blob. У особенности также есть следующие ограничения: SELECT, который создал набор результатов, должен сослаться только на одну таблицу, у нее должен быть первичный ключ, SELECT должен использовать псевдоним оригинального имени столбца blob, определенный как последовательность, SELECT должен покрыть все столбцы, которые составляют первичный ключ.

Значение по умолчанию: false.

Начиная с версии: 3.1.0.

functionsNeverReturnBlobs

Драйвер должен всегда рассматривать данные из функций, возвращая BLOB как String, чтобы работать в обход сомнительных метаданных, возвращенных сервером для GROUP BY?

Значение по умолчанию: false.

Начиная с версии: 5.0.8.

locatorFetchBufferSize

Если 'emulateLocators' = 'true', какого размера буфер должен использоваться, получая данные BLOB для getBinaryInputStream?

Значение по умолчанию: 1048576.

Начиная с версии: 3.2.1.

Обработка даты и времени.

Свойства и описания

noDatetimeStringSync

Не гарантируйте, что ResultSet.getDatetimeType().toString().equals(ResultSet.getString()).

Значение по умолчанию: false.

Начиная с версии: 3.1.7.

sendFractionalSeconds

Пошлите дробную часть секунд из TIMESTAMP. Если установлено в false, значение наносекунд в TIMESTAMP будет усечено прежде, чем послать любые данные в сервер. Этот выбор применяется только к подготовленным запросам, вызываемым запросам или обновляемым наборам результатов.

Значение по умолчанию: true.

Начиная с версии: 5.1.37.

serverTimezone

Отвергните обнаружение/отображение часового пояса. Используется, когда часовой пояс от сервера не отображается к часовому поясу Java.

Начиная с версии: 3.0.2.

treatUtilDateAsTimestamp

Передавать java.util.Date как TIMESTAMP в целях PreparedStatement.setObject()?

Значение по умолчанию: true.

Начиная с версии: 5.0.5.

yearIsDateType

Драйвер JDBC должен передать тип MySQL "YEAR" как java.sql.Date или SHORT?

Значение по умолчанию: true.

Начиная с версии: 3.1.9.

zeroDateTimeBehavior

Что должно произойти, когда драйвер сталкивается с DATETIME, которые составлены полностью из нолей (используемый MySQL, чтобы представлять недействительные даты)? Действительные значения: "EXCEPTION", "ROUND" и "CONVERT_TO_NULL".

Значение по умолчанию: EXCEPTION.

Начиная с версии: 3.1.4.

Высокая доступность и объединение в кластеры.

Свойства и описания

autoReconnect

Драйвер должен попытаться восстановить несвежие и/или мертвые связи? Если позволено, драйвер бросит исключение для запроса на несвежей или мертвой связи, которые принадлежат текущей транзакции, но попытается снова соединится перед следующим запросом на связи в новой транзакции. Использование этой особенности не рекомендуется, потому что есть побочные эффекты с состоянием сеанса и непротиворечивостью данных, когда запросы не работают с SQLExceptions правильно, и разработан только чтобы использоваться, когда вы не способны настроить свой запрос работать с SQLExceptions, следующим из мертвых и несвежих связей правильно. Альтернативно, как последний выбор, исследуйте настройку серверной переменной MySQL "wait_timeout" к высокому значению, а не по умолчанию 8 часов.

Значение по умолчанию: false.

Начиная с версии: 1.1.

autoReconnectForPools

Используйте стратегию повторного соединения, подходящую для пулов связи.

Значение по умолчанию: false.

Начиная с версии: 3.1.3.

failOverReadOnly

При сбое в режиме autoReconnect связь должна быть установлена в 'только для чтения'?

Значение по умолчанию: true.

Начиная с версии: 3.0.12.

maxReconnects

Максимальное количество попыток реконнекта, если autoReconnect = true.

Значение по умолчанию: 3.

Начиная с версии: 1.1.

reconnectAtTxEnd

Если autoReconnect = true, драйвер должен делать попытку повторных соединений в конце каждой транзакции?

Значение по умолчанию: false.

Начиная с версии: 3.0.10.

retriesAllDown

Используя выравнивание нагрузки или отказоустойчивость, сколько раз драйвер должен опросить доступные хосты, пытаясь соединиться. Между циклами драйвер сделает паузу в течение 250 мс, если никакие серверы не будут доступны.

Значение по умолчанию: 120.

Начиная с версии: 5.1.6.

initialTimeout

Если включен autoReconnect, начальное время, которое надо ждать между повторными попытками подключения (в секундах).

Значение по умолчанию: 2.

Начиная с версии: 1.1.

queriesBeforeRetryMaster

Количество запросов перед отступанием к основному хосту при отказе (используя отказоустойчивость мультихоста). При любом условии 'queriesBeforeRetryMaster' или 'secondsBeforeRetryMaster' попытка снова соединиться с основным хостом будет сделана. Установка обоих свойств к 0 отключает автоматический возврат к основному хосту в границах транзакции.

Значение по умолчанию: 50.

Начиная с версии: 3.0.2.

secondsBeforeRetryMaster

Сколько времени драйвер должен ждать прежде, чем попытаться снова соединиться с основным хостом? При любом условии 'queriesBeforeRetryMaster' или 'secondsBeforeRetryMaster' попытка снова соединиться с основным хостом будет сделана. Установка обоих свойств к 0 отключает автоматический возврат к основному хосту в границах транзакции.

Значение по умолчанию: 30.

Начиная с версии: 3.0.2.

allowMasterDownConnections

По умолчанию осведомленная о репликации связь не соединится, когда формируемые основные хосты будут все недоступны при начальной связи. Настройка этой опции в 'true' позволяет устанавливать начальную связь при недоступных подчиненных серверах в статусе только для чтения. Это не предотвратит последующие неудачи, переключаясь назад на основные хосты, т.е. устанавливая соединение репликации в состояние чтения-записи.

Значение по умолчанию: false.

Начиная с версии: 5.1.27.

allowSlaveDownConnections

По умолчанию осведомленная о репликации связь не соединится, когда формируемые подчиненные хосты будут все недоступны при начальной связи. Настройка этой опции в 'true' позволяет устанавливать начальную связь. Это не предотвратит неудачи, переключаясь на устанавливая соединение репликации в состояние только для чтения. Свойство 'readFromMasterWhenNoSlaves' должно использоваться с этой целью.

Значение по умолчанию: false.

Начиная с версии: 6.0.2.

ha.enableJMX

Позволяет основанное на JMX управление уравновешенными группами связи, включая живое дополнение/удаление хостов от пула выравнивания нагрузки. Позволяет основанное на JMX управление группами соединения репликации, включая живое продвижение подчиненных хостов, добавление новых подчиненных и удаление любых хостов из уравновешенных пулов связи.

Значение по умолчанию: false.

Начиная с версии: 5.1.27.

loadBalanceHostRemovalGracePeriod

Устанавливает льготный период ожидания хоста, удаляемого из уравновешенной связи, когда это в настоящее время активный хост.

Значение по умолчанию: 15000.

Начиная с версии: 6.0.3.

readFromMasterWhenNoSlaves

Осведомленные о репликации связи распределяют нагрузку при помощи основных хостов, когда в состоянии чтения-записи и при помощи подчиненных, когда в режиме только для чтения. Если, устанавливая связь со статусом только для чтения, ни один из подчиненных хостов не доступен, SQLExeception брошен. Установка этой опции в 'true' позволяет терпеть неудачу основным хостам, устанавливая состояние связи в только для чтения, когда никакие подчиненные хосты не доступны в момент переключения.

Значение по умолчанию: false.

Начиная с версии: 6.0.2.

selfDestructOnPingMaxOperations

Если установлено в ненулевое значение, драйвер сообщит о закыртии связи и о неудаче, когда вызван Connection.ping() или Connection.isValid(int), если число команд связи, посланных в сервер, превышает это значение.

Значение по умолчанию: 0.

Начиная с версии: 5.1.6.

selfDestructOnPingSecondsLifetime

Если установлено в ненулевое значение, драйвер закроет связь и сообщит о неудаче, когда вызван Connection.ping() или Connection.isValid(int), если время жизни связи превышает это значение (в миллисекундах).

Значение по умолчанию: 0.

Начиная с версии: 5.1.6.

ha.loadBalanceStrategy

Используя уравновешенную связь, чтобы соединиться с узлами SQL в конфигурации MySQL Cluster/NDB (при помощи префикса URL "jdbc:mysql:loadbalance://"), какой алгоритм балансировки нагрузки должен использоваться: (1) "random": драйвер выберет случайный хост каждому запросу. Это имеет тенденцию работать лучше, чем циклический алгоритм, поскольку хаотичность будет несколько сглаживать распределение нагрузок, где запросы имеют разное время ответа, в то время как циклический алгоритм может иногда приводить к перегруженным узлам, если есть изменения времени ответа через рабочую нагрузку. (2) "bestResponseTime": драйвер будет маршрутизировать запрос хосту, у которого было лучшее время отклика для предыдущей транзакции. (3) "serverAffinity": драйвер первоначально пытается использовать близость сервера, все еще извлекая выгоду из аспектов отказоустойчивости и выравнивания нагрузки. Близость сервера требует, чтобы список был предоставлен, используя свойство 'serverAffinityOrder'. Если ни один из серверов, перечисленных в списке близости, не отзывается, драйвер тогда обращается к стратегии "random", чтобы возобновить выбор следующего сервера.

Значение по умолчанию: random.

Начиная с версии: 5.0.6.

loadBalanceAutoCommitStatementRegex

Когда включено выравнивание нагрузки для запросов auto-commit (через loadBalanceAutoCommitStatementThreshold), счетчик запросов увеличится только, когда SQL будет соответствовать регулярному выражению. По умолчанию соответствует каждый запрос.

Начиная с версии: 5.1.15.

loadBalanceAutoCommitStatementThreshold

Когда включен auto-commit, количество запросов, которые должны быть выполнены прежде, чем вызвать выравнивание нагрузки, чтобы повторно балансировать. Значение по умолчанию 0 предписывает повторно балансировать только, когда сталкиваются с исключениями или выключен auto-commit и транзакции явно переданы или отменены.

Значение по умолчанию: 0.

Начиная с версии: 5.1.15.

loadBalanceBlacklistTimeout

Время в миллисекундах между проверками серверов, которые недоступны, управляет, сколько времени сервер живет в глобальном черном списке.

Значение по умолчанию: 0.

Начиная с версии: 5.1.0.

loadBalanceConnectionGroup

Логическая группа уравновешенных связей в classloader, используемом, чтобы управлять различными группами независимо. Если не определено, живое управление уравновешенными связями искалечено.

Начиная с версии: 5.1.13.

loadBalanceExceptionChecker

Полностью квалифицированное имя класса контролера исключения. Класс должен осуществить интерфейс com.mysql.cj.jdbc.ha.LoadBalanceExceptionChecker и используется, чтобы смотреть SQLExceptions и определить, должны ли они передать отказоустойчивость другому хосту в уравновешенном развертывании.

Значение по умолчанию: com.mysql.cj.jdbc.ha.StandardLoadBalanceExceptionChecker.

Начиная с версии: 5.1.13.

loadBalancePingTimeout

Время в миллисекундах, чтобы ждать ответа от каждой из уравновешенных физических связей, используя уравновешенное соединение.

Значение по умолчанию: 0.

Начиная с версии: 5.1.13.

loadBalanceSQLExceptionSubclassFailover

Разграниченный запятой список классов/интерфейсов, используемых по умолчанию контролером исключения, чтобы определить, должен ли данный SQLException вызвать отказоустойчивость. Сравнение сделано, используя Class.isInstance(SQLException) с использованием брошенного SQLException.

Начиная с версии: 5.1.13.

loadBalanceSQLStateFailover

Разграниченный запятой список кодов SQLState, используемых по умолчанию контролером исключения, чтобы определить, должен ли данный SQLException вызвать отказоустойчивость. SQLState данного SQLException оценен, чтобы определить, начинается ли он с какого-либо значения в разграниченном запятой списке.

Начиная с версии: 5.1.13.

loadBalanceValidateConnectionOnSwapServer

Уравновешенная cвязь должна явно проверить, жива ли связь, когда происходит обмен на новую физическую связь при commit/rollback?

Значение по умолчанию: false.

Начиная с версии: 5.1.13.

pinGlobalTxToPhysicalConnection

Используя XAConnections, драйвер должен гарантировать, что операции на данном XID всегда направляются к той же самой физической связи? Это позволяет XAConnection поддерживать "XA START ... JOIN" после "XA END".

Значение по умолчанию: false.

Начиная с версии: 5.0.1.

replicationConnectionGroup

Логическая группа соединений репликации в classloader, используемая, чтобы управлять различными группами независимо. Если не определено, живое управление соединениями репликации искалечено.

Начиная с версии: 8.0.7.

resourceId

Глобально уникальное имя, которое определяет ресурс, с которым этот источник данных или связь связываются, используется для XAResource.isSameRM(), когда драйвер не может определить это значение на основе имен хоста, используемых в URL.

Начиная с версии: 5.0.1.

serverAffinityOrder

Список разделенных запятой значений, содержащий пары хоста/порта, которые должны использоваться в выравнивании нагрузки по схеме "serverAffinity". Только подмножество хостов, перечисленных в главной группе хостов в этом URL, будет использоваться, и они должны быть идентичными в регистре и типе, то есть нельзя использовать IP-адрес в одном месте и соответствующее имя хоста в другом.

Начиная с версии: 8.0.8.

Исполнительные расширения.

Свойства и описания

callableStmtCacheSize

Если включено 'cacheCallableStmts', сколько вызываемых запросов должно быть кэшировано?

Значение по умолчанию: 100.

Начиная с версии: 3.1.2.

metadataCacheSize

Количество запросов для кэширования ResultSetMetadata, если cacheResultSetMetaData установлен в 'true'.

Значение по умолчанию: 50.

Начиная с версии: 3.1.1.

useLocalSessionState

Драйвер должен обратиться к внутренним значениям autocommit и изоляции транзакции, которые установлены Connection.setAutoCommit() и Connection.setTransactionIsolation(), и операционному состоянию, заданному протоколом, вместо того, чтобы запросить базу данных или вслепую послать команды в базу данных для вызова методов commit() или rollback()?

Значение по умолчанию: false.

Начиная с версии: 3.1.7.

useLocalTransactionState

Драйвер должен использовать состояние транзакции, обеспеченное протоколом MySQL, чтобы определить, нужно ли на самом деле послать в базу данных commit() или rollback()?

Значение по умолчанию: false.

Начиная с версии: 5.1.7.

prepStmtCacheSize

Если кэширование подготовленных запросов позволено, сколько подготовленных запросов должно кэшироваться?

Значение по умолчанию: 25.

Начиная с версии: 3.0.10.

prepStmtCacheSqlLimit

Если кэширование подготовленных запросов позволено, размер самого большого SQL, который драйвер кэширует?

Значение по умолчанию: 256.

Начиная с версии: 3.0.10.

parseInfoCacheFactory

Название класса, осуществляющего com.mysql.cj.CacheAdapterFactory, который будет использоваться, чтобы создать кэши для разобранного представления клиентских подготовленных запросов.

Значение по умолчанию: com.mysql.cj.PerConnectionLRUFactory.

Начиная с версии: 5.1.1.

serverConfigCacheFactory

Название класса, осуществляющего com.mysql.cj.CacheAdapterFactory <String, Map<String, String>>, который будет использоваться, чтобы создать кэши значений конфигурации сервера MySQL.

Значение по умолчанию: com.mysql.cj.util.PerVmServerConfigCacheFactory.

Начиная с версии: 5.1.1.

alwaysSendSetIsolation

Драйвер должен всегда общаться с базой данных, когда вызван Connection.setTransactionIsolation()? Если false, драйвер будет общаться с базой данных только когда требуемая изоляция транзакции будет отличаться от последнего значения, которое было установлено через Connection.setTransactionIsolation(), или значения, которое было прочитано из сервера, когда связь была установлена. Обратите внимание на то, что useLocalSessionState=true вызовет то же самое поведение, как alwaysSendSetIsolation=false, независимо от того, как установлен alwaysSendSetIsolation.

Значение по умолчанию: true.

Начиная с версии: 3.1.7.

maintainTimeStats

Драйвер должен поддержать различные внутренние таймеры, чтобы позволить вычисления времени простоя, а также больше многословных сообщений об ошибках, когда связь с сервером прерывается? Установка в false удаляет по крайней мере два вызова System.getCurrentTimeMillis() на запрос.

Значение по умолчанию: true.

Начиная с версии: 3.1.9.

useCursorFetch

Драйвер должен использовать основанную на курсоре установку, чтобы получить строки? Если установлено в "true" и "defaultFetchSize" > 0 (или setFetchSize() > 0 вызван в запросе), тогда основанный на курсоре набор результатов будет использоваться. Обратите внимание на то, что "useServerPrepStmts" автоматически установлен в "true" в этом случае, потому что функциональность курсора доступна только для подготовленных запросов серверной стороны.

Значение по умолчанию: false.

Начиная с версии: 5.0.0.

cacheCallableStmts

Если драйвер кэширует стадию парсинга CallableStatements.

Значение по умолчанию: false.

Начиная с версии: 3.1.2.

cachePrepStmts

Действительно ли драйвер должен кэшировать стадию парсинга PreparedStatements клиентских подготовленных запросов, проверить на пригодность сами запросы?

Значение по умолчанию: false.

Начиная с версии: 3.0.10.

cacheResultSetMetadata

Действительно ли драйвер должен кэшировать ResultSetMetaData для Statements и PreparedStatements? Требует JDK-1.4+.

Значение по умолчанию: false.

Начиная с версии: 3.1.1.

cacheServerConfiguration

Действительно ли драйвер должен кэшировать результаты 'SHOW VARIABLES' и 'SHOW COLLATION' на основе URL?

Значение по умолчанию: false.

Начиная с версии: 3.1.5.

defaultFetchSize

Драйвер вызовет setFetchSize(n) с этим значением на всех недавно созданных запросах.

Значение по умолчанию: 0.

Начиная с версии: 3.1.9.

dontCheckOnDuplicateKeyUpdateInSQL

Остановит проверку содержит ли каждый оператор INSERT пункт "ON DUPLICATE KEY UPDATE". Как побочный эффект, получая произведенную информацию о ключах, запросы возвратят список, где обычно ее не было бы. Также знайте, что в этом случае список произведенных возвращенных ключей может не быть точным. Эффект этого значения отменяется, если установлено одновременно с 'rewriteBatchedStatements=true'.

Значение по умолчанию: false.

Начиная с версии: 5.1.32.

elideSetAutoCommits

Используя MySQL-4.1 или более новый, драйвер должен только выпустить запросы 'set autocommit=n', когда состояние сервера не соответствует требуемому Connection.setAutoCommit(boolean)?

Значение по умолчанию: false.

Начиная с версии: 3.1.3.

enableEscapeProcessing

Устанавливает поведение обработки экранировки по умолчанию для объектов запроса. Метод Statement.setEscapeProcessing() может использоваться, чтобы определить поведение обработки для отдельного объекта запроса. Поведение обработки по умолчанию в подготовленных запросах должно быть определено свойством 'processEscapeCodesForPrepStmts'.

Значение по умолчанию: true.

Начиная с версии: 6.0.1.

enableQueryTimeouts

Когда позволено, набор тайм-аутов запроса установлен через Statement.setQueryTimeout(), используя общий экземпляр java.util.Timer для планирования. Даже если тайм-аут не истекает прежде, чем запрос обрабатывается, память, используемая TimerTask для данного тайм-аута, не будет восстановлена до времени, когда он истек бы, если бы это не было отменено драйвером. Окружающая среда высокой нагрузки могла бы хотеть рассмотреть отключение этой функциональности.

Значение по умолчанию: true.

Начиная с версии: 5.0.6.

largeRowSizeThreshold

Какой размер набора результатов драйвер JDBC должен считать большим и использовать более эффективный способ представлять его внутренне?

Значение по умолчанию: 2048.

Начиная с версии: 5.1.1.

readOnlyPropagatesToServer

Драйвер должен сделать соответствующие запросы, чтобы неявно установить операционный режим доступа на серверной стороне, когда вызван Connection.setReadOnly()? Установка этого значения к 'true' позволяет InnoDB потенциальную оптимизацию только для чтения, но также и требует дополнительного обмена данными, чтобы установить правильное операционное состояние. Даже если это свойство будет установлено в 'false', драйвер сделает максимальные усилия, чтобы предотвратить выполнение запросов, изменения состояния базы данных. Требует минимум MySQL 5.6.

Значение по умолчанию: true.

Начиная с версии: 5.1.35.

rewriteBatchedStatements

Драйвер должен использовать мультизапросы (независимо от "allowMultiQueries"), а также переписывание подготовленных запросов для INSERT во вставки нескольких значений, когда вызывают executeBatch()? Заметьте, что у этого есть потенциал для инъекции SQL, используя простой java.sql.Statements, если ваш код не анализирует ввод правильно. Заметьте, что для подготовленных запросов серверной стороны запросы не могут в настоящее время использовать в своих интересах опцию переписывания, и что, если вы не определяете длину потока, используя PreparedStatement.set*Stream(), драйвер не будет в состоянии определить оптимальное количество параметров на пакет, и вы могли бы получить ошибку от драйвера, что пакет слишком большой. Statement.getGeneratedKeys() для этих переписанных запросов работает только, когда вся партия включает операторы INSERT. Пожалуйста, будьте осторожны с использованием rewriteBatchedStatements=true в сочетании с INSERT .. ON DUPLICATE KEY UPDATE, который для переписанного сервером запроса возвращает только одно значение как сумму всех затронутых (или найденных) строк в партии, и невозможно отобразить его правильно к первоначальным запросам. В этом случае драйвер возвращает 0 в результате каждого пакетного запроса, если полное количество было 0, и Statement.SUCCESS_NO_INFO в результате каждого пакетного запроса, если полное количество было >0.

Значение по умолчанию: false.

Начиная с версии: 3.1.13.

useReadAheadInput

Использовать более новый оптимизированный неблокирующий буферизованный поток ввода, читая с сервера?

Значение по умолчанию: true.

Начиная с версии: 3.1.5.

Отладка/Профилирование.

Свойства и описания

logger

Название класса, который осуществляет "com.mysql.cj.log.Log", который будет использоваться, чтобы зарегистрировать сообщения (по умолчанию "com.mysql.cj.log.StandardLogger", который пишет в STDERR).

Значение по умолчанию: com.mysql.cj.log.StandardLogger.

Начиная с версии: 3.1.1.

profilerEventHandler

Название класса, который осуществляет интерфейс com.mysql.cj.log.ProfilerEventHandler, который будет использоваться, чтобы обращаться с событиями профилирования/отслеживания.

Значение по умолчанию: com.mysql.cj.log.LoggingProfilerEventHandler.

Начиная с версии: 5.1.6.

useNanosForElapsedTime

Для профилирования/отладки функциональности, которая измеряет прошедшее время, драйвер должен попытаться использовать обработку наносекунд при ее наличии (JDK >= 1.5)?

Значение по умолчанию: false.

Начиная с версии: 5.0.7.

maxQuerySizeToLog

Управляет максимальной длиной части запроса, который будет зарегистрирован при отладке.

Значение по умолчанию: 2048.

Начиная с версии: 3.1.3.

profileSQL

Трассировка запросов и время выполнения/получения к формируемому 'profilerEventHandler'.

Значение по умолчанию: false.

Начиная с версии: 3.1.0.

logSlowQueries

Должны ли запросы, которые занимают больше времени, чем 'slowQueryThresholdMillis' или определенные 'autoSlowLog' зарегистрированы 'profilerEventHandler'?

Значение по умолчанию: false.

Начиная с версии: 3.1.2.

slowQueryThresholdMillis

Если включено 'logSlowQueries', сколько времени запрос должен занять (в ms), прежде чем он будет зарегистрирован как медленный?

Значение по умолчанию: 2000.

Начиная с версии: 3.1.2.

slowQueryThresholdNanos

Если включено 'logSlowQueries', 'useNanosForElapsedTime' установлен в true, и это свойство установлено в ненулевое значение, драйвер будет использовать этот порог (в наносекундах), чтобы определить, был ли запрос медленным.

Значение по умолчанию: 0.

Начиная с версии: 5.0.7.

autoSlowLog

Вместо того, чтобы использовать slowQueryThreshold*, чтобы определить, достаточно ли запрос медленный, чтобы быть зарегистрированным, поддержать ли статистические данные, которые позволяют драйверу определять запросы, которые вне 99%?

Значение по умолчанию: true.

Начиная с версии: 5.1.4.

explainSlowQueries

Если включено 'logSlowQueries', драйвер должен автоматически выпустить 'EXPLAIN' на сервере и послать результаты в журнал как уровень протокола WARN?

Значение по умолчанию: false.

Начиная с версии: 3.1.2.

gatherPerfMetrics

Драйвер должен собрать исполнительные метрики и сообщить о них через протокол каждые 'reportMetricsIntervalMillis' миллисекунд?

Значение по умолчанию: false.

Начиная с версии: 3.1.2.

reportMetricsIntervalMillis

Если включено 'gatherPerfMetrics', как часто они должны быть зарегистрированы (в ms)?

Значение по умолчанию: 30000.

Начиная с версии: 3.1.2.

logXaCommands

Драйвер должен зарегистрировать команды XA, посланные MysqlXaConnection серверу как уровень протокола DEBUG?

Значение по умолчанию: false.

Начиная с версии: 5.0.5.

traceProtocol

Сетевой протокол должен быть зарегистрирован на уровне TRACE?

Значение по умолчанию: false.

Начиная с версии: 3.1.2.

enablePacketDebug

Когда включено, кольцевой буфер пакетов 'packetDebugBufferSize' будет сохранен и сброшен в дамп, когда исключения будут брошены в ключевые области в коде драйвера.

Значение по умолчанию: false.

Начиная с версии: 3.1.3.

packetDebugBufferSize

Максимальное количество пакетов, чтобы сохранить, когда 'enablePacketDebug' = true.

Значение по умолчанию: 20.

Начиная с версии: 3.1.3.

useUsageAdvisor

Драйвер должен выпустить предупреждения 'usage', советуя надлежащее и эффективное использование JDBC и MySQL Connector/J в 'profilerEventHandler'?

Значение по умолчанию: false.

Начиная с версии: 3.1.1.

resultSetSizeThreshold

Если 'useUsageAdvisor' = true, сколько строк набор результатов должен содержать, прежде чем драйвер предупреждает, что это подозрительно большое?

Значение по умолчанию: 100.

Начиная с версии: 5.0.5.

autoGenerateTestcaseScript

Драйвер должен сбросить в дамп в STDERR SQL, который выполняет, включая подготовленные запросы серверной стороны?

Значение по умолчанию: false.

Начиная с версии: 3.1.9.

Исключения/Предупреждения.

Свойства и описания

dumpQueriesOnException

Драйвер должен сбросить дамп содержания запроса, посланного в сервер, в сообщении для SQLExceptions?

Значение по умолчанию: false.

Начиная с версии: 3.1.3.

exceptionInterceptors

Разграниченный запятой список классов, реализующих com.mysql.cj.exceptions.ExceptionInterceptor. Эти классы будут создавать по одному экземпляру для каждого подключения, всем SQLExceptions, брошенным драйвером, позволят быть перехваченным этими перехватчиками цепочечным способом с первым классом, перечисленным как начало цепи.

Начиная с версии: 5.1.8.

ignoreNonTxTables

Проигнорировать нетранзакционное предупреждение таблицы для отмены?

Значение по умолчанию: false.

Начиная с версии: 3.0.9.

includeInnodbStatusInDeadlockExceptions

Включать вывод "SHOW ENGINE INNODB STATUS" в сообщениях об исключениях, когда исключения мертвой блокировки будут обнаружены?

Значение по умолчанию: false.

Начиная с версии: 5.0.7.

includeThreadDumpInDeadlockExceptions

Включать текущий дамп потока Java в сообщения об исключениях, когда исключения мертвой блокировки будут обнаружены?

Значение по умолчанию: false.

Начиная с версии: 5.1.15.

includeThreadNamesAsStatementComment

Включать название текущего потока как комментарий, видимый в "SHOW PROCESSLIST", или в дампах мертвой блокировки Innodb, полезных в корреляции с "includeInnodbStatusInDeadlockExceptions=true" и "includeThreadDumpInDeadlockExceptions=true".

Значение по умолчанию: false.

Начиная с версии: 5.1.15.

useOnlyServerErrorMessages

Не транслировать 'стандартные' сообщения об ошибках SQLState к сообщениям об ошибках, возвращенным сервером.

Значение по умолчанию: true.

Начиная с версии: 3.0.15.

Настройки для интеграции с другими продуктами.

Свойства и описания

overrideSupportsIntegrityEnhancementFacility

Драйвер должен возвратить "true" для DatabaseMetaData.supportsIntegrityEnhancementFacility() даже если база данных не поддерживает его, приложениям, которые требуют, чтобы этот метод возвратил "true", чтобы сигнализировать о поддержке внешних ключей, даже при том, что спецификация SQL указывает, что это средство содержит намного больше, чем просто поддержка внешнего ключа (одно такое приложение это OpenOffice)?

Значение по умолчанию: false.

Начиная с версии: 3.1.12.

ultraDevHack

Создать PreparedStatements для prepareCall() при необходимости, потому что UltraDev поврежден и выпускает prepareCall() для ВСЕХ запросов?

Значение по умолчанию: false.

Начиная с версии: 2.0.3.

Совместимость с JDBC.

Свойства и описания

useColumnNamesInFindColumn

До JDBC-4.0 спецификации JDBC связывали ошибку с тем, что могло быть дано как "column name" в методах ResultSet (вроде findColumn()) или получателях, которые взяли свойство String. JDBC-4.0 разъяснил "column name" как метку в пункте "AS", возвращаемую ResultSetMetaData.getColumnLabel(), или имя столбца, если нет AS. Установка этого значения в "true" даст поведение, которое является подходящим JDBC-3.0 и более ранним версиям спецификации JDBC, но которое из-за ошибки спецификации могло дать неожиданные результаты. Это свойство предпочтительнее "useOldAliasMetadataBehavior", если вам не нужно определенное поведение, которое это обеспечивает относительно ResultSetMetadata.

Значение по умолчанию: false.

Начиная с версии: 5.1.7.

pedantic

Следовать спецификацией символов JDBC.

Значение по умолчанию: false.

Начиная с версии: 3.0.0.

useOldAliasMetadataBehavior

Драйвер должен использовать устаревшее поведение для "AS" на столбцах и таблицах и возвратить только псевдонимы (если таковые имеются) для ResultSetMetaData.getColumnName() или ResultSetMetaData.getTableName(), а не первоначальный столбец/имя таблицы? В 5.0.x значение по умолчанию было true.

Значение по умолчанию: false.

Начиная с версии: 5.0.4.

X Protocol и X DevAPI.

Свойства и описания

xdevapi.asyncResponseTimeout

Перерыв (в секундах) для получения ответа сервера с помощью X Protocol.

Значение по умолчанию: 300.

Начиная с версии: 8.0.7.

xdevapi.auth

Механизм аутентификации, чтобы использовать с X Protocol. Позволенные значения: "SHA256_MEMORY", "MYSQL41", "PLAIN" и "EXTERNAL". Значение нечувствительно к регистру. Если свойство не установлено, механизм выбран в зависимости от типа подключения: "PLAIN" используется для связей TLS, "SHA256_MEMORY" или "MYSQL41" используется для незашифрованных связей.

Значение по умолчанию: PLAIN.

Начиная с версии: 8.0.8.

xdevapi.connect-timeout

X DevAPI тайм-аут для сокетного соединения (в миллисекундах), '0' = без тайм-аута. По умолчанию '10000'. Если не задан явно "xdevapi.connect-timeout" и задан явно "connectTimeout", "xdevapi.connect-timeout" принимает значение из "connectTimeout". Если "xdevapi.useAsyncProtocol=true", проигнорированы "xdevapi.connect-timeout" и "connectTimeout".

Значение по умолчанию: 10000.

Начиная с версии: 8.0.13.

xdevapi.connection-attributes

Разграниченный запятой список определенных пользователями пар key=value (в дополнение к стандартным определенным X Protocol парам key=value), чтобы передать MySQL Server для показа как параметры связи в таблицах PERFORMANCE_SCHEMA tables session_account_connect_attrs и session_connect_attrs. Например: xdevapi.connection-attributes=key1=value1,key2=value2 или xdevapi.connection-attributes=[key1=value1,key2=value2]. Эта функциональность доступна для использования только с MySQL Server 8.0.16 или позже. Более ранние версии X-протокола не поддерживают признаки связи, заставляя этот параметр конфигурации быть проигнорированными. Для ситуаций, где скорость создания/инициализации сессии очень важна, установка xdevapi.connection-attributes=false заставит обойти обработку признака связи.

Начиная с версии: 8.0.16.

xdevapi.dns-srv

Опция для инструктирования драйвера использовать данное имя хоста для поиска записи DNS SRV и использовать получающийся список хостов в связи отказоустойчивости мультихоста. Обратите внимание на то, что единственное имя хоста без порта должно быть обеспечено, когда это включено.

Значение по умолчанию: false.

Начиная с версии: 8.0.19.

xdevapi.ssl-mode

Режим SSL. Если не определен, применияется "sslMode". Поскольку "PREFERRED" не применим к X-протоколу, если "xdevapi.ssl-mode" не установлено, а "sslMode" = "PREFERRED", "xdevapi.ssl-mode" = "REQUIRED".

Значение по умолчанию: REQUIRED.

Начиная с версии: 8.0.7.

xdevapi.ssl-truststore

URL к базе ключей сертификатов CA, которой доверяют. Если не определено, используется значение trustCertificateKeyStoreUrl.

Начиная с версии: 6.0.6.

xdevapi.ssl-truststore-password

Пароль для базы ключей сертификатов CA, которой доверяют. Если не определено, используется значение trustCertificateKeyStorePassword.

Начиная с версии: 6.0.6.

xdevapi.ssl-truststore-type

Тип базы ключей сертификатов CA, которой доверяют. Если не определено, используется значение trustCertificateKeyStoreType.

Значение по умолчанию: JKS.

Начиная с версии: 6.0.6.

xdevapi.tls-ciphersuites

Значения шифров для использования на сокетах SSL. Если не определено, используется значение enabledSSLCipherSuites.

Начиная с версии: 8.0.19.

xdevapi.tls-versions

Значения, перекрывающие протоколы TLS для использования на сокетах SSL. Если не определено, используется значение enabledTLSProtocols.

Начиная с версии: 8.0.19.

xdevapi.useAsyncProtocol

Используйте асинхронный вариант X Protocol.

Значение по умолчанию: false.

Начиная с версии: 6.0.0.

6.4. Примечания о реализации JDBC API

MySQL Connector/J как строгое внедрение JDBC API, проходит все тесты в общедоступной версии набора тестов на соблюдение Oracle's JDBC. Спецификация JDBC гибка в том, как определенная функциональность должна быть осуществлена. Эта секция сообщает подробности на уровне интерфейса о решениях реализации, которые могли бы затронуть, как вы кодируете запросы с MySQL Connector/J.

  • BLOB

    Можно подражать BLOB с локаторами, добавляя свойство emulateLocators=true к JDBC URL. Используя этот метод, драйвер задержит загрузку фактических данных BLOB, пока вы не будете получать другие данные и затем будете использовать методы поиска (getInputStream(), getBytes() и т.д.) на потоке данных BLOB.

    Необходимо использовать псевдоним столбца со значением столбца к подлинному имени BLOB, например:

    SELECT id, 'data' as blob_data from blobtable
    

    Необходимо также следовать этим правилам:

    • SELECT должен сослаться только на одну таблицу. У таблицы должен быть primary key.

    • SELECT должен применить псевдоним оригинального имени столбца BLOB, определенного как строка, к альтернативному названию.

    • SELECT должен покрыть все столбцы, которые составляют первичный ключ.

    Внедрение BLOB не позволяет оперативную модификацию (это копии, как сообщает метод DatabaseMetaData.locatorsUpdateCopies()). Из-за этого используйте соответствующий PreparedStatement.setBlob() или ResultSet.updateBlob() (в случае обновляемых наборов результатов), чтобы сохранить изменения в базе данных.

  • Связь

    Метод isClosed() не пингует сервер, чтобы определить, доступен ли он. В соответствии со спецификацией JDBC, он вернет true только если closed() был вызван на связи. Если необходимо определить, действительна ли связь, выпустите простой запрос, такой как SELECT 1. Драйвер бросит исключение, если связь больше не действительна.

  • DatabaseMetaData

    Информация Foreign key (getImportedKeys() /getExportedKeys() и getCrossReference()) доступна только из таблиц InnoDB. Драйвер применяет SHOW CREATE TABLE, чтобы получить эту информацию, поэтому если какие-либо другие механизмы хранения добавляют поддержку внешних ключей, драйвер прозрачно поддержал бы их тоже.

  • PreparedStatement

    Два варианта подготовленных запросов осуществляются Connector/J, клиентская и серверная сторона. Клиентские подготовленные запросы используются по умолчанию, потому что ранние версии MySQL не поддерживали функцию подготовленных запросов или имели проблемы с ее внедрением. Запросы на сервере и кодированные двоично наборы результатов используются, когда сервер поддерживает их. Чтобы позволить использование серверной стороны подготовленных запросов, установите useServerPrepStmts=true.

    Будьте осторожны с использованием серверной стороны запросов с параметрами large, которые устанавливаются, используя setBinaryStream(), setAsciiStream(), setUnicodeStream(), setCharacterStream(), setNCharacterStream(), setBlob(), setClob() или setNCLob(). Чтобы повторно выполнить запрос с любым большим параметром, измененным на небольшой параметр, вызовите clearParameters() и заново установите все параметры. Причины этого следующие:

    • Во время клиентской эмуляции и работы серверных запросов большие данные переданы только когда вызван PreparedStatement.execute().

    • Как только это было сделано, поток, используемый, чтобы прочитать данные на клиентской стороне, закрывается (согласно JDBC spec) и не может быть прочитан снова.

    • Если параметр изменяется от большого до небольшого, драйвер должен перезагрузить состояние серверной стороны подготовленного запроса, чтобы позволить параметру, который изменяется, занять место предшествующего большого значения. Это удаляет все большие данные, которые уже послали в сервер, таким образом требуя, чтобы данные были посланы заново, используя метод setBinaryStream(), setAsciiStream(), setUnicodeStream(), setCharacterStream(), setNCharacterStream(), setBlob(), setClob() или setNCLob().

    Следовательно, чтобы изменить тип параметра к небольшому, необходимо вызвать clearParameters() и переустановить все параметры подготовленного запросы снова, прежде чем это сможет быть повторно выполнено.

  • ResultSet

    По умолчанию ResultSets полностью получены и сохранены в памяти. В большинстве случаев это самый эффективный способ работать и из-за дизайна протокола сети MySQL его легче осуществить. Если вы работаете с ResultSets, которые имеют большое количество строк или больших значений и не могут выделить пространство "кучи" в вашем JVM для требуемой памяти, можно сказать велеть драйверу передать результаты построчно.

    Чтобы позволить эту функциональность, создайте экземпляр Statement примерно так:

    stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
                                java.sql.ResultSet.CONCUR_READ_ONLY);
    stmt.setFetchSize(Integer.MIN_VALUE);
    

    Комбинация набора результатов только для чтения, только для пересылки и с размером получения Integer.MIN_VALUE служит сигналом драйверу передавать набор результатов потоком построчно. После этого любые наборы результатов, созданные запросом, будут получены построчно.

    Есть некоторые проблемы с этим подходом. Необходимо прочитать все строки в наборе результатов (или закрыть его), прежде чем можно будет выпустить любые другие запросы на связи, или исключение будет брошено.

    Если запрос в объеме транзакции, то блокировки выпущены, когда транзакция заканчивается (это подразумевает, что запрос должен закончиться сначала). Как с большинством других баз данных, запросы не полны, пока все ожидаемые результаты запроса не прочитаны, или активный набор результатов для запроса не закрывается.

    Поэтому, используя текущие результаты, обработайте их как можно быстрее, если вы хотите поддержать параллельный доступ к таблицам, на которые ссылается запрос, производящий набор результатов.

    Другая альтернатива должна использовать основанный на курсоре поток, чтобы получить количество строк каждый раз. Это может быть сделано, установив свойство связи useCursorFetch = true, а затем вызвав setFetchSize(int) с int будучи желаемым количеством строк, которые будут возвращены каждый раз:

    conn = DriverManager.getConnection("jdbc:mysql://localhost/?useCursorFetch=true", "user", "s3cr3t");
    stmt = conn.createStatement();
    stmt.setFetchSize(100);
    rs = stmt.executeQuery("SELECT * FROM your_table_here");
    
  • Запросы

    Connector/J включает поддержку Statement.cancel() и Statement.setQueryTimeout(). Оба требуют, чтобы отдельная связь создала команду KILL QUERY. В случае setQueryTimeout() реализация создает дополнительный поток, чтобы обращаться с функциональностью тайм-аута.

    Отказ отменить запрос для setQueryTimeout() может проявиться как RuntimeException вместо того, чтобы терпеть неудачу тихо, так как в настоящее время нет никакого способа открыть поток, который выполняет запрос, отменяемый из-за истечения тайм-аута и бросить из него исключение вместо этого.

    MySQL не поддерживает курсоры SQL, и драйвер JDBC не подражает им, таким образом, setCursorName() не имеет никакого эффекта.

    Connector/J также поставляет два дополнительных метода:

    • setLocalInfileInputStream() устанавливает экземпляр InputStream, который будет использоваться, чтобы послать данные в сервер MySQL для LOAD DATA LOCAL INFILE вместо FileInputStream или URLInputStream, который представляет путь, данный как аргумент запроса.

      Этот поток будет прочитан после выполнения a LOAD DATA LOCAL INFILE и будет автоматически закрыт драйвером, таким образом, он должен быть перезагружен перед каждым вызовом execute*(), что заставило бы сервер MySQL запрашивать данные, чтобы обработать запрос для LOAD DATA LOCAL INFILE.

      Если это значение установлено к NULL, драйвер вернется к использованию FileInputStream или URLInputStream как требуется.

    • getLocalInfileInputStream() вернет экземпляр InputStream, который будет использоваться, чтобы послать данные в ответ на LOAD DATA LOCAL INFILE.

      Этот метод вернет NULL, если никакой такой поток не был установлен, используя setLocalInfileInputStream().

6.5. Java, JDBC и типы MySQL

В целом любой тип данных MySQL может быть преобразован в java.lang.String и любой числовой тип может быть преобразован в любые числовые типы Java, хотя округление, переполнение или потеря точности могут произойти.

Все типы TEXT вернут Types.LONGVARCHAR с различными значениями getPrecision() (65535, 255, 16777215 и 2147483647), причем getColumnType() вернет -1. Это поведение намеренное даже при том, что TINYTEXT не падает из-за размера в категории LONGVARCHAR. Это должно избежать различной обработки в том же самом базовом типе. getColumnType() вернет -1 потому что внутренняя обработка сервера имеет тип TEXT, который подобен BLOB.

Также отметьте, что getColumnTypeName() вернет VARCHAR даже при том, что getColumnType() вернет Types.LONGVARCHAR, потому что VARCHAR определяемое собственное имя столбца базы данных для этого типа.

Connector/J выпускает предупреждения или бросает исключения DataTruncation, как требуется спецификацией JDBC, если связь не формировалась, чтобы не делать так при помощи значения jdbcCompliantTruncation, установив его в false.

Преобразования, которые, как всегда гарантируют, будут работать, перечисляются в следующей таблице. Первые столбец перечисляет один или несколько типов данных MySQL и второй столбец перечисляет один или несколько типов Java, в которые могут быть преобразованы типы MySQL.

Таблица 6.1. Возможные преобразования между типами данных MySQL и Java

CHAR, VARCHAR, BLOB, TEXT, ENUM, and SET java.lang.String, java.io.InputStream, java.io.Reader, java.sql.Blob, java.sql.Clob
FLOAT, REAL, DOUBLE PRECISION, NUMERIC, DECIMAL, TINYINT, SMALLINT, MEDIUMINT, INTEGER, BIGINT java.lang.String, java.lang.Short, java.lang.Integer, java.lang.Long, java.lang.Double, java.math.BigDecimal
DATE, TIME, DATETIME, TIMESTAMP java.lang.String, java.sql.Date, java.sql.Timestamp

Округление, переполнение или потеря точности могут произойти, если вы выбираете Java-тип числовых данных, у которого есть меньшая точность, чем тип данных MySQL, в который вы преобразовываете.

Метод ResultSet.getObject() использует преобразования типов между типами MySQL и Явы, следуя спецификации JDBC в соответствующих случаях. Значения, возвращенные ResultSetMetaData.GetColumnTypeName() и ResultSetMetaData.GetColumnClassName(), показаны в приведенной ниже таблице. Для получения дополнительной информации о типах JDBC посмотрите ссылку на класс java.sql.Types.

Таблица 6.2. Типы MySQL и возвращаемые значения для ResultSetMetaData.GetColumnTypeName() и ResultSetMetaData.GetColumnClassName()

Имя типа MySQL Возвращаемое значение GetColumnTypeName Возвращаемое значение GetColumnClassName
BIT(1) BIT java.lang.Boolean
BIT(> 1) BIT byte[]
TINYINT TINYINT java.lang.Boolean, если свойство конфигурации tinyInt1isBit установлено в true (по умолчанию) и размер ресурса хранения равняется 1 или java.lang.Integer, если нет.
BOOL, BOOLEAN TINYINT См. TINYINT выше, поскольку это в настоящее время псевдонимы для TINYINT(1)
SMALLINT[(M)] [UNSIGNED] SMALLINT [UNSIGNED] java.lang.Integer (независимо от того, является ли это UNSIGNED или нет)
MEDIUMINT[(M)] [UNSIGNED] MEDIUMINT [UNSIGNED] java.lang.Integer (независимо от того, является ли это UNSIGNED или нет)
INT,INTEGER[(M)] [UNSIGNED] INTEGER [UNSIGNED] java.lang.Integer, если UNSIGNED java.lang.Long
BIGINT[(M)] [UNSIGNED] BIGINT [UNSIGNED] java.lang.Long, если UNSIGNED java.math.BigInteger
FLOAT[(M,D)] FLOAT java.lang.Float
DOUBLE[(M,B)] DOUBLE java.lang.Double
DECIMAL[(M[,D])] DECIMAL java.math.BigDecimal
DATE DATE java.sql.Date
DATETIME DATETIME java.sql.Timestamp
TIMESTAMP[(M)] TIMESTAMP java.sql.Timestamp
TIME TIME java.sql.Time
YEAR[(2|4)] YEAR Если свойство конфигурации yearIsDateType установлено в false, тогда тип возвращенного объекта java.sql.Short. Если установлено в true (по умолчанию), тогда возвращенный объект имеет тип java.sql.Date с установкой даты 1 января в полночь
CHAR(M) CHAR java.lang.String (если набор символов для столбца не BINARY, вернется byte[])
VARCHAR(M) [BINARY] VARCHAR java.lang.String (если набор символов для столбца не BINARY, вернется byte[])
BINARY(M) BINARY byte[]
VARBINARY(M) VARBINARY byte[]
TINYBLOB TINYBLOB byte[]
TINYTEXT VARCHAR java.lang.String
BLOB BLOB byte[]
TEXT VARCHAR java.lang.String
MEDIUMBLOB MEDIUMBLOB byte[]
MEDIUMTEXT VARCHAR java.lang.String
LONGBLOB LONGBLOB byte[]
LONGTEXT VARCHAR java.lang.String
ENUM('value1','value2',...) CHAR java.lang.String
SET('value1','value2',...) CHAR java.lang.String

6.6. Использование наборов символов и Unicode

Все последовательности, посланные от драйвера JDBC серверу, преобразовываются автоматически из родной формы Java Unicode к кодировке символов клиента, включая все запросы, посланные, используя Statement.execute(), Statement.executeUpdate() и Statement.executeQuery(), а также все параметры PreparedStatement и CallableStatement, исключая использование параметров, установленных setBytes(), setBinaryStream(), setAsciiStream(), setUnicodeStream() и setBlob().

Количество кодировок для каждого подключения

Connector/J яподдерживает односимвольное кодирование между клиентом и сервером и любое количество кодировок символов для данных, возвращенных сервером клиенту в ResultSets.

Урегулирование кодировки символов

Кодировка символов между клиентом и сервером автоматически обнаружена после установления связи (при условии, что свойства связи Connector/J characterEncoding и connectionCollation не заданы). Вы определяете кодировку на сервере, используя системную переменную character_set_server (fдля получения дополнительной информации посмотрите Server Character Set and Collation). Драйвер автоматически использует кодировку, определенную сервером. Например, чтобы использовать 4-byte UTF-8 character set с Connector/J, формируйте сервер MySQL с character_set_server=utf8mb4, и уберите characterEncoding и connectionCollation из строки подключения Connector/J. Connector/J тогда опознает автоматически UTF-8.

Чтобы отвергнуть автоматически обнаруженную кодировку на клиентской стороне, используйте свойство characterEncoding в связи URL к серверу. Используйте имена стиля Java, определяя кодировки символов. В следующей таблице перечислены имена набора символов MySQL и их соответствующие имена в стиле Java:

Таблица 6.3. Соответствие имен кодировок MySQL и Java

ascii US-ASCII
big5 Big5
gbk GBK
sjis SJIS или Cp932
cp932 Cp932 или MS932
gb2312 EUC_CN
ujis EUC_JP
euckr EUC_KR
latin1 Cp1252
latin2 ISO8859_2
greek ISO8859_7
hebrew ISO8859_8
cp866 Cp866
tis620 TIS620
cp1250 Cp1250
cp1251 Cp1251
cp1257 Cp1257
macroman MacRoman
macce MacCentralEurope

Для 8.0.12 и раньше :utf8

Для 8.0.13 и позже: utf8mb4

UTF-8
ucs2 UnicodeBig

Для Connector/J 8.0.12 и ранее: Чтобы использовать набор символов utf8mb4 для связи, сервер ДОЛЖЕН БЫТЬ настроен с character_set_server=utf8mb4, если это не так, когда UTF-8 используется для characterEncoding в строке подключения это отображается к имени набора символов MySQL utf8, который является псевдонимом для utf8mb3.

Для Connector/J 8.0.13 и позже:

  • Когда UTF-8 используется для characterEncoding в строке подключения это отображается к имени набора символов MySQL utf8mb4.

  • Если опция связи connectionCollation также установлена с characterEncoding и несовместима с ней, characterEncoding будет отвергнута с соответствием кодировки connectionCollation.

  • Поскольку нет никакого названия набора символов стиля Java для utfmb3, который можно использовать с опцией связи charaterEncoding, единственный способ использовать utf8mb3 как ваш набор символов связи, это использовать сопоставление utf8mb3 (например, utf8_general_ci) для выбора связи connectionCollation, который принудительно вызывает набор символов utf8mb3, который будет использоваться.

Не делайте запрос SET NAMES с Connector/J, так как драйвер не обнаружит, что набор символов был изменен запросом и продолжит использовать набор символов, формируемый, когда связь была настроена.

6.7. Соединение безопасно, используя SSL

Connector/J может зашифровать все данные драйвером JDBC и сервером (за исключением начального рукопожатия) используя SSL. Есть потеря производительности для предоставления возможности шифрования связи, серьезность которой зависит от многих факторов включая (но не ограничивая) размер запроса, возвращенный объем данных, серверное оборудование, использовавшаяся библиотека SSL, сетевая пропускная способность и так далее.

Система работает через два файла Java keystore: один файл содержит информацию о сертификате для сервера (truststore в примерах ниже), другой содержит ключи и сертификат для клиента (keystore в примерах ниже). Все файлы Java keystore защищены паролем, поставляемым keytool, когда вы создали файлы. Вам нужны имена файлов и связанные пароли, чтобы создать связь SSL.

Для работы с SSL у вас должно быть следующее:

  • Сервер MySQL, который поддерживает SSL, собранный и формируемый, чтобы нормально работать с SSL. Для получения дополнительной информации посмотрите Using Encrypted Connections и Configuring SSL Library Support.

  • Подписанный сертификат клиента, если используется mutual (two-way) authentication.

По умолчанию Connector/J устанавливает безопасные соединения с серверами MySQL. Обратите внимание на то, что серверы MySQL 5.7 и 8.0, когда собраны с OpenSSL, могут автоматически произвести файлы SSL при запуске и формировать связь SSL соответственно.

8.0.12 и раньше: пока сервер правильно формируется, чтобы использовать SSL, нет никакой потребности формировать что-либо на клиенте Connector/J, чтобы использовать зашифрованные связи (исключение: когда Connector/J соединяется с очень старыми версиями сервера, такими как 5.6.25 и ранее или 5.7.5 и ранее, в этом случае клиент должен установить свойство связи useSSL=true, чтобы использовать зашифрованные связи). Клиент может потребовать SSL, который будет использоваться, устанавливая свойство связи requireSSL=true, связь тогда прерывается, если сервер не формируется, чтобы использовать SSL. Без requireSSL=true связь просто отступает к незашифрованному способу, если сервер не формируется, чтобы использовать SSL.

8.0.13 и позже: пока сервер правильно формируется, чтобы использовать SSL, нет никакой потребности формировать что-либо на клиенте Connector/J, чтобы использовать зашифрованные связи. Клиент может потребовать SSL, который будет использоваться, устанавливая свойства связи sslMode=REQUIRED, VERIFY_CA или VERIFY_IDENTITY, связь тогда прерывается, если сервер не формируется, чтобы использовать SSL. С sslMode=PREFERRED связь просто отступает к незашифрованному способу, если сервер не формируется, чтобы использовать SSL. Для связей X-протокола, значение свойства xdevapi.ssl-mode определяет режим SSL, точно так же, как sslMode для связей MySQL-протокола (за исключением того, что PREFERRED не поддерживается X-протоколом), если не задано явно xdevapi.ssl-mode берет значение sslMode (если не задано xdevapi.ssl-mode, а sslMode=PREFERRED, xdevapi.ssl-mode=REQUIRED ).

Для дополнительной безопасности вы можете настроить клиент для односторонней (сервер или клиент) или двухсторонней (сервер и клиент) аутентификация SSL, позволяя клиенту или серверу подтверждать подлинность идентичности друг друга.

Версии TLS: допустимые версии протокола TLS могут быть ограничены, используя свойства связи enabledTLSProtocols и для X DevAPI (только для выпуска 8.0.19 и позже) xdevapi.tls-versions (когда xdevapi.tls-versions не задано, берется значение enabledTLSProtocols). Если никакие ограничения не были определены, Connector/J пытается соединиться с сервером со следующими версиями TLS:

  • TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 для MySQL Community Server 8.0, 5.7.28 и выше, 5.6.46 и выше и всех коммерческих версий MySQL Server.

  • TLSv1,TLSv1.1 для всех других версий MySQL Server.

Connector/J 8.0.18 и ранее соединяясь с MySQL Community Server 5.6 и 5.7 используют JDBC API: из-за проблем совместимости с MySQL Server, собранным с yaSSL, Connector/J не позволяет связи с TLSv1.2 и выше по умолчанию. Соединяясь с серверами, которые ограничивают связи, чтобы использовать поздние версии TLS, позвольте им явно, установив свойство связи Connector/J enabledTLSProtocols (например, установив enabledTLSProtocols=TLSv1,TLSv1.1,TLSv1.2).

Наборы шифров: С версии 8.0.19 шифры, применимые Connector/J, предварительно ограничиваются файлом, который может быть найден в src/main/resources/com/mysql/cj/TlsSettings.properties в каталоге src на исходном дереве или в независимом от платформы архиве (формат .tar.gz или .zip) для Connector/J. Файл содержит четыре секции, перечисляющие в каждой обязательные, одобренные, устаревшие и недопустимые шифры. Только шифры, перечисленные в первых трех секциях, могут использоваться. Последняя (недопустимая) секция определяет образцы или маски, которые помещают в черный список небезопасные шифры. Практически, с белым списком, уже данным в первых трех секциях, образцы черного списка избыточны, но они там как дополнительная гарантия против нежелательных шифров. Белый список и черный список относятся к JDBC и к связям X DevAPI.

Допустимые шифры для связей SSL могут быть ограничены, используя свойства связи enabledSSLCipherSuites и для X DevAPI (для выпуска 8.0.19 и позже) xdevapi.tls-ciphersuites (если xdevapi.tls-ciphersuites не задан, это принимает значение enabledSSLCipherSuites). Если никакие такие ограничения не были определены, Connector/J пытается установить связи SSL с любыми шифрами в белом списке, которые принимает сервер.

Подготовка аутентификации сервера

8.0.12 и ранее: Аутентификация сервера через проверку сертификата сервера позволена, когда свойства связи Connector/J useSSL И verifyServerCertificate = true вместе. Проверка имени хоста не поддерживается: идентификация хоста только сертификатами.

8.0.13 и позже: Аутентификация сервера через проверку сертификата сервера позволена, когда свойство связи Connector/J sslMode = VERIFY_CA или VERIFY_IDENTITY. Если не задано sslMode, аутентификация сервера через проверку сертификата сервера позволена, когда устаревшие свойства useSSL И verifyServerCertificate = true вместе.

Сертификаты, подписанные доверяемым CA. Когда аутентификация сервера через проверку сертификата сервера позволена, если никакие дополнительные конфигурации не сделаны относительно аутентификации сервера, Java проверяет сертификат сервера, используя его по умолчанию доверенный сертификат CA обычно из $JAVA_HOME/lib/security/cacerts.

Использование самоподписанных сертификатов. Сертификатам сервера MySQL довольно свойственно быть самоподписанными или подписанными самоподписанным сертификатом CA, сгенерированные сертификаты и ключи, созданные сервером MySQL, основаны на последнем то есть, сервер производит все необходимые ключи и самоподписанный сертификат CA, который используется, чтобы подписать сертификаты сервера и клиента. Сервер тогда настраивается, чтобы использовать сертификат CA и сертификат сервера. Хотя файл сертификата клиента помещается в тот же самый каталог, он не используется сервером.

Чтобы проверить сертификат сервера, Connector/J должен быть в состоянии прочитать сертификат, который подписал его, то есть, сертификат сервера, который подписал или самоподписанный сертификат CA. Это может быть достигнуто любым импортированием сертификата (ca.pem или любой другой сертификат) в базу Java доверенных сертификатов по умолчанию (хотя вмешиваться в базу доверенных сертификатов по умолчанию не рекомендуется) или импортируя его в файл базы Java доверенных сертификатов и формируя драйвер Connector/J соответственно. Используйте Java keytool (как правило, расположенный в подкаталоге bin вашего JDK или JRE), чтобы импортировать сертификата сервера:

shell> keytool -importcert -alias MySQLCACert -file ca.pem \
                  -keystore truststore -storepass mypassword

Поставляйте надлежащие аргументы команды. Если файл базы доверенных сертификатов еще существует, новый будет создан, иначе сертификат будет добавлен к существующему файлу. Взаимодействие с keytool похоже на это:

Owner: CN=MySQL_Server_5.7.17_Auto_Generated_CA_Certificate
Issuer: CN=MySQL_Server_5.7.17_Auto_Generated_CA_Certificate
Serial number: 1
Valid from: Thu Feb 16 11:42:43 EST 2017 until: Sun Feb 14 11:42:43 EST 2027
Certificate fingerprints:
  MD5:18:87:97:37:EA:CB:0B:5A:24:AB:27:76:45:A4:78:C1
  SHA1: 2B:0D:D9:69:2C:99:BF:1E:2A:25:4E:8D:2D:38:B8:70:66:47:FA:ED
  SHA256: C3:29:67:1B:E5:37:06:F7:A9:93:DF:C7:B3:27:5E:09:C7:FD:EE:2D:18:86:F4:9C:40:D8:26:CB:DA:95:A0:24
Signature algorithm name: SHA256 with RSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 1
Trust this certificate? [no]:yes
Certificate was added to keystore

Вывод команды показывает все детали об импортированном сертификатов. Удостоверьтесь, что вы помните пароль, который вы задали. Кроме того, обратите внимание, что пароль должен будет быть написан как простой текст в вашем конфигурационном файле Connector/J или исходном коде приложения.

Следующий шаг должен формировать Java или Connector/J, чтобы прочитать базу доверенных сертификатов, которую вы просто создали или изменили. Это может быть сделано при помощи одного из следующих трех методов:

  • Используя параметры командной строки Java:

    -Djavax.net.ssl.trustStore=path_to_truststore_file
    -Djavax.net.ssl.trustStorePassword=mypassword
    
  • Указание системных свойств непосредственно в коде клиента:

    System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
    System.setProperty("javax.net.ssl.trustStorePassword","mypassword");
    
  • Определение нужных свойств связи Connector/J:

    clientCertificateKeyStoreUrl=file:path_to_truststore_file
    clientCertificateKeyStorePassword=mypassword
    

Заметьте, что когда используются вместе, свойства связи отвергают значения, установленные другими двумя методами. Кроме того, значения свойств связи используются только в той связи в то время, как указание значений в масштабе всей системы используется для всех связей (если не отвергнуто свойствами связи).

С вышеупомянутой установкой и позволенной аутентификацией сервера все установленные связи будут SSL-зашифрованными с сервером, заверяемым в процессе рукопожатия SSL, клиент может теперь безопасно доверять серверу, с которым это соединяется.

Для X-Protocol свойства связи xdevapi.ssl-truststore, xdevapi.ssl-truststore-type и xdevapi.ssl-truststore-password определяют параметры настройки базы доверенных сертификатов, точно так же, как trustCertificateKeyStoreUrl, trustCertificateKeyStoreType и trustCertificateKeyStorePassword связей MySQL-протокола, если не заданы явно xdevapi.ssl-truststore, xdevapi.ssl-truststore-type и xdevapi.ssl-truststore-password берут значения trustCertificateKeyStoreUrl, trustCertificateKeyStoreType и trustCertificateKeyStorePassword.

Сервисная проверка идентичности. 8.0.13 и позже: Вне аутентификации сервера через проверку сертификата сервера, когда sslMode = VERIFY_IDENTITY, Connector/J также выполняет проверку идентичности имени хоста, проверяя имя хоста, которое использует для соединения, на совпадение со значением Common Name в сертификате сервера.

Подготовка аутентификации клиента

Сервер может хотеть подтвердить подлинность клиента и потребовать, чтобы клиент предоставил сертификат SSL ему, который он проверяет по известным центрам сертификации или выполняет дополнительные проверки на личность клиента в случае необходимости (см. CREATE USER SSL/TLS Options). В этом случае у Connector/J должен быть доступ к сертификату клиента, таким образом, это можно послать в сервер, устанавливая новые соединения с базой данных. Это сделано, используя файлы Java keystore.

Чтобы позволить аутентификацию клиента, у клиента, соединяющегося с сервером, должен быть его собственный набор ключей и сертификат SSL. Сертификат клиента должен быть подписан так, чтобы сервер мог проверить его. В то время как можно подписать сертификат клиента в официальных центрах сертификации, более распространено использование промежуточных, частных, сертификатов CA, чтобы подписать сертификат клиента. Такой промежуточный сертификат CA может быть самоподписан или подписан доверенным корневым CA. Требование в том, что сервер знает сертификат CA, который способен к утверждению сертификата клиента.

Некоторые серверы MySQL в состоянии произвести ключи SSL и сертификаты для коммуникационного шифрования, включая сертификат и закрытый ключ (содержавшийся в файлах client-cert.pem и client-key.pem), который может использоваться любым клиентом. Этот сертификат SSL уже подписан самоподписанным сертификатом CA ca.pem, который сервер, возможно, уже настроил, чтобы использовать.

Если вы не хотите использовать ключи клиента и файлы сертификата, произведенные сервером, можно также произвести новые, используя процедуры, описанные в Creating SSL and RSA Certificates and Keys. Заметьте, что, согласно установке сервера, вам, вероятно, придется снова использовать уже существующий сертификат CA, с которым сервер настроен для работы, чтобы подписать новый сертификат клиента, вместо того, чтобы создать новый.

Как только у вас есть закрытый ключ клиента и файлы сертификата, которые вы хотите использовать, необходимо импортировать их в Java keystore так, чтобы они могли использоваться библиотекой Java SSL и Connector/J. Следующие инструкции объясняют, как создать файл keystore:

  • Преобразуйте ключ клиента и файлы сертификата в архив PKCS #12:

    shell> openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem \
                      -name "mysqlclient" -passout pass:mypassword \
                      -out client-keystore.p12
    
  • Импортируйте ключ клиента и сертификат в Java keystore:

    shell> keytool -importkeystore -srckeystore client-keystore.p12 \
                      -srcstoretype pkcs12 -srcstorepass mypassword \
                      -destkeystore keystore -deststoretype JKS \
                      -deststorepass mypassword
    

    Поставляйте надлежащие аргументы команды. Если файла keystore нет, новый будет создан, иначе сертификат будет добавлен к существующему файлу. Вывод keytool примерно такой:

    Entry for alias mysqlclient successfully imported.
    Import command completed: 1 entries successfully imported,
                              0 entries failed or cancelled
    

    Удостоверьтесь, что вы помните пароль, который вы выбрали. Кроме того, обратите внимание, что пароль должен будет быть написан как простой текст в вашем конфигурационном файле Connector/J или исходном коде приложения.

После этого шага можно удалить архив PKCS #12 (client-keystore.p12 в этом примере).

Следующий шаг должен формировать Java или Connector/J, чтобы это прочитало базу доверенных сертификатов, которую вы просто создали или изменили. Это может быть сделано при помощи одного из следующих трех методов:

  • Используя параметры командной строки Java:

    -Djavax.net.ssl.keyStore=path_to_keystore_file
    -Djavax.net.ssl.keyStorePassword=mypassword
    
  • Установкой системных свойств непосредственно в коде клиента:

    System.setProperty("javax.net.ssl.keyStore","path_to_keystore_file");
    System.setProperty("javax.net.ssl.keyStorePassword","mypassword");
    
  • Через свойства связи Connector/J:

    clientCertificateKeyStoreUrl=file:path_to_truststore_file
    clientCertificateKeyStorePassword=mypassword
    

Заметьте, что, когда используется вместе, свойства связи отвергают значения, установленные другими двумя методами. Кроме того, значения, установленные свойствами связи используются только в этой связи в то время, как значения в масштабе всей системы используются для всех связей (если не отвергнуты свойствами связи).

С вышеупомянутыми установками все установленные связи будут SSL-зашифрованными с клиентом, заверяемым в процессе рукопожатия SSL, сервер может теперь безопасно доверять клиенту, который просит связь с ним.

Подготовка двухсторонней идентификации

Примените шаги, обрисованные в общих чертах здесь и здесь, чтобы настроить взаимный процесс двусторонней аутентификации, в котором сервер и клиент подтверждают подлинность друг друга прежде, чем установить связь.

Хотя типичная установка применяет тот же самый сертификат CA на обоих концоах для взаимной аутентификации, это не должно иметь место. Единственное требование: сертификат CA, формируемый в сервере, должен быть в состоянии утвердить сертификат клиента, а сертификат CA, импортированный в базу доверенных сертификатов клиента, должен быть в состоянии утвердить сертификат сервера, два сертификата CA, используемые на двух концах, могут быть различными.

Отладка связи SSL

JSSE предоставляет отладочную информацию через stdout, когда вы устанавливаете системное свойство -Djavax.net.debug=all. Java говорит вам, какой keystores и базы доверенных сертификатов используются, а также что происходит во время рукопожатия SSL и обмена сертификатами. Это будет полезно, когда вы попытаетесь отладить неудавшуюся связь SSL.

6.8. Связь через сокеты Unix

Connector/J не поддерживает связи с MySQL Server через сокеты Unix. Однако есть способ для того, чтобы пользоваться сторонними библиотеками, которые поставляют функцию через подключаемый модуль. Такой модуль должен осуществить интерфейс com.mysql.cj.protocol.SocketFactory или старый интерфейс com.mysql.jdbc.SocketFactory Connector/J. Следуйте за этими требованиями, когда вы будете использовать такой модуль для сокетов Unix:

  • MySQL Server должен формироваться с системной переменной --socket (для родных связей протокола, используя API JDBC) или --mysqlx-socket (для связей X Protocol, используя X DevAPI), которая должна содержать путь к файлу сокета Unix.

  • Полностью квалифицированное имя класса должно быть передано к Connector/J через свойство связи socketFactory. Например, с библиотекой junixsocket:

    socketFactory=org.newsclub.net.mysql.AFUNIXDatabaseSocketFactory
    

    Вы, возможно, также должны были бы передать другие параметры в модуль как свойства связи. Например, для библиотеки junixsocket обеспечьте путь к файлу сокеты свойством junixsocket.file:

    junixsocket.file=path_to_socket_file
    
  • Используя X Protocol, задайте свойство связи xdevapi.useAsyncProtocol=false (что является настройкой по умолчанию для Connector/J 8.0.12 и позже). Unix сокеты не поддерживается для асинхронных каналов. Когда xdevapi.useAsyncProtocol=true, socketFactory игнорируется.

Для X Protocol возможность использовать сокеты Unix доступна только для Connector/J 8.0.12 и позже.

6.9. Соединение используя именованные каналы

Для MySQL 8.0.14 и раньше, 5.7.25 и раньше и 5.6.43 и раньше, минимальные разрешения на именованных каналах даны клиентам, которые используют их, чтобы соединиться с сервером. Connector/J, однако, может использовать именованные каналы только когда предоставлен полный доступ на них. Сервер MySQL, с которым Connector/J хочет соединиться, должен быть запущен с системной переменной named_pipe_full_access_group, который определяет группу в Windows, содержащую пользователя, который выполняет клиентское приложение JVM (и таким образом Connector/J), см. описание для named_pipe_full_access_group .

Поддержка именованных каналов недоступна для связей X-протокола.

Connector/J также поддерживает доступ к MySQL, используя именованные каналы на платформах Windows с NamedPipeSocketFactory как доплнительный модуль. Если вы не используете namedPipePath, по умолчанию применяется '\\.\pipe\MySQL'. При использовании NamedPipeSocketFactory, имя хоста и значение номера порта в URL JDBC проигнорированы. Чтобы активировать эту опцию, установите свойство socketFactory:

socketFactory=com.mysql.cj.protocol.NamedPipeSocketFactory

Установите это свойство, а также путь именованного канала, со следующей связью URL:

jdbc:mysql:///test?socketFactory=com.mysql.cj.protocol.NamedPipeSocketFactory&namedPipePath=\\.\pipe\MySQL80

Чтобы создать ваши собственные модули сокетов, следуйте за примером кода в com.mysql.cj.protocol.NamedPipeSocketFactory или com.mysql.cj.protocol.StandardSocketFactory .

Дополнительный подход должен использовать следующие два свойства в связи URL для установления связей именованного канала на платформах Windows:

  • (protocol=pipe) для именованных каналов (значение по умолчанию для значения tcp).

  • (path= path_to_pipe) для пути именованных каналов. Значение по умолчанию для пути \\.\pipe\MySQL.

Форма address-equals или key-value спецификации хоста (см. здесь) значительно упрощает URL для связи именованного канала на Windows. Например, чтобы использовать именованный канал по умолчанию \\.\pipe\MySQL,:

jdbc:mysql://address=(protocol=pipe)/test

Чтобы использовать именованный канал \\.\pipe\MySQL80:

jdbc:mysql://address=(protocol=pipe)(path=\\.\pipe\MySQL80)/test

С (protocol=pipe) NamedPipeSocketFactory автоматически выбран.

Именованные каналы работают только соединяясь с сервером MySQL на той же самой физической машине, где работает драйвер JDBC. В простых тестах производительности доступ именованного канала на 30%-50% быстрее, чем стандартный доступ TCP/IP. Однако это варьируется в зависимости от системы, и именованные каналы медленнее, чем TCP/IP, во многих конфигурациях Windows.

6.10. Соединение используя идентификацию PAM

Java-приложения используя Connector/J могут соединиться с серверами MySQL, которые используют схему аутентификации pluggable authentication module (PAM).

Для идентификации PAM у вас должно быть следующее:

  • Сервер MySQL, который поддерживает идентификацию PAM. См. PAM Pluggable Authentication. Connector/J осуществляет тот же самый метод аутентификации открытого текста как в Client-Side Cleartext Pluggable Authentication.

  • SSL как объяснено в разделе 6.7. Поскольку схема аутентификации PAM посылает оригинальный пароль серверу, связь с сервером должна быть зашифрована.

Поддержка аутентификации PAM позволена по умолчанию в Connector/J 8.0, таким образом, никакая дополнительная конфигурация не необходима.

Чтобы отключить функцию аутентификации PAM, надо определить mysql_clear_password (метод) или com.mysql.cj.protocol.a.authentication.MysqlClearPasswordPlugin (имя класса) в списке разделенных запятой значений аргументов в опции связи disabledAuthenticationPlugins, см. раздел 6.3.

6.11. Использование репликации Master/Slave с ReplicationConnection

См. раздел 9.4.

6.12. Поддержка записей DNS SRV

Connector/J поддерживает использование записи DNS SRV для связей начиная с выпуска 8.0.19.

Если несколько экземпляров MySQL предоставляют ту же самую услугу для ваших запросов, DNS SRV записи может использоваться, чтобы обеспечить отказоустойчивость, выравнивание нагрузки и службы репликации. Они устраняют необходимость клиентов опознать каждый возможный хост в строке подключения или для связей, которые будут обработаны дополнительным компонентом программного обеспечения. Вот резюме для поддержки Connector/J DNS SRV:

  • Эти новые схемы в связи URL позволяют DNS SRV:

    • jdbc:mysql+srv: Для основной отказоустойчивости связей JDBC, которые используют записи DNS SRV.

    • jdbc:mysql+srv:loadbalance: Для выравнивания нагрузки связи JDBC, которые используют записи DNS SRV.

    • jdbc:mysql+srv:replication: Для связей репликации JDBC, которые используют записи DNS SRV.

    • mysqlx+srv: Для связей X DevAPI, которые используют записи DNS SRV.

  • Помимо использования новых схем в связи URL, поддержка DNS SRV быть включена или отключена использованием двух новых свойств связи, dnsSrv и xdevapi.dns-srv, для JDBC и X DevAPI, соответственно. Например, эта связь URL позволяет поддержку DNS SRV:

    mysqlx://johndoe:secret@_mysql._tcp.mycompany.local/db?xdevapi.dns-srv=true
    

    Однако используя схему DNS SRV со свойством связи = false будет ошибка, например:

    mysqlx+srv://johndoe:secret@_mysql._tcp.mycompany.local/db?xdevapi.dns-srv=false
    # The connection URL causes Connector/J to throw an error
    

Вот некоторые требования и ограничения на DNS SRV Connector/J:

  • Connection/J бросает исключение, если многие хосты определяются в связи URL для DNS SRV (за исключением настроенной репликации, создаваемой через jdbc:mysql+srv:replication, которая требует, чтобы были определены точно один мастер и один подчиненный сервер).

  • Connection/J бросает исключение, если номер порта определяется в связи URL для DNS SRV.

  • Записи DNS SRV поддерживаются только для связей TCP/IP. Connection/J бросает исключение, при попытке позволить DNS SRV на связи именованного канала Windows.

Поддержка DNS SRV для выравнивания нагрузки и Отказоустойчивости. Для выравнивания нагрузки и связей отказоустойчивости, Connector/J использует поле priority записей DNS SRV, чтобы выбрать приоритеты для попыток подключения для хостов.

DNS SRV для объединения связи. В установке объединения связи X DevAPI Connector/J повторно запрашивает записи DNS SRV регулярно и постепенно сокращают любые связи, хосты которых больше не появляются в записях, и повторно допускает связи в пул, когда их хосты вновь появляются в записях.

Поиск записей DNS SRV. Обязанность пользователей обеспечить имя хоста полного сервиса, Connector/J не добавляет префикс и не утверждает структуру имени хоста. Ниже приводятся примеры действительных сервисных образцов имени хоста:

  • foo.domain.local

  • _mysql._tcp.foo.domain.local

  • _mysqlx._tcp.foo.domain.local

  • _readonly._tcp.foo.domain.local

  • _readwrite._tcp.foo.domain.local

См. Connections Using DNS SRV Records в X DevAPI User Guide.

6.13. Отображение кодов ошибок MySQL к кодам JDBC SQLState

Приведенная ниже таблица обеспечивает отображение кодов ошибок MySQL к значениям JDBC SQLState.

Таблица 6.4. Отображение кодов ошибок MySQL к кодам JDBC SQLState

MySQL Error Number Имя ошибки в MySQL SQL Standard SQLState
1022ER_DUP_KEY23000
1037ER_OUTOFMEMORYHY001
1038ER_OUT_OF_SORTMEMORYHY001
1040ER_CON_COUNT_ERROR08004
1042ER_BAD_HOST_ERROR08S01
1043ER_HANDSHAKE_ERROR08S01
1044ER_DBACCESS_DENIED_ERROR42000
1045ER_ACCESS_DENIED_ERROR28000
1046ER_NO_DB_ERROR3D000
1047ER_UNKNOWN_COM_ERROR08S01
1048ER_BAD_NULL_ERROR23000
1049ER_BAD_DB_ERROR42000
1050ER_TABLE_EXISTS_ERROR42S01
1051ER_BAD_TABLE_ERROR42S02
1052ER_NON_UNIQ_ERROR23000
1053ER_SERVER_SHUTDOWN08S01
1054ER_BAD_FIELD_ERROR42S22
1055ER_WRONG_FIELD_WITH_GROUP42000
1056ER_WRONG_GROUP_FIELD42000
1057ER_WRONG_SUM_SELECT42000
1058ER_WRONG_VALUE_COUNT21S01
1059ER_TOO_LONG_IDENT42000
1060ER_DUP_FIELDNAME42S21
1061ER_DUP_KEYNAME42000
1062ER_DUP_ENTRY23000
1063ER_WRONG_FIELD_SPEC42000
1064ER_PARSE_ERROR42000
1065ER_EMPTY_QUERY42000
1066ER_NONUNIQ_TABLE42000
1067ER_INVALID_DEFAULT42000
1068ER_MULTIPLE_PRI_KEY42000
1069ER_TOO_MANY_KEYS42000
1070ER_TOO_MANY_KEY_PARTS42000
1071ER_TOO_LONG_KEY42000
1072ER_KEY_COLUMN_DOES_NOT_EXITS 42000
1073ER_BLOB_USED_AS_KEY42000
1074ER_TOO_BIG_FIELDLENGTH42000
1075ER_WRONG_AUTO_KEY42000
1080ER_FORCING_CLOSE08S01
1081ER_IPSOCK_ERROR08S01
1082ER_NO_SUCH_INDEX42S12
1083ER_WRONG_FIELD_TERMINATORS42000
1084ER_BLOBS_AND_NO_TERMINATED42000
1090ER_CANT_REMOVE_ALL_FIELDS42000
1091ER_CANT_DROP_FIELD_OR_KEY42000
1101ER_BLOB_CANT_HAVE_DEFAULT42000
1102ER_WRONG_DB_NAME42000
1103ER_WRONG_TABLE_NAME42000
1104ER_TOO_BIG_SELECT42000
1106ER_UNKNOWN_PROCEDURE42000
1107ER_WRONG_PARAMCOUNT_TO_PROCEDURE 42000
1109ER_UNKNOWN_TABLE42S02
1110ER_FIELD_SPECIFIED_TWICE42000
1112ER_UNSUPPORTED_EXTENSION42000
1113ER_TABLE_MUST_HAVE_COLUMNS42000
1115ER_UNKNOWN_CHARACTER_SET42000
1118ER_TOO_BIG_ROWSIZE42000
1120ER_WRONG_OUTER_JOIN42000
1121ER_NULL_COLUMN_IN_INDEX42000
1131ER_PASSWORD_ANONYMOUS_USER42000
1132ER_PASSWORD_NOT_ALLOWED42000
1133ER_PASSWORD_NO_MATCH42000
1136ER_WRONG_VALUE_COUNT_ON_ROW21S01
1138ER_INVALID_USE_OF_NULL22004
1139ER_REGEXP_ERROR42000
1140ER_MIX_OF_GROUP_FUNC_AND_FIELDS 42000
1141ER_NONEXISTING_GRANT42000
1142ER_TABLEACCESS_DENIED_ERROR42000
1143ER_COLUMNACCESS_DENIED_ERROR42000
1144ER_ILLEGAL_GRANT_FOR_TABLE42000
1145ER_GRANT_WRONG_HOST_OR_USER42000
1146ER_NO_SUCH_TABLE42S02
1147ER_NONEXISTING_TABLE_GRANT42000
1148ER_NOT_ALLOWED_COMMAND42000
1149ER_SYNTAX_ERROR42000
1152ER_ABORTING_CONNECTION08S01
1153ER_NET_PACKET_TOO_LARGE08S01
1154ER_NET_READ_ERROR_FROM_PIPE08S01
1155ER_NET_FCNTL_ERROR08S01
1156ER_NET_PACKETS_OUT_OF_ORDER 08S01
1157ER_NET_UNCOMPRESS_ERROR08S01
1158ER_NET_READ_ERROR08S01
1159ER_NET_READ_INTERRUPTED08S01
1160ER_NET_ERROR_ON_WRITE08S01
1161ER_NET_WRITE_INTERRUPTED08S01
1162ER_TOO_LONG_STRING42000
1163ER_TABLE_CANT_HANDLE_BLOB42000
1164ER_TABLE_CANT_HANDLE_AUTO_INCREMENT 42000
1166ER_WRONG_COLUMN_NAME42000
1167ER_WRONG_KEY_COLUMN42000
1169ER_DUP_UNIQUE23000
1170ER_BLOB_KEY_WITHOUT_LENGTH42000
1171ER_PRIMARY_CANT_HAVE_NULL42000
1172ER_TOO_MANY_ROWS42000
1173ER_REQUIRES_PRIMARY_KEY42000
1176ER_KEY_DOES_NOT_EXITS42000
1177ER_CHECK_NO_SUCH_TABLE42000
1178ER_CHECK_NOT_IMPLEMENTED42000
1179ER_CANT_DO_THIS_DURING_AN_TRANSACTION 25000
1184ER_NEW_ABORTING_CONNECTION08S01
1189ER_MASTER_NET_READ08S01
1190ER_MASTER_NET_WRITE08S01
1203ER_TOO_MANY_USER_CONNECTIONS42000
1205ER_LOCK_WAIT_TIMEOUT40001
1207ER_READ_ONLY_TRANSACTION25000
1211ER_NO_PERMISSION_TO_CREATE_USER 42000
1213ER_LOCK_DEADLOCK40001
1216ER_NO_REFERENCED_ROW23000
1217ER_ROW_IS_REFERENCED23000
1218ER_CONNECT_TO_MASTER08S01
1222ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT 21000
1226ER_USER_LIMIT_REACHED42000
1227ER_SPECIFIC_ACCESS_DENIED_ERROR 42000
1230ER_NO_DEFAULT42000
1231ER_WRONG_VALUE_FOR_VAR42000
1232ER_WRONG_TYPE_FOR_VAR42000
1234ER_CANT_USE_OPTION_HERE42000
1235ER_NOT_SUPPORTED_YET42000
1239ER_WRONG_FK_DEF42000
1241ER_OPERAND_COLUMNS21000
1242ER_SUBQUERY_NO_1_ROW21000
1247ER_ILLEGAL_REFERENCE42S22
1248ER_DERIVED_MUST_HAVE_ALIAS 42000
1249ER_SELECT_REDUCED01000
1250ER_TABLENAME_NOT_ALLOWED_HERE 42000
1251ER_NOT_SUPPORTED_AUTH_MODE 08004
1252ER_SPATIAL_CANT_HAVE_NULL 42000
1253ER_COLLATION_CHARSET_MISMATCH 42000
1261ER_WARN_TOO_FEW_RECORDS 01000
1262ER_WARN_TOO_MANY_RECORDS 01000
1263ER_WARN_NULL_TO_NOTNULL 22004
1264ER_WARN_DATA_OUT_OF_RANGE 22003
1265ER_WARN_DATA_TRUNCATED01000
1280ER_WRONG_NAME_FOR_INDEX42000
1281ER_WRONG_NAME_FOR_CATALOG 42000
1286ER_UNKNOWN_STORAGE_ENGINE 42000
1292ER_TRUNCATED_WRONG_VALUE 22007
1303ER_SP_NO_RECURSIVE_CREATE 2F003
1304ER_SP_ALREADY_EXISTS42000
1305ER_SP_DOES_NOT_EXIST42000
1308ER_SP_LILABEL_MISMATCH42000
1309ER_SP_LABEL_REDEFINE42000
1310ER_SP_LABEL_MISMATCH42000
1311ER_SP_UNINIT_VAR01000
1312ER_SP_BADSELECT0A000
1313ER_SP_BADRETURN42000
1314ER_SP_BADSTATEMENT0A000
1315ER_UPDATE_LOG_DEPRECATED_IGNORED 42000
1316ER_UPDATE_LOG_DEPRECATED_TRANSLATED 42000
1317ER_QUERY_INTERRUPTED70100
1318ER_SP_WRONG_NO_OF_ARGS42000
1319ER_SP_COND_MISMATCH42000
1320ER_SP_NORETURN42000
1321ER_SP_NORETURNEND2F005
1322ER_SP_BAD_CURSOR_QUERY 42000
1323ER_SP_BAD_CURSOR_SELECT 42000
1324ER_SP_CURSOR_MISMATCH42000
1325ER_SP_CURSOR_ALREADY_OPEN 24000
1326ER_SP_CURSOR_NOT_OPEN24000
1327ER_SP_UNDECLARED_VAR42000
1329ER_SP_FETCH_NO_DATA02000
1330ER_SP_DUP_PARAM42000
1331ER_SP_DUP_VAR42000
1332ER_SP_DUP_COND42000
1333ER_SP_DUP_CURS42000
1335ER_SP_SUBSELECT_NYI0A000
1336ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG 0A000
1337ER_SP_VARCOND_AFTER_CURSHNDLR 42000
1338ER_SP_CURSOR_AFTER_HANDLER 42000
1339ER_SP_CASE_NOT_FOUND20000
1365ER_DIVISION_BY_ZERO22012
1367ER_ILLEGAL_VALUE_FOR_TYPE 22007
1370ER_PROCACCESS_DENIED_ERROR 42000
1397ER_XAER_NOTAXAE04
1398ER_XAER_INVALXAE05
1399ER_XAER_RMFAILXAE07
1400ER_XAER_OUTSIDEXAE09
1401ER_XA_RMERRXAE03
1402ER_XA_RBROLLBACKXA100
1403ER_NONEXISTING_PROC_GRANT 42000
1406ER_DATA_TOO_LONG22001
1407ER_SP_BAD_SQLSTATE42000
1410ER_CANT_CREATE_USER_WITH_GRANT 42000
1413ER_SP_DUP_HANDLER42000
1414ER_SP_NOT_VAR_ARG42000
1415ER_SP_NO_RETSET0A000
1416ER_CANT_CREATE_GEOMETRY_OBJECT 22003
1425ER_TOO_BIG_SCALE42000
1426ER_TOO_BIG_PRECISION42000
1427ER_M_BIGGER_THAN_D42000
1437ER_TOO_LONG_BODY42000
1439ER_TOO_BIG_DISPLAYWIDTH42000
1440ER_XAER_DUPIDXAE08
1441ER_DATETIME_FUNCTION_OVERFLOW 22008
1451ER_ROW_IS_REFERENCED_223000
1452ER_NO_REFERENCED_ROW_223000
1453ER_SP_BAD_VAR_SHADOW42000
1458ER_SP_WRONG_NAME42000
1460ER_SP_NO_AGGREGATE42000
1461ER_MAX_PREPARED_STMT_COUNT_REACHED 42000
1463ER_NON_GROUPING_FIELD_USED 42000
1557ER_FOREIGN_DUPLICATE_KEY 23000
1568ER_CANT_CHANGE_TX_ISOLATION 25001
1582ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT 42000
1583ER_WRONG_PARAMETERS_TO_NATIVE_FCT 42000
1584ER_WRONG_PARAMETERS_TO_STORED_FCT 42000
1586ER_DUP_ENTRY_WITH_KEY_NAME 23000
1613ER_XA_RBTIMEOUTXA106
1614ER_XA_RBDEADLOCKXA102
1630ER_FUNC_INEXISTENT_NAME_COLLISION 42000
1641ER_DUP_SIGNAL_SET42000
1642ER_SIGNAL_WARN01000
1643ER_SIGNAL_NOT_FOUND02000
1645ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER 0K000
1687ER_SPATIAL_MUST_HAVE_GEOM_COL 42000
1690ER_DATA_OUT_OF_RANGE22003
1698ER_ACCESS_DENIED_NO_PASSWORD_ERROR 28000
1701ER_TRUNCATE_ILLEGAL_FK42000
1758ER_DA_INVALID_CONDITION_NUMBER 35000
1761ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO 23000
1762 ER_FOREIGN_DUPLICATE_KEY_WITHOUT_CHILD_INFO23000
1792 ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION25006
1845ER_ALTER_OPERATION_NOT_SUPPORTED 0A000
1846ER_ALTER_OPERATION_NOT_SUPPORTED_REASON 0A000
1859ER_DUP_UNKNOWN_IN_INDEX23000
1873ER_ACCESS_DENIED_CHANGE_USER_ERROR 28000
1887ER_GET_STACKED_DA_WITHOUT_ACTIVE_HANDLER 0Z002
1903ER_INVALID_ARGUMENT_FOR_LOGARITHM 2201E

Поиск

 

Найди своих коллег!

Вы можете направить письмо администратору этой странички, Алексею Паутову. mailto:alexey.v.pautov@mail.ru