Этот раздел руководства содержит справочный материал для MySQL Connector/J.
Название класса, который осуществляет
java.sql.Driver
в MySQL Connector/J:
com.mysql.cj.jdbc.Driver
.
Эта секция объясняет синтаксис 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
)
в ваших SQL-операторах. Открытие связи, не определяя базу данных, в целом
полезно только при разработке инструментов, которые работают с многими базами
данных, такими как GUI-менеджеры баз данных.dbname
.
tablename
.
colname
FROM dbname.tablename...
Всегда используйте метод
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 для получения дополнительной информации о свойствах конфигурации.
Свойства конфигурации определяют, как 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. |
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()
.
В целом любой тип данных 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 |
Все последовательности, посланные от драйвера 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 и раньше
: Для 8.0.13 и позже:
|
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, так как драйвер не обнаружит, что набор символов был изменен запросом и продолжит использовать набор символов, формируемый, когда связь была настроена.
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, используемые на двух концах, могут быть различными.
JSSE предоставляет отладочную информацию через
stdout
, когда вы устанавливаете системное
свойство -Djavax.net.debug=all
.
Java говорит вам, какой keystores и базы доверенных сертификатов
используются, а также что происходит во время рукопожатия SSL и обмена
сертификатами. Это будет полезно, когда вы попытаетесь отладить
неудавшуюся связь SSL.
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 и позже.
Для 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.
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.
См. раздел 9.4.
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.
Приведенная ниже таблица обеспечивает отображение кодов ошибок MySQL
к значениям JDBC SQLState
.
Таблица 6.4. Отображение кодов ошибок MySQL к кодам JDBC SQLState
MySQL Error Number | Имя ошибки в MySQL | SQL Standard SQLState |
---|---|---|
1022 | ER_DUP_KEY | 23000 |
1037 | ER_OUTOFMEMORY | HY001 |
1038 | ER_OUT_OF_SORTMEMORY | HY001 |
1040 | ER_CON_COUNT_ERROR | 08004 |
1042 | ER_BAD_HOST_ERROR | 08S01 |
1043 | ER_HANDSHAKE_ERROR | 08S01 |
1044 | ER_DBACCESS_DENIED_ERROR | 42000 |
1045 | ER_ACCESS_DENIED_ERROR | 28000 |
1046 | ER_NO_DB_ERROR | 3D000 |
1047 | ER_UNKNOWN_COM_ERROR | 08S01 |
1048 | ER_BAD_NULL_ERROR | 23000 |
1049 | ER_BAD_DB_ERROR | 42000 |
1050 | ER_TABLE_EXISTS_ERROR | 42S01 |
1051 | ER_BAD_TABLE_ERROR | 42S02 |
1052 | ER_NON_UNIQ_ERROR | 23000 |
1053 | ER_SERVER_SHUTDOWN | 08S01 |
1054 | ER_BAD_FIELD_ERROR | 42S22 |
1055 | ER_WRONG_FIELD_WITH_GROUP | 42000 |
1056 | ER_WRONG_GROUP_FIELD | 42000 |
1057 | ER_WRONG_SUM_SELECT | 42000 |
1058 | ER_WRONG_VALUE_COUNT | 21S01 |
1059 | ER_TOO_LONG_IDENT | 42000 |
1060 | ER_DUP_FIELDNAME | 42S21 |
1061 | ER_DUP_KEYNAME | 42000 |
1062 | ER_DUP_ENTRY | 23000 |
1063 | ER_WRONG_FIELD_SPEC | 42000 |
1064 | ER_PARSE_ERROR | 42000 |
1065 | ER_EMPTY_QUERY | 42000 |
1066 | ER_NONUNIQ_TABLE | 42000 |
1067 | ER_INVALID_DEFAULT | 42000 |
1068 | ER_MULTIPLE_PRI_KEY | 42000 |
1069 | ER_TOO_MANY_KEYS | 42000 |
1070 | ER_TOO_MANY_KEY_PARTS | 42000 |
1071 | ER_TOO_LONG_KEY | 42000 |
1072 | ER_KEY_COLUMN_DOES_NOT_EXITS | 42000 |
1073 | ER_BLOB_USED_AS_KEY | 42000 |
1074 | ER_TOO_BIG_FIELDLENGTH | 42000 |
1075 | ER_WRONG_AUTO_KEY | 42000 |
1080 | ER_FORCING_CLOSE | 08S01 |
1081 | ER_IPSOCK_ERROR | 08S01 |
1082 | ER_NO_SUCH_INDEX | 42S12 |
1083 | ER_WRONG_FIELD_TERMINATORS | 42000 |
1084 | ER_BLOBS_AND_NO_TERMINATED | 42000 |
1090 | ER_CANT_REMOVE_ALL_FIELDS | 42000 |
1091 | ER_CANT_DROP_FIELD_OR_KEY | 42000 |
1101 | ER_BLOB_CANT_HAVE_DEFAULT | 42000 |
1102 | ER_WRONG_DB_NAME | 42000 |
1103 | ER_WRONG_TABLE_NAME | 42000 |
1104 | ER_TOO_BIG_SELECT | 42000 |
1106 | ER_UNKNOWN_PROCEDURE | 42000 |
1107 | ER_WRONG_PARAMCOUNT_TO_PROCEDURE | 42000 |
1109 | ER_UNKNOWN_TABLE | 42S02 |
1110 | ER_FIELD_SPECIFIED_TWICE | 42000 |
1112 | ER_UNSUPPORTED_EXTENSION | 42000 |
1113 | ER_TABLE_MUST_HAVE_COLUMNS | 42000 |
1115 | ER_UNKNOWN_CHARACTER_SET | 42000 |
1118 | ER_TOO_BIG_ROWSIZE | 42000 |
1120 | ER_WRONG_OUTER_JOIN | 42000 |
1121 | ER_NULL_COLUMN_IN_INDEX | 42000 |
1131 | ER_PASSWORD_ANONYMOUS_USER | 42000 |
1132 | ER_PASSWORD_NOT_ALLOWED | 42000 |
1133 | ER_PASSWORD_NO_MATCH | 42000 |
1136 | ER_WRONG_VALUE_COUNT_ON_ROW | 21S01 |
1138 | ER_INVALID_USE_OF_NULL | 22004 |
1139 | ER_REGEXP_ERROR | 42000 |
1140 | ER_MIX_OF_GROUP_FUNC_AND_FIELDS | 42000 |
1141 | ER_NONEXISTING_GRANT | 42000 |
1142 | ER_TABLEACCESS_DENIED_ERROR | 42000 |
1143 | ER_COLUMNACCESS_DENIED_ERROR | 42000 |
1144 | ER_ILLEGAL_GRANT_FOR_TABLE | 42000 |
1145 | ER_GRANT_WRONG_HOST_OR_USER | 42000 |
1146 | ER_NO_SUCH_TABLE | 42S02 |
1147 | ER_NONEXISTING_TABLE_GRANT | 42000 |
1148 | ER_NOT_ALLOWED_COMMAND | 42000 |
1149 | ER_SYNTAX_ERROR | 42000 |
1152 | ER_ABORTING_CONNECTION | 08S01 |
1153 | ER_NET_PACKET_TOO_LARGE | 08S01 |
1154 | ER_NET_READ_ERROR_FROM_PIPE | 08S01 |
1155 | ER_NET_FCNTL_ERROR | 08S01 |
1156 | ER_NET_PACKETS_OUT_OF_ORDER | 08S01 |
1157 | ER_NET_UNCOMPRESS_ERROR | 08S01 |
1158 | ER_NET_READ_ERROR | 08S01 |
1159 | ER_NET_READ_INTERRUPTED | 08S01 |
1160 | ER_NET_ERROR_ON_WRITE | 08S01 |
1161 | ER_NET_WRITE_INTERRUPTED | 08S01 |
1162 | ER_TOO_LONG_STRING | 42000 |
1163 | ER_TABLE_CANT_HANDLE_BLOB | 42000 |
1164 | ER_TABLE_CANT_HANDLE_AUTO_INCREMENT | 42000 |
1166 | ER_WRONG_COLUMN_NAME | 42000 |
1167 | ER_WRONG_KEY_COLUMN | 42000 |
1169 | ER_DUP_UNIQUE | 23000 |
1170 | ER_BLOB_KEY_WITHOUT_LENGTH | 42000 |
1171 | ER_PRIMARY_CANT_HAVE_NULL | 42000 |
1172 | ER_TOO_MANY_ROWS | 42000 |
1173 | ER_REQUIRES_PRIMARY_KEY | 42000 |
1176 | ER_KEY_DOES_NOT_EXITS | 42000 |
1177 | ER_CHECK_NO_SUCH_TABLE | 42000 |
1178 | ER_CHECK_NOT_IMPLEMENTED | 42000 |
1179 | ER_CANT_DO_THIS_DURING_AN_TRANSACTION | 25000 |
1184 | ER_NEW_ABORTING_CONNECTION | 08S01 |
1189 | ER_MASTER_NET_READ | 08S01 |
1190 | ER_MASTER_NET_WRITE | 08S01 |
1203 | ER_TOO_MANY_USER_CONNECTIONS | 42000 |
1205 | ER_LOCK_WAIT_TIMEOUT | 40001 |
1207 | ER_READ_ONLY_TRANSACTION | 25000 |
1211 | ER_NO_PERMISSION_TO_CREATE_USER | 42000 |
1213 | ER_LOCK_DEADLOCK | 40001 |
1216 | ER_NO_REFERENCED_ROW | 23000 |
1217 | ER_ROW_IS_REFERENCED | 23000 |
1218 | ER_CONNECT_TO_MASTER | 08S01 |
1222 | ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT | 21000 |
1226 | ER_USER_LIMIT_REACHED | 42000 |
1227 | ER_SPECIFIC_ACCESS_DENIED_ERROR | 42000 |
1230 | ER_NO_DEFAULT | 42000 |
1231 | ER_WRONG_VALUE_FOR_VAR | 42000 |
1232 | ER_WRONG_TYPE_FOR_VAR | 42000 |
1234 | ER_CANT_USE_OPTION_HERE | 42000 |
1235 | ER_NOT_SUPPORTED_YET | 42000 |
1239 | ER_WRONG_FK_DEF | 42000 |
1241 | ER_OPERAND_COLUMNS | 21000 |
1242 | ER_SUBQUERY_NO_1_ROW | 21000 |
1247 | ER_ILLEGAL_REFERENCE | 42S22 |
1248 | ER_DERIVED_MUST_HAVE_ALIAS | 42000 |
1249 | ER_SELECT_REDUCED | 01000 |
1250 | ER_TABLENAME_NOT_ALLOWED_HERE | 42000 |
1251 | ER_NOT_SUPPORTED_AUTH_MODE | 08004 |
1252 | ER_SPATIAL_CANT_HAVE_NULL | 42000 |
1253 | ER_COLLATION_CHARSET_MISMATCH | 42000 |
1261 | ER_WARN_TOO_FEW_RECORDS | 01000 |
1262 | ER_WARN_TOO_MANY_RECORDS | 01000 |
1263 | ER_WARN_NULL_TO_NOTNULL | 22004 |
1264 | ER_WARN_DATA_OUT_OF_RANGE | 22003 |
1265 | ER_WARN_DATA_TRUNCATED | 01000 |
1280 | ER_WRONG_NAME_FOR_INDEX | 42000 |
1281 | ER_WRONG_NAME_FOR_CATALOG | 42000 |
1286 | ER_UNKNOWN_STORAGE_ENGINE | 42000 |
1292 | ER_TRUNCATED_WRONG_VALUE | 22007 |
1303 | ER_SP_NO_RECURSIVE_CREATE | 2F003 |
1304 | ER_SP_ALREADY_EXISTS | 42000 |
1305 | ER_SP_DOES_NOT_EXIST | 42000 |
1308 | ER_SP_LILABEL_MISMATCH | 42000 |
1309 | ER_SP_LABEL_REDEFINE | 42000 |
1310 | ER_SP_LABEL_MISMATCH | 42000 |
1311 | ER_SP_UNINIT_VAR | 01000 |
1312 | ER_SP_BADSELECT | 0A000 |
1313 | ER_SP_BADRETURN | 42000 |
1314 | ER_SP_BADSTATEMENT | 0A000 |
1315 | ER_UPDATE_LOG_DEPRECATED_IGNORED | 42000 |
1316 | ER_UPDATE_LOG_DEPRECATED_TRANSLATED | 42000 |
1317 | ER_QUERY_INTERRUPTED | 70100 |
1318 | ER_SP_WRONG_NO_OF_ARGS | 42000 |
1319 | ER_SP_COND_MISMATCH | 42000 |
1320 | ER_SP_NORETURN | 42000 |
1321 | ER_SP_NORETURNEND | 2F005 |
1322 | ER_SP_BAD_CURSOR_QUERY | 42000 |
1323 | ER_SP_BAD_CURSOR_SELECT | 42000 |
1324 | ER_SP_CURSOR_MISMATCH | 42000 |
1325 | ER_SP_CURSOR_ALREADY_OPEN | 24000 |
1326 | ER_SP_CURSOR_NOT_OPEN | 24000 |
1327 | ER_SP_UNDECLARED_VAR | 42000 |
1329 | ER_SP_FETCH_NO_DATA | 02000 |
1330 | ER_SP_DUP_PARAM | 42000 |
1331 | ER_SP_DUP_VAR | 42000 |
1332 | ER_SP_DUP_COND | 42000 |
1333 | ER_SP_DUP_CURS | 42000 |
1335 | ER_SP_SUBSELECT_NYI | 0A000 |
1336 | ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG | 0A000 |
1337 | ER_SP_VARCOND_AFTER_CURSHNDLR | 42000 |
1338 | ER_SP_CURSOR_AFTER_HANDLER | 42000 |
1339 | ER_SP_CASE_NOT_FOUND | 20000 |
1365 | ER_DIVISION_BY_ZERO | 22012 |
1367 | ER_ILLEGAL_VALUE_FOR_TYPE | 22007 |
1370 | ER_PROCACCESS_DENIED_ERROR | 42000 |
1397 | ER_XAER_NOTA | XAE04 |
1398 | ER_XAER_INVAL | XAE05 |
1399 | ER_XAER_RMFAIL | XAE07 |
1400 | ER_XAER_OUTSIDE | XAE09 |
1401 | ER_XA_RMERR | XAE03 |
1402 | ER_XA_RBROLLBACK | XA100 |
1403 | ER_NONEXISTING_PROC_GRANT | 42000 |
1406 | ER_DATA_TOO_LONG | 22001 |
1407 | ER_SP_BAD_SQLSTATE | 42000 |
1410 | ER_CANT_CREATE_USER_WITH_GRANT | 42000 |
1413 | ER_SP_DUP_HANDLER | 42000 |
1414 | ER_SP_NOT_VAR_ARG | 42000 |
1415 | ER_SP_NO_RETSET | 0A000 |
1416 | ER_CANT_CREATE_GEOMETRY_OBJECT | 22003 |
1425 | ER_TOO_BIG_SCALE | 42000 |
1426 | ER_TOO_BIG_PRECISION | 42000 |
1427 | ER_M_BIGGER_THAN_D | 42000 |
1437 | ER_TOO_LONG_BODY | 42000 |
1439 | ER_TOO_BIG_DISPLAYWIDTH | 42000 |
1440 | ER_XAER_DUPID | XAE08 |
1441 | ER_DATETIME_FUNCTION_OVERFLOW | 22008 |
1451 | ER_ROW_IS_REFERENCED_2 | 23000 |
1452 | ER_NO_REFERENCED_ROW_2 | 23000 |
1453 | ER_SP_BAD_VAR_SHADOW | 42000 |
1458 | ER_SP_WRONG_NAME | 42000 |
1460 | ER_SP_NO_AGGREGATE | 42000 |
1461 | ER_MAX_PREPARED_STMT_COUNT_REACHED | 42000 |
1463 | ER_NON_GROUPING_FIELD_USED | 42000 |
1557 | ER_FOREIGN_DUPLICATE_KEY | 23000 |
1568 | ER_CANT_CHANGE_TX_ISOLATION | 25001 |
1582 | ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT | 42000 |
1583 | ER_WRONG_PARAMETERS_TO_NATIVE_FCT | 42000 |
1584 | ER_WRONG_PARAMETERS_TO_STORED_FCT | 42000 |
1586 | ER_DUP_ENTRY_WITH_KEY_NAME | 23000 |
1613 | ER_XA_RBTIMEOUT | XA106 |
1614 | ER_XA_RBDEADLOCK | XA102 |
1630 | ER_FUNC_INEXISTENT_NAME_COLLISION | 42000 |
1641 | ER_DUP_SIGNAL_SET | 42000 |
1642 | ER_SIGNAL_WARN | 01000 |
1643 | ER_SIGNAL_NOT_FOUND | 02000 |
1645 | ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER | 0K000 |
1687 | ER_SPATIAL_MUST_HAVE_GEOM_COL | 42000 |
1690 | ER_DATA_OUT_OF_RANGE | 22003 |
1698 | ER_ACCESS_DENIED_NO_PASSWORD_ERROR | 28000 |
1701 | ER_TRUNCATE_ILLEGAL_FK | 42000 |
1758 | ER_DA_INVALID_CONDITION_NUMBER | 35000 |
1761 | ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO | 23000 |
1762 | ER_FOREIGN_DUPLICATE_KEY_WITHOUT_CHILD_INFO | 23000 |
1792 | ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION | 25006 |
1845 | ER_ALTER_OPERATION_NOT_SUPPORTED | 0A000 |
1846 | ER_ALTER_OPERATION_NOT_SUPPORTED_REASON | 0A000 |
1859 | ER_DUP_UNKNOWN_IN_INDEX | 23000 |
1873 | ER_ACCESS_DENIED_CHANGE_USER_ERROR | 28000 |
1887 | ER_GET_STACKED_DA_WITHOUT_ACTIVE_HANDLER | 0Z002 |
1903 | ER_INVALID_ARGUMENT_FOR_LOGARITHM | 2201E |