Глава 6. Работа с Connector/J
Этот раздел руководства содержит справочный материал
для MySQL Connector/J.
6.1. Имя класса драйвера и источника данных
Название класса, который осуществляет
java.sql.Driver в MySQL Connector/J:
com.mysql.cj.jdbc.Driver .
6.2. Синтаксис URL связи
Эта секция объясняет синтаксис URL для соединения с MySQL.
Это универсальный формат связи URL:
protocol//[hosts][/database][?properties]
URL состоит из следующих частей:
Любые зарезервированные символы для URL (например,
/ , : ,
@ , ( , ),
[ , ] ,
& , # ,
= , ? и пробел),
которые появляются в любой части URL, должны быть закодированы процентом.
protocol
Есть возможные протоколы для связи:
jdbc:mysql:
для обычных и основных связей отказоустойчивости JDBC.
jdbc:mysql:loadbalance:
для выравнивания нагрузки связи JDBC. Посмотрите
раздел 9.3 для деталей.
jdbc:mysql:replication:
для соединений репликации JDBC. Посмотрите
раздел
9.4.
mysqlx: для связей X DevAPI.
jdbc:mysql+srv:
для обычной и основной отказоустойчивости связи JDBC, которые используют
записи DNS SRV.
jdbc:mysql+srv:loadbalance:
для выравнивания нагрузки связи JDBC, которые используют записи DNS SRV.
jdbc:mysql+srv:replication:
для соединений репликации JDBC, которые используют записи DNS SRV.
mysqlx+srv:
для связей X DevAPI, которые используют записи DNS SRV.
hosts
В зависимости от ситуации, host
может состоять просто из имени хоста, или это может быть сложная структура,
состоящая из различных элементов как многократные имена хоста, номера портов,
определенные для хоста свойства и удостоверения пользователя.
Единственный хост:
Связи единственного хоста, не добавляя определенные для него свойства:
hosts написан в формате
host :
port . Это пример простой связи единственного хоста URL:
jdbc:mysql://host1:33060/sakila
host может быть IPv4 или
IPv6, в последнем случае это должно быть помещено в квадратных скобках,
например, [1000:2000::abcd]. Когда
host не указан, используется
значение по умолчанию localhost .
port это
стандартный номер порта, т.е. целое число между 1 и 65535.
Номер порта по умолчанию для обычного подключения MySQL 3306 и 33060 для
для связи, использующей X Protocol. Если
port не указан,
соответствующее умолчание используется.
Связи единственного хоста, добавляющие определенные для хоста свойства:
В этом случае хост определяется как последовательность
key =
value .
Ключи используются, чтобы опознать хост, порт, а также любые определенные для
хоста свойства. Есть два дополнительных формата для определения ключей:
Форма address-equals:
address=(host=host_or_ip)(port=port)(key1=value1)(key2=value2)...(keyN=valueN)
Вот типовой URL, использующий форму
address-equals:
jdbc:mysql://address=(host=myhost)(port=1111)(key1=value1)/db
Форма key-value:
(host=host,port=port,key1=value1,key2=value2,...,keyN=valueN)
Вот типовой URL, использующий форму key-value:
jdbc:mysql://(host=myhost,port=1111,key1=value1)/db
Хост и порт опознаются ключами
host и
port .
Описания формата и значения по умолчанию
host и
port , данные
выше,
также применяются здесь.
Другие ключи, которые могут быть добавлены, включают
user ,
password ,
protocol и т.д.
Они отвергают глобальные значения в части
properties URL.
Перекрыть можно только пользователя, пароль, сетевые тайм-ауты
и размеры кэшей метаданных и запросов, эффекты других переопределений для
хоста не определяются.
Различные протоколы могут потребовать различных ключей. Например,
схема mysqlx: использует два специальных ключа,
address и
priority .
address это пара
host :
port , а priority
целое число. Например:
mysqlx://(address=host:1111,priority=1,key1=value1)/db
key
чувствительное к регистру. Два ключей с отличиями только в регистре, это
разные ключи, и нет никаких гарантий, который будет использоваться.
Много хостов
Есть два формата для определения многократных хостов:
Сптсок разделенных запятой значений:
host1,host2,...,hostN
Каждый хост может быть определен любым из этих трех способов, описанных
выше.
Вот некоторые примеры:
jdbc:mysql://myhost1:1111,myhost2:2222/db
jdbc:mysql://address=(host=myhost1)(port=1111)(key1=value1),address=(host=myhost2)(port=2222)(key2=value2)/db
jdbc:mysql://(host=myhost1,port=1111,key1=value1),(host=myhost2,port=2222,key2=value2)/db
jdbc:mysql://myhost1:1111,(host=myhost2,port=2222,key2=value2)/db
mysqlx://(address=host1:1111,priority=1,key1=value1),(address=host2:2222,priority=2,key2=value2)/db
Хосты в списке разделены запятой, затем идет
список в квадратных скобках:
[host1 ,host2 ,...,hostN ]
Это называют формой подсписка хоста, которая позволяет разделять
удостоверения
пользователя всех хостов в списке, как будто они единственный хост.
Каждый хост в списке может быть определен любым из этих трех способов,
описанных выше.
Вот некоторые примеры:
jdbc:mysql://sandy:secret@[myhost1:1111,myhost2:2222]/db
jdbc:mysql://sandy:secret@[address=(host=myhost1)(port=1111)(key1=value1),address=(host=myhost2)(port=2222)(key2=value2)]/db
jdbc:mysql://sandy:secret@[myhost1:1111,address=(host=myhost2)(port=2222)(key2=value2)]/db
В то время как невозможно написать подсписки хоста рекурсивно,
список хостов может содержать подсписки хостов как своих членских хостов.
Данные пользователей
Данные пользователей могут быть установлены за пределами связи URL,
например, как аргументы, получая связь от
java.sql.DriverManager (см.
раздел
6.3 для деталей). Когда работают со связью URL, есть несколько
способов определить их:
Префикс единственный хост, подсписок хоста (см.
здесь) или
или любой хост в списке хостов с удостоверениями пользователя с
@ :
user :password @host_or_host_sublist
Например:
mysqlx://sandy:secret@[(address=host1:1111, priority=1, key1=value1),
(address=host2:2222, priority=2, key2=value2))]/db
Используйте ключи user и
password , чтобы определить параметры
для каждого хоста:
(user=sandy)(password=mypass)
Например:
jdbc:mysql://[(host=myhost1,port=1111,user=sandy,password=secret),
(host=myhost2,port=2222,user=finn,password=secret)]/db
jdbc:mysql://address=(host=myhost1)(port=1111)(user=sandy)(password=secret),
address=(host=myhost2)(port=2222)(user=finn)(password=secret)/db
В обеих формах, когда многопользовательские параметры определяются,
левая имеет приоритет, то есть, идя слева направо в строке подключения,
используется первый найденный параметр, который применим к хосту.
Внутри
подсписка хостов ни у какого хоста не может быть параметров
пользователя в формате @, но отдельному хосту можно определить
параметры пользователя в формате ключа.
database
База данных по умолчанию или каталог, чтобы открыть.
Если база данных не определяется, связь установлена без базы данных по
умолчанию. В этом случае нужен вызов метода
setCatalog() в экземпляре
Connection или указание имени таблицы, используя
имя базы данных (то есть,
SELECT dbname .
tablename .
colname FROM dbname.tablename... )
в ваших SQL-операторах. Открытие связи, не определяя базу данных, в целом
полезно только при разработке инструментов, которые работают с многими базами
данных, такими как GUI-менеджеры баз данных.
Всегда используйте метод
Connection.setCatalog() , чтобы определить
желаемую базу данных в запросах JDBC вместо применения вызова
USE database
.
properties
Последовательность глобальных свойств, относящихся ко всем хостам,
которым предшествует ? , записанная как пары
key =
value , отделенные символом
& .
Вот некоторые примеры:
jdbc:mysql://(host=myhost1,port=1111),(host=myhost2,port=2222)/db?key1=value1&key2=value2&key3=value3
Следующее верно для пар ключ/значение:
key и
value просто последовательности.
Надлежащее преобразование типов и проверка выполняются
внутренне в Connector/J.
key
чувствительны к регистру. Два ключа с отличием только в регистре
входят в противоречие и неизвестно, какой будет использоваться.
Любые определенные для хоста значения, определенные с парами
ключ/значение, как объяснено в
здесь и
здесь,
отвергают глобальные значения.
См.
раздел 6.3 для получения дополнительной
информации о свойствах конфигурации.
6.3. Свойства конфигурации
Свойства конфигурации определяют, как Connector/J установит связь с
сервером MySQL. Если не указано иное, свойства могут быть установлены для
объекта DataSource или объекта
Connection .
Свойства конфигурации могут быть установлены одним из следующих способов:
Используя методы set*()
на MySQL-реализации java.sql.DataSource
(который является предпочтительным методом, используя
java.sql.DataSource ):
Как пара ключ/значение в экземпляре
java.util.Properties , переданном к
DriverManager.getConnection() или
Driver.connect() .
Как параметр URL JDBC в URL, данном
java.sql.DriverManager.getConnection() ,
java.sql.Driver.connect() или MySQL-реализации
метода javax.sql.DataSource
setURL() . Если вы определите свойство
конфигурации в URL, не предоставляя значение для него, ничто не будет
установлено, например, добавление
useServerPrepStmts
к URL не заставляет Connector/J использовать подготовленные запросы
серверной стороны, необходимо добавить
useServerPrepStmts=true .
Если механизм, который вы используете, чтобы формировать URL JDBC, основан
на XML, используйте символ XML & , чтобы
отделить параметры конфигурации, поскольку амперсанд это зарезервированный
символ для XML.
Свойства перечисляются в следующих таблицах.
Идентификация.
Свойства и описания |
user
Пользователь, чтобы соединиться с сервером.
Начиная с версии: все версии. |
password
Пароль, чтобы соединиться с сервером.
Начиная с версии: все версии.
|
Связь.
Свойства и описания |
connectionAttributes
Разграниченный запятой список определенных пользователями пар
key:value (в дополнение к типичным MySQL-определенным парам key:value),
чтобы быть переданными в MySQL Server для показа как атрибуты связи в
таблице PERFORMANCE_SCHEMA.SESSION_CONNECT_ATTRS.
Использование в качестве примера:
connectionAttributes=key1:value1,key2:value2.
Эта функциональность доступна для использования только с MySQL Server 5.6 или
позже. Более ранние версии MySQL Server не поддерживают признаки связи,
заставляя этот параметр конфигурации быть проигнорированным.
Определение connectionAttributes=none заставит обработку признака связи быть
обойденной для ситуаций, где скорость создания/инициализации
связи очень важна.
Начиная с версии: 5.1.25. |
connectionLifecycleInterceptors
Разграниченный запятой список классов, которые реализуют
"com.mysql.cj.jdbc.interceptors.ConnectionLifecycleInterceptor", который
должен зарегистрировать события жизненного цикла связи (создание,
разрушение, передача, отмена, установка текущей базы данных и изменение
режима autocommit) и потенциально изменяет выполнение этих команд.
ConnectionLifecycleInterceptors "наращиваемый", больше чем один перехватчик
может быть определен через свойство конфигурации как разграниченный запятой
список с перехватчиками в порядке слева направо.
Начиная с версии: 5.1.4. |
useConfigs
Загрузите разграниченный запятой список свойств конфигурации прежде, чем
разобрать URL или применить определенные пользователями свойства.
Эти конфигурации объяснены в документации.
Начиная с версии: 3.1.5. |
authenticationPlugins
Разграниченный запятой список классов, которые реализуют
com.mysql.cj.protocol.AuthenticationPlugin и будет использоваться для
идентификации, если не отключено свойство "disabledAuthenticationPlugins".
Начиная с версии: 5.1.19. |
clientInfoProvider
Название класса, который осуществляет интерфейс
com.mysql.cj.jdbc.ClientInfoProvider, чтобы поддержать методы
JDBC 4.0 Connection.get/setClientInfo().
Значение по умолчанию: com.mysql.cj.jdbc.CommentClientInfoProvider.
Начиная с версии: 5.1.0. |
createDatabaseIfNotExist
Создает базу данных, данную в URL, если это еще не существует.
Предполагает, что у пользователя есть разрешения создать базы данных.
Значение по умолчанию: false.
Начиная с версии: 3.1.9. |
databaseTerm
MySQL использует термин "схема" как синоним термина "база
данных", в то время как Connector/J исторически берет термин JDBC
"каталог" в качестве синонимичного с "базой данных".
Это свойство для Connector/J определяет, какой термин, "каталог"
или "схема", используется в запросе к базе данных.
Свойство берет одно из двух значений CATALOG или SCHEMA
и использует его, чтобы определить (1), какие методы связи могут
использоваться, чтобы установить/получить текущую базу данных (например,
setCatalog() or setSchema()), (2) какие аргументы могут использоваться в
рамках различных методов DatabaseMetaData, чтобы отфильтровать результаты
(например, параметр catalog или schemaPattern в getColumns()) и
(3) какие области в ResultSet, возвращенном методами DatabaseMetaData,
содержат идентификационную информацию базы данных (т.е. TABLE_CAT или
TABLE_SCHEM в ResultSet, возвращенном getTables()).
Если databaseTerm=CATALOG, schemaPattern для поисков проигнорированы и
требования методов схемы (как setSchema() или get Schema()) не работают.
Значение по умолчанию: CATALOG.
Начиная с версии: 8.0.17. |
defaultAuthenticationPlugin
Название класса, осуществляющего
com.mysql.cj.protocol.AuthenticationPlugin, который будет использоваться в
качестве плагина идентификации по умолчанию (см. ниже).
Ошибка использовать класс, который не перечисляется в
"authenticationPlugins". Ошибка установить плагин, который был отключен
свойством "disabledAuthenticationPlugins". Ошибка установить это значение к
пустому указателю или пустой строке (т.е. должен быть, по крайней мере,
действительный плагин идентификации по умолчанию, определенный для связи).
Значение по умолчанию:
com.mysql.cj.protocol.a.authentication.MysqlNativePasswordPlugin
Начиная с версии: 5.1.19. |
detectCustomCollations
Если драйвер обнаруживает наборы символов/сопоставления, установленные на
сервере (true/false, по умолчанию 'false'), то если опция = 'true', драйвер
получает фактические наборы символов/сопоставления от сервера каждый раз,
когда связь устанавливается. Это может значительно
замедлить инициализацию связи.
Значение по умолчанию: false.
Начиная с версии: 5.1.29. |
disabledAuthenticationPlugins
Разграниченный запятой список классов, осуществляющих
com.mysql.cj.protocol.AuthenticationPlugin или механизмы вроде
"mysql_native_password". Плагины идентификации или перечисленные механизмы не
будут использоваться для идентификации, которая потерпит неудачу, если она
потребует одного из них. Ошибка отключить плагин идентификации по умолчанию
(или названный свойством "defaultAuthenticationPlugin" или строго
закодированный, если свойство "defaultAuthenticationPlugin" не установлено).
Начиная с версии: 5.1.19. |
disconnectOnExpiredPasswords
Если "disconnectOnExpiredPasswords" = "false" и пароль выдохся, сервер
входит в режим "sandbox" и посылает ERR(08001, ER_MUST_CHANGE_PASSWORD)
для всех команд, которые не необходимы, чтобы установить новый пароль, пока
новый пароль не установлен.
Значение по умолчанию: true.
Начиная с версии: 5.1.23. |
interactiveClient
Установит флаг CLIENT_INTERACTIVE, который говорит MySQL-связям
тайм-аут на основе INTERACTIVE_TIMEOUT вместо WAIT_TIMEOUT.
Значение по умолчанию: false.
Начиная с версии: 3.1.0. |
passwordCharacterEncoding
Какая кодировка символов используется для паролей?
Если оставить этот набор значением по умолчанию (пустой указатель), то
используется набор значений в "characterEncoding", если оно есть, иначе
используется UTF-8 в качестве кодировки по умолчанию. Если пароль содержит
знаки не-ASCII, кодировка пароля должна соответствовать той, какая была
установлена на сервере в то время, когда пароль был создан.
Для паролей в других кодировках символов кодировка должна быть определена с
этим свойством (или с "characterEncoding"), поскольку для драйвера невозможно
опознать это автоматически.
Начиная с версии: 5.1.7. |
propertiesTransform
Реализация com.mysql.cj.conf.ConnectionPropertiesTransform, который
драйвер будет использовать, чтобы изменить свойства URL, переданные ему
прежде, чем делать попытку связи.
Начиная с версии: 3.1.4. |
rollbackOnPooledClose
Драйвер должен выпустить rollback(), когда логическая
связь в пуле закрывается?
Значение по умолчанию: true.
Начиная с версии: 3.0.15. |
useAffectedRows
Не устанавливайте флаг CLIENT_FOUND_ROWS, соединяясь с сервером
(несовместимо с JDBC, сломает большинство запросов, которые полагаются на
"найденные" вместо "затронутых" для запросов DML),
но действительно получает "правильное" количество обновлений из
"INSERT ... ON DUPLICATE KEY UPDATE", которые будут возвращены сервером.
Значение по умолчанию: false.
Начиная с версии: 5.1.7. |
Сессия.
Свойства и описания |
sessionVariables
Разделенный запятой или точкой с запятой список пар name=value, чтобы быть
посланными как SET [SESSION] ... к серверу, когда драйвер соединяется.
Начиная с версии: 3.1.8. |
characterEncoding
Какую кодировку символов драйвер должен использовать, имея дело с
последовательностями (по умолчанию 'autodetect').
Начиная с версии: 1.1g. |
characterSetResults
Набор символов, в котором серверу надлежит возвращать результаты.
Начиная с версии: 3.0.13. |
connectionCollation
Если установлено, говорит серверу использовать это сопоставление в
SET NAMES charset COLLATE connectionCollation. Также отвергает
characterEncoding, которые соответствуют набору символов этого сопоставления.
Начиная с версии: 3.0.13. |
Организация сети.
Свойства и описания |
socksProxyHost
Имя или IP-адрес хоста SOCKS.
Начиная с версии: 5.1.34. |
socksProxyPort
Порт сервера SOCKS.
Значение по умолчанию: 1080.
Начиная с версии: 5.1.34. |
socketFactory
Название класса, который драйвер должен использовать для создания сокетных
соединений с сервером. Этот класс должен осуществить интерфейс
'com.mysql.cj.protocol.SocketFactory' и иметь конструктор
public без параметров.
Значение по умолчанию: com.mysql.cj.protocol.StandardSocketFactory.
Начиная с версии: 3.0.3. |
connectTimeout
Тайм-аут для соединения сокета (в миллисекундах), 0 = нет тайм-аута.
Работает только с JDK-1.4 или более новым.
Значение по умолчанию: 0.
Начиная с версии: 3.0.1. |
socketTimeout
Тайм-аут для сетевых операций с сокетом (в миллисекундах),
0 = нет тайм-аута.
Значение по умолчанию: 0.
Начиная с версии: 3.0.1. |
dnsSrv
Драйвер должен использовать данное имя хоста для поиска записи DNS SRV
и использовать получающийся список хостов в связи отказоустойчивости?
Обратите внимание на то, что единственное имя хоста без порта должно быть
обеспечено, когда эта опция включена.
Значение по умолчанию: false.
Начиная с версии: 8.0.19. |
localSocketAddress
Имя хоста или IP-адрес, чтобы явно формировать интерфейс, с которым
драйвер свяжет клиентскую сторону связи TCP/IP, соединяясь.
Начиная с версии: 5.0.5. |
maxAllowedPacket
Максимальный позволенный размер пакета, чтобы послать на сервер.
Если не задан, значение системной переменной 'max_allowed_packet'
будет использоваться, чтобы инициализировать это после соединения.
Это значение не вступит в силу, если установлено больше, чем значение
'max_allowed_packet'. Кроме того, из-за внутренней зависимости от свойства
"blobSendChunkSize" есть минимальное значение "8203", если
"useServerPrepStmts" = "true".
Значение по умолчанию: 65535.
Начиная с версии: 5.1.8. |
tcpKeepAlive
Соединяясь по TCP/IP, должен ли драйвер установить SO_KEEPALIVE?
Значение по умолчанию: true.
Начиная с версии: 5.0.7. |
tcpNoDelay
Соединяясь по TCP/IP, должен ли драйвер установить
SO_TCP_NODELAY (отключающий Nagle Algorithm)?
Значение по умолчанию: true.
Начиная с версии: 5.0.7. |
tcpRcvBuf
Соединяясь по TCP/IP, должен ли драйвер установить SO_RCV_BUF
к данному значению? Значение по умолчанию '0' означает использование значения
по умолчанию платформы для этого.
Значение по умолчанию: 0.
Начиная с версии: 5.0.7. |
tcpSndBuf
Соединяясь по TCP/IP, должен ли драйвер установить SO_SND_BUF
к данному значению? Значение по умолчанию '0' означает использование значения
по умолчанию платформы для этого.
Значение по умолчанию: 0.
Начиная с версии: 5.0.7. |
tcpTrafficClass
Соединяясь по TCP/IP, должен ли драйвер установить
класс трафика или поле type-of-service? См. документацию для
java.net.Socket.setTrafficClass() для получения дополнительной информации.
Значение по умолчанию: 0.
Начиная с версии: 5.0.7. |
useCompression
Использовать zlib сжатие, общаясь с сервером? (true/false).
Значение по умолчанию: false.
Начиная с версии: 3.0.17. |
useUnbufferedInput
Не используйте BufferedInputStream для чтения данных из сервера.
Значение по умолчанию: true.
Начиная с версии: 3.0.11. |
Безопасность.
Свойства и описания |
allowMultiQueries
Позволить использование ';', чтобы разграничить много запросов
во время одного запроса (true/false). Умолчание 'false' не затрагивает
методы addBatch() и executeBatch(), которые полагаются на
rewriteBatchStatements.
Значение по умолчанию: false.
Начиная с версии: 3.1.1. |
useSSL
Для 8.0.12 и ранее: используйте SSL, общаясь с сервером, по умолчанию
'true', соединяясь с MySQL 5.5.45+, 5.6.26+ или 5.7.6+, иначе
по умолчанию 'false'.
Для 8.0.13 и позже: по умолчанию 'true'. Устарело.
См. sslMode для деталей.
Значение по умолчанию: true.
Начиная с версии: 3.0.2. |
requireSSL
Для 8.0.12 и ранее: потребовать от сервера поддержки связи SSL, если
useSSL=true?
Для 8.0.13 и позже: устарело. См. sslMode для деталей.
Значение по умолчанию: false.
Начиная с версии: 3.1.0. |
verifyServerCertificate
Для 8.0.12 и ранее: Если "useSSL" установлен в "true",
драйвер должен проверить сертификат сервера? Используя эту функцию, параметры
keystore должны быть определены свойствами "clientCertificateKeyStore*", а не
свойствами системы. По умолчанию 'false', соединяясь с MySQL 5.5.45+, 5.6.26+
or 5.7.6+ и "useSSL" не было явно установлено в "true".
Иначе по умолчанию 'true'.
Для 8.0.13 и позже: по умолчанию 'false'. Устарело. См.
описание sslMode для деталей.
Значение по умолчанию: false.
Начиная с версии: 5.1.6. |
clientCertificateKeyStoreUrl
URL к сертификату клиента KeyStore (если не определен,
используйте по умолчанию).
Начиная с версии: 5.1.0. |
clientCertificateKeyStoreType
Тип KeyStore для сертификатов клиента (NULL или пустое значение
используют тип по умолчанию, который "JKS").
Стандартные типы keystore, поддержанные JVM: "JKS" и "PKCS12",
ваша среда может иметь больше вариантов в зависимости от того, какие продукты
безопасности устанавливаются и доступны JVM.
Значение по умолчанию: JKS.
Начиная с версии: 5.1.0. |
clientCertificateKeyStorePassword
Пароль для сертификатов клиента KeyStore.
Начиная с версии: 5.1.0. |
trustCertificateKeyStoreUrl
URL к доверенному корневому сертификату KeyStore (если не определено,
используйте по умолчанию).
Начиная с версии: 5.1.0. |
trustCertificateKeyStoreType
Тип KeyStore для доверенных корневых сертификатов (NULL или пустое
значение используют тип по умолчанию, который "JKS").
Стандартные типы keystore, поддержанные JVM: "JKS" и "PKCS12",
ваша среда может иметь больше вариантов в зависимости от того, какие продукты
безопасности устанавливаются и доступны JVM.
Значение по умолчанию: JKS.
Начиная с версии: 5.1.0. |
trustCertificateKeyStorePassword
Пароль для доверенных корневых сертификатов KeyStore.
Начиная с версии: 5.1.0. |
enabledSSLCipherSuites
Если "useSSL" установлено в "true", отвергает шифры, позволенные
для использования на сокетах SSL. Это может требоваться, используя внешних
поставщиков JSSE или чтобы определить шифры, совместимые с сервером MySQL
и с используемой JVM.
Начиная с версии: 5.1.35. |
enabledTLSProtocols
Если "useSSL" установлено в "true", отвергает
протоколы TLS, позволенные для использования на сокетах SSL.
Это может использоваться, чтобы ограничить связи с
определенными версиями TLS.
Начиная с версии: 8.0.8. |
allowLoadLocalInfile
Драйвер должен позволить использование 'LOAD DATA LOCAL INFILE...'?
Значение по умолчанию: false.
Начиная с версии: 3.0.3. |
allowUrlInLocalInfile
Драйвер должен позволить URL в 'LOAD DATA LOCAL INFILE'?
Значение по умолчанию: false.
Начиная с версии: 3.1.4. |
allowPublicKeyRetrieval
Позволяет специальный обмен, чтобы получить открытый ключ RSA сервера
непосредственно от сервера.
Значение по умолчанию: false.
Начиная с версии: 5.1.31. |
paranoid
Предотвратить показ уязвимой иинформации в сообщениях об ошибках и
структурах данных, хранящих уязвимые данные, когда возможно?
Значение по умолчанию: false.
Начиная с версии: 3.0.1. |
serverRSAPublicKeyFile
Путь к файлу открытого ключа RSA сервера для идентификации
sha256_password. Если не определено, открытый ключ будет получен от сервера.
Начиная с версии: 5.1.31. |
sslMode
По умолчанию сетевые соединения зашифрованы SSL,
это свойство разрешает безопасным соединениям быть выключенными или
применить разные уровни безопасности, которые будут выбраны.
Следующие значения позволены: "DISABLED" устанавливает незашифрованные связи,
"PREFERRED" (по умолчанию) устанавливает зашифрованные связи, если сервер
их позволил, иначе отступит к незашифрованным связям,
"REQUIRED" устанавливает безопасные соединения, если сервер их позволил,
терпит неудачу иначе, "VERIFY_CA" аналог "REQUIRED", но дополнительно
проверяет сертификат TLS сервера по настроенным сертификатам
Certificate Authority (CA), "VERIFY_IDENTITY" аналог "VERIFY_CA",
но дополнительно проверяет, что сертификат сервера соответствует хосту, к
которому предпринята связь.
Эта свойство заменило устаревшие свойства "useSSL", "requireSSL" и
"verifyServerCertificate", которые все еще приняты, но переведены на значение
для "sslMode", если "sslMode" явно не установлен: "useSSL=false" переведен к
"sslMode=DISABLED", {"useSSL=true", "requireSSL=false",
"verifyServerCertificate=false"} превращается в "sslMode=PREFERRED",
{"useSSL=true", "requireSSL=true", "verifyServerCertificate=false"}
превращается в "sslMode=REQUIRED", {"useSSL=true" И
"verifyServerCertificate=true"} превращается в "sslMode=VERIFY_CA".
Нет никаких эквивалентных устаревших параметров настройки для
"sslMode=VERIFY_IDENTITY". Обратите внимание на то, что для ВСЕХ версий
сервера настройка по умолчанию "sslMode" = "PREFERRED",
и это эквивалентно устаревшим параметрам настройки "useSSL=true",
"requireSSL=false" и "verifyServerCertificate=false", которые отличаются от
их настроек по умолчанию для Connector/J 8.0.12 и ранее в некоторых
ситуациях. Должны быть рассмотрены запросы, которые продолжают использовать
устаревшие свойства и полагаться на их старые настройки по умолчанию.
Устаревшие свойства проигнорированы, если "sslMode" установлен
явно. Если ни один из "sslMode" или "useSSL" не
установлен явно, настройка по умолчанию "sslMode=PREFERRED".
Значение по умолчанию: PREFERRED.
Начиная с версии: 8.0.13. |
Запросы.
Свойства и описания |
continueBatchOnError
Драйвер продолжает обрабатывать пакетные команды, если один
запрос терпит неудачу? JDBC позволяет оба варианта.
Значение по умолчанию: true.
Начиная с версии: 3.0.3. |
dontTrackOpenResources
Спецификация JDBC требует, чтобы драйвер автоматически отследил и закрыл
ресурсы, однако если ваше запрос не делает явного вызова close()
на запросах или наборах результатов, это может вызвать утечку памяти.
Установка этого свойства в true ослабляет это ограничение и может поднять
эффективность памяти для некоторых запросов. Также автоматическое закрытие
запросов и текущего ResultSet в
Statement.closeOnCompletion() и Statement.getMoreResults
([Statement.CLOSE_CURRENT_RESULT | Statement.CLOSE_ALL_RESULTS]),
соответственно, прекращается. Это свойство автоматически устанавливает
holdResultsOpenOverStatementClose=true.
Значение по умолчанию: false.
Начиная с версии: 3.1.7. |
queryInterceptors
Разграниченный запятой список классов, реализующих
"com.mysql.cj.interceptors.QueryInterceptor", который должен быть размещен в
"промежуточном" выполнении запросов, чтобы влиять на результаты.
QueryInterceptors результаты, возвращенные цепочкой, результаты, возвращенные
"текущим" перехватчиком, будут переданы следующему в цепи слева
направо, как определено в этом свойстве.
Начиная с версии: 8.0.7. |
queryTimeoutKillsConnection
Если перерыв, данный в Statement.setQueryTimeout() истекает, драйвер
должен насильственно прервать Связь вместо того, чтобы
пытаться прервать запрос?
Значение по умолчанию: false.
Начиная с версии: 5.1.9. |
Подготовленные запросы.
Свойства и описания |
allowNanAndInf
Драйвер должен разрешить NaN или +/-INF в PreparedStatement.setDouble()?
Значение по умолчанию: false.
Начиная с версии: 3.1.5. |
autoClosePStmtStreams
Драйвер должен автоматически вызвать .close()
на потоках/читателях, переданных как аргументы через методы set*()?
Значение по умолчанию: false.
Начиная с версии: 3.1.12. |
compensateOnDuplicateKeyUpdateCounts
Драйвер должен компенсировать количество обновлений "ON DUPLICATE KEY"
INSERT (2 = 1, 0 = 1), используя подготовленные запросы?
Значение по умолчанию: false.
Начиная с версии: 5.1.7. |
emulateUnsupportedPstmts
Драйвер должен обнаружить подготовленные запросы, которые не
поддерживаются сервером, и замениюь их клиентскими эмулированными версиями?
Значение по умолчанию: true.
Начиная с версии: 3.1.7. |
generateSimpleParameterMetadata
Драйвер должен произвести упрощенные метаданные параметра для
PreparedStatements, когда никакие метаданные недоступны или потому что
сервер не мог поддержать подготовку запроса
или подготовленные запросы серверной стороны отключены?
Значение по умолчанию: false.
Начиная с версии: 5.0.5. |
processEscapeCodesForPrepStmts
Драйвер должен обработать коды экранировки в запросах, которые
подготовлены? Поведение обработки по умолчанию в неподготовленных запросах
должно быть определено свойством 'enableEscapeProcessing'.
Значение по умолчанию: true.
Начиная с версии: 3.1.12. |
useServerPrepStmts
Используйте подготовленные запросы серверной стороны, если
сервер поддерживает их?
Значение по умолчанию: false.
Начиная с версии: 3.1.0. |
useStreamLengthsInPrepStmts
Учитывать параметр длины потока в вызове метода
PreparedStatement/ResultSet.setXXXStream()?
Значение по умолчанию: true.
Начиная с версии: 3.0.2. |
Наборы результатов.
Свойства и описания |
clobberStreamingResults
Это заставит текущий ResultSet быть автоматически закрытым, и любые
данные, все еще поступающие от сервера, будут отклонены, если другой запрос
будет выполнен, прежде чем все данные были прочитаны из сервера.
Значение по умолчанию: false.
Начиная с версии: 3.0.9. |
emptyStringsConvertToZero
Драйвер должен позволить преобразования от пустой строки
до числовых значений '0'?
Значение по умолчанию: true.
Начиная с версии: 3.1.8. |
holdResultsOpenOverStatementClose
Драйвер должен закрыть наборы результатов Statement.close()
как требуется спецификацией JDBC?
Значение по умолчанию: false.
Начиная с версии: 3.1.7. |
jdbcCompliantTruncation
Драйвер бросает исключения java.sql.DataTruncation, когда данные усечены,
как требуется спецификацией JDBC, когда связан с сервером, который
поддерживает предупреждения (MySQL 4.1.0 и более новый)? Это свойство не
имеет никакого эффекта, если sql-режим сервера включает
STRICT_TRANS_TABLES.
Значение по умолчанию: true.
Начиная с версии: 3.1.2. |
maxRows
Максимальное количество строк, чтобы возвратить (0 возвращает все).
Значение по умолчанию: 0.
Начиная с версии: все версии. |
netTimeoutForStreamingResults
Какое значение драйвер должен автоматически установить серверному
параметру 'net_write_timeout', когда текущая передача наборов результатов
используется? В секундах, значение '0' означает, что драйвер не пытается
приспособить это значение.
Значение по умолчанию: 600.
Начиная с версии: 5.1.0. |
padCharsWithSpace
Если у колонки набора результатов есть тип CHAR, и значение не заполняет
количество символов, определенных в DDL для колонки, драйвер должен дополнить
оставшиеся символы пробелами (для соблюдения ANSI)?
Значение по умолчанию: false.
Начиная с версии: 5.0.6. |
populateInsertRowWithDefaultValues
Используя ResultSets, которые являются CONCUR_UPDATABLE,
драйвер должен предварительно заполнить строку значениями по умолчанию от DDL
для таблицы, используемой в запросе, таким образом, те значения немедленно
доступны для ResultSet? Эта функциональность требует обращения к базе данных
для метаданных каждый раз, когда набор результатов этого типа создается. Если
отключено (по умолчанию), значения по умолчанию будут заполнены внутренним
вызовом refreshRow(), который задерживает значения по умолчанию и/или
значения, измененные триггерами
Значение по умолчанию: false.
Начиная с версии: 5.0.5. |
strictUpdates
Драйвер должен сделать строгую проверку (все отобранные первичные ключи)
обновляемых наборов результатов?
Значение по умолчанию: true.
Начиная с версии: 3.0.4. |
tinyInt1isBit
Драйвер должен рассматривать тип данных TINYINT(1) как тип BIT (потому что
сервер тихо преобразовывает BIT -> TINYINT(1), составляя таблицы)?
Значение по умолчанию: true.
Начиная с версии: 3.0.16. |
transformedBitIsBoolean
Если драйвер преобразовывает TINYINT(1) в другой тип, он должен
использовать BOOLEAN вместо BIT для будущей совместимости с MySQL-5.0,
поскольку у MySQL-5.0 есть тип BIT?
Значение по умолчанию: false.
Начиная с версии: 3.1.9. |
Метаданные.
Свойства и описания |
getProceduresReturnsFunctions
У Pre-JDBC4 DatabaseMetaData API есть только методы
getProcedures() и getProcedureColumns(), таким образом, они возвращают
информацию о метаданных для хранимых процедур и для функций.
JDBC4 был расширен методами getFunctions() и getFunctionColumns(),
ожидаемые поведения предыдущих методов не определены четко. Для JDBC4 и выше
по умолчанию 'true' в этой опции означает, что вызовы
DatabaseMetaData.getProcedures() и DatabaseMetaData.getProcedureColumns()
возвращают метаданные для процедур и для функций как прежде, поддерживая
обратную совместимость. Установка в 'false' предписывает
возвратить метаданные только для процедур.
Значение по умолчанию: true.
Начиная с версии: 5.1.26. |
noAccessToProcedureBodies
Когда определение типов параметра процедуры для CallableStatements
и подключенного пользователя не может получить доступ к телам процедуры через
"SHOW CREATE PROCEDURE" или выбрать в mysql.proc, драйвер должен вместо этого
создать основные метаданные (все параметры, о которых сообщают как INOUT
VARCHAR) вместо того, чтобы бросить исключение?
Значение по умолчанию: false.
Начиная с версии: 5.0.3. |
nullDatabaseMeansCurrent
Когда методы DatabaseMetadata просят параметр 'каталога' или 'схемы',
пустой указатель означает использовать текущую базу данных? См. также
свойство 'databaseTerm'.
Значение по умолчанию: false.
Начиная с версии: 3.1.8. |
useHostsInPrivileges
Добавить '@hostname' к пользователям в
DatabaseMetaData.getColumn/TablePrivileges().
Значение по умолчанию: true.
Начиная с версии: 3.0.2. |
useInformationSchema
Драйвер должен использовать INFORMATION_SCHEMA, чтобы получить информацию,
используемую DatabaseMetaData? По умолчанию 'true', соединяясь с MySQL
8.0.3+, иначе по умолчанию 'false'.
Значение по умолчанию: false.
Начиная с версии: 5.0.0. |
Обработка BLOB/CLOB.
Свойства и описания |
autoDeserialize
Драйвер должен автоматически обнаружить и десериализовать
объекты в полях BLOB?
Значение по умолчанию: false.
Начиная с версии: 3.1.5. |
blobSendChunkSize
Размер куска, чтобы использовать, посылая BLOB/CLOB через
ServerPreparedStatements. Обратите внимание на то, что это значение не может
превысить значение "maxAllowedPacket" и, если это так, тогда это значение
будет исправлено автоматически.
Значение по умолчанию: 1048576.
Начиная с версии: 3.1.9. |
blobsAreStrings
Драйвер должен всегда рассматривать BLOB как Strings, чтобы работать
в обход сомнительных метаданных, возвращенных сервером для GROUP BY?
Значение по умолчанию: false.
Начиная с версии: 5.0.8. |
clobCharacterEncoding
Кодировка символов, чтобы использовать для отправки и получения
TEXT, MEDIUMTEXT и LONGTEXT вместо формируемой связи characterEncoding.
Начиная с версии: 5.0.0. |
emulateLocators
Драйвер должен подражать java.sql.Blobs с локаторами? С этой
активированной опцией драйвер задержит загрузку фактических данных Blob, пока
к тому из методов получения (getInputStream(), getBytes() и т.д.)
на потоке blob не получили доступ. Для этого необходимо использовать
псевдоним столбца к актуальному имени Blob.
У особенности также есть следующие ограничения: SELECT, который создал набор
результатов, должен сослаться только на одну таблицу, у нее должен быть
первичный ключ, SELECT должен использовать псевдоним оригинального имени
столбца blob, определенный как последовательность, SELECT должен покрыть все
столбцы, которые составляют первичный ключ.
Значение по умолчанию: false.
Начиная с версии: 3.1.0. |
functionsNeverReturnBlobs
Драйвер должен всегда рассматривать данные из функций, возвращая BLOB как
String, чтобы работать в обход сомнительных метаданных, возвращенных сервером
для GROUP BY?
Значение по умолчанию: false.
Начиная с версии: 5.0.8. |
locatorFetchBufferSize
Если 'emulateLocators' = 'true', какого размера буфер должен
использоваться, получая данные BLOB для getBinaryInputStream?
Значение по умолчанию: 1048576.
Начиная с версии: 3.2.1. |
Обработка даты и времени.
Свойства и описания |
noDatetimeStringSync
Не гарантируйте, что
ResultSet.getDatetimeType().toString().equals(ResultSet.getString()).
Значение по умолчанию: false.
Начиная с версии: 3.1.7. |
sendFractionalSeconds
Пошлите дробную часть секунд из TIMESTAMP. Если установлено в false,
значение наносекунд в TIMESTAMP будет усечено прежде, чем послать любые
данные в сервер. Этот выбор применяется только к подготовленным запросам,
вызываемым запросам или обновляемым наборам результатов.
Значение по умолчанию: true.
Начиная с версии: 5.1.37. |
serverTimezone
Отвергните обнаружение/отображение часового пояса.
Используется, когда часовой пояс от сервера не отображается к
часовому поясу Java.
Начиная с версии: 3.0.2. |
treatUtilDateAsTimestamp
Передавать java.util.Date как TIMESTAMP в целях
PreparedStatement.setObject()?
Значение по умолчанию: true.
Начиная с версии: 5.0.5. |
yearIsDateType
Драйвер JDBC должен передать тип MySQL "YEAR" как
java.sql.Date или SHORT?
Значение по умолчанию: true.
Начиная с версии: 3.1.9. |
zeroDateTimeBehavior
Что должно произойти, когда драйвер сталкивается с DATETIME, которые
составлены полностью из нолей (используемый MySQL, чтобы представлять
недействительные даты)? Действительные значения:
"EXCEPTION", "ROUND" и "CONVERT_TO_NULL".
Значение по умолчанию: EXCEPTION.
Начиная с версии: 3.1.4. |
Высокая доступность и объединение в кластеры.
Свойства и описания |
autoReconnect
Драйвер должен попытаться восстановить несвежие и/или мертвые связи?
Если позволено, драйвер бросит исключение для запроса на несвежей или мертвой
связи, которые принадлежат текущей транзакции, но попытается снова соединится
перед следующим запросом на связи в новой транзакции. Использование этой
особенности не рекомендуется, потому что есть побочные эффекты с состоянием
сеанса и непротиворечивостью данных, когда запросы не работают с
SQLExceptions правильно, и разработан только чтобы использоваться, когда вы
не способны настроить свой запрос работать с SQLExceptions, следующим из
мертвых и несвежих связей правильно. Альтернативно, как последний выбор,
исследуйте настройку серверной переменной MySQL "wait_timeout"
к высокому значению, а не по умолчанию 8 часов.
Значение по умолчанию: false.
Начиная с версии: 1.1. |
autoReconnectForPools
Используйте стратегию повторного соединения, подходящую для пулов связи.
Значение по умолчанию: false.
Начиная с версии: 3.1.3. |
failOverReadOnly
При сбое в режиме autoReconnect
связь должна быть установлена в 'только для чтения'?
Значение по умолчанию: true.
Начиная с версии: 3.0.12. |
maxReconnects
Максимальное количество попыток реконнекта, если autoReconnect = true.
Значение по умолчанию: 3.
Начиная с версии: 1.1. |
reconnectAtTxEnd
Если autoReconnect = true, драйвер должен делать попытку повторных
соединений в конце каждой транзакции?
Значение по умолчанию: false.
Начиная с версии: 3.0.10. |
retriesAllDown
Используя выравнивание нагрузки или отказоустойчивость, сколько раз
драйвер должен опросить доступные хосты, пытаясь соединиться.
Между циклами драйвер сделает паузу в течение 250 мс, если никакие серверы
не будут доступны.
Значение по умолчанию: 120.
Начиная с версии: 5.1.6. |
initialTimeout
Если включен autoReconnect, начальное время, которое надо ждать между
повторными попытками подключения (в секундах).
Значение по умолчанию: 2.
Начиная с версии: 1.1. |
queriesBeforeRetryMaster
Количество запросов перед отступанием к основному хосту при отказе
(используя отказоустойчивость мультихоста). При любом условии
'queriesBeforeRetryMaster' или 'secondsBeforeRetryMaster'
попытка снова соединиться с основным хостом будет сделана.
Установка обоих свойств к 0 отключает автоматический возврат к
основному хосту в границах транзакции.
Значение по умолчанию: 50.
Начиная с версии: 3.0.2. |
secondsBeforeRetryMaster
Сколько времени драйвер должен ждать
прежде, чем попытаться снова соединиться с основным хостом? При любом условии
'queriesBeforeRetryMaster' или 'secondsBeforeRetryMaster'
попытка снова соединиться с основным хостом будет сделана.
Установка обоих свойств к 0 отключает автоматический возврат к
основному хосту в границах транзакции.
Значение по умолчанию: 30.
Начиная с версии: 3.0.2. |
allowMasterDownConnections
По умолчанию осведомленная о репликации
связь не соединится, когда формируемые основные хосты будут все недоступны
при начальной связи. Настройка этой опции в 'true'
позволяет устанавливать начальную связь при недоступных подчиненных
серверах в статусе только для чтения. Это не предотвратит последующие
неудачи, переключаясь назад на основные хосты, т.е. устанавливая соединение
репликации в состояние чтения-записи.
Значение по умолчанию: false.
Начиная с версии: 5.1.27. |
allowSlaveDownConnections
По умолчанию осведомленная о репликации связь
не соединится, когда формируемые подчиненные хосты будут все недоступны при
начальной связи. Настройка этой опции в 'true' позволяет устанавливать
начальную связь. Это не предотвратит неудачи, переключаясь на
устанавливая соединение репликации в состояние только для чтения.
Свойство 'readFromMasterWhenNoSlaves' должно использоваться с этой целью.
Значение по умолчанию: false.
Начиная с версии: 6.0.2. |
ha.enableJMX
Позволяет основанное на JMX управление уравновешенными
группами связи, включая живое дополнение/удаление хостов от пула
выравнивания нагрузки. Позволяет основанное на JMX управление группами
соединения репликации, включая живое продвижение подчиненных хостов,
добавление новых подчиненных и удаление любых хостов из
уравновешенных пулов связи.
Значение по умолчанию: false.
Начиная с версии: 5.1.27. |
loadBalanceHostRemovalGracePeriod
Устанавливает льготный период ожидания хоста, удаляемого из уравновешенной
связи, когда это в настоящее время активный хост.
Значение по умолчанию: 15000.
Начиная с версии: 6.0.3. |
readFromMasterWhenNoSlaves
Осведомленные о репликации связи распределяют нагрузку при помощи основных
хостов, когда в состоянии чтения-записи и при помощи подчиненных, когда в
режиме только для чтения. Если, устанавливая связь со статусом только для
чтения, ни один из подчиненных хостов не доступен, SQLExeception брошен.
Установка этой опции в 'true' позволяет терпеть неудачу основным хостам,
устанавливая состояние связи в только для чтения, когда никакие
подчиненные хосты не доступны в момент переключения.
Значение по умолчанию: false.
Начиная с версии: 6.0.2. |
selfDestructOnPingMaxOperations
Если установлено в ненулевое значение, драйвер сообщит о закыртии
связи и о неудаче, когда вызван
Connection.ping() или Connection.isValid(int),
если число команд связи, посланных в сервер, превышает это значение.
Значение по умолчанию: 0.
Начиная с версии: 5.1.6. |
selfDestructOnPingSecondsLifetime
Если установлено в ненулевое значение, драйвер закроет связь и сообщит о
неудаче, когда вызван Connection.ping() или Connection.isValid(int), если
время жизни связи превышает это значение (в миллисекундах).
Значение по умолчанию: 0.
Начиная с версии: 5.1.6. |
ha.loadBalanceStrategy
Используя уравновешенную связь, чтобы соединиться с узлами SQL в
конфигурации MySQL Cluster/NDB (при помощи префикса URL
"jdbc:mysql:loadbalance://"), какой алгоритм балансировки нагрузки должен
использоваться: (1) "random": драйвер выберет случайный хост каждому запросу.
Это имеет тенденцию работать лучше, чем циклический алгоритм, поскольку
хаотичность будет несколько сглаживать распределение нагрузок, где запросы
имеют разное время ответа, в то время как циклический алгоритм может иногда
приводить к перегруженным узлам, если есть изменения времени ответа
через рабочую нагрузку. (2) "bestResponseTime": драйвер будет
маршрутизировать запрос хосту, у которого было лучшее время отклика для
предыдущей транзакции. (3) "serverAffinity": драйвер первоначально пытается
использовать близость сервера, все еще извлекая выгоду из аспектов
отказоустойчивости и выравнивания нагрузки. Близость сервера требует, чтобы
список был предоставлен, используя свойство 'serverAffinityOrder'.
Если ни один из серверов, перечисленных в списке близости, не отзывается,
драйвер тогда обращается к стратегии "random", чтобы
возобновить выбор следующего сервера.
Значение по умолчанию: random.
Начиная с версии: 5.0.6. |
loadBalanceAutoCommitStatementRegex
Когда включено выравнивание нагрузки для запросов auto-commit
(через loadBalanceAutoCommitStatementThreshold), счетчик запросов
увеличится только, когда SQL будет соответствовать регулярному выражению.
По умолчанию соответствует каждый запрос.
Начиная с версии: 5.1.15. |
loadBalanceAutoCommitStatementThreshold
Когда включен auto-commit, количество запросов, которые должны быть
выполнены прежде, чем вызвать выравнивание нагрузки, чтобы повторно
балансировать. Значение по умолчанию 0 предписывает
повторно балансировать только, когда сталкиваются с исключениями или
выключен auto-commit и транзакции явно переданы или отменены.
Значение по умолчанию: 0.
Начиная с версии: 5.1.15. |
loadBalanceBlacklistTimeout
Время в миллисекундах между проверками серверов, которые недоступны,
управляет, сколько времени сервер живет в глобальном черном списке.
Значение по умолчанию: 0.
Начиная с версии: 5.1.0. |
loadBalanceConnectionGroup
Логическая группа уравновешенных связей в classloader,
используемом, чтобы управлять различными группами независимо.
Если не определено, живое управление уравновешенными связями искалечено.
Начиная с версии: 5.1.13. |
loadBalanceExceptionChecker
Полностью квалифицированное имя класса контролера исключения.
Класс должен осуществить интерфейс
com.mysql.cj.jdbc.ha.LoadBalanceExceptionChecker и используется, чтобы
смотреть SQLExceptions и определить, должны ли они передать
отказоустойчивость другому хосту в уравновешенном развертывании.
Значение по умолчанию:
com.mysql.cj.jdbc.ha.StandardLoadBalanceExceptionChecker.
Начиная с версии: 5.1.13. |
loadBalancePingTimeout
Время в миллисекундах, чтобы ждать ответа от каждой из уравновешенных
физических связей, используя уравновешенное соединение.
Значение по умолчанию: 0.
Начиная с версии: 5.1.13. |
loadBalanceSQLExceptionSubclassFailover
Разграниченный запятой список классов/интерфейсов, используемых
по умолчанию контролером исключения, чтобы определить, должен ли данный
SQLException вызвать отказоустойчивость. Сравнение сделано, используя
Class.isInstance(SQLException) с использованием брошенного SQLException.
Начиная с версии: 5.1.13. |
loadBalanceSQLStateFailover
Разграниченный запятой список кодов SQLState, используемых по умолчанию
контролером исключения, чтобы определить, должен ли данный SQLException
вызвать отказоустойчивость. SQLState данного SQLException оценен, чтобы
определить, начинается ли он с какого-либо значения
в разграниченном запятой списке.
Начиная с версии: 5.1.13. |
loadBalanceValidateConnectionOnSwapServer
Уравновешенная cвязь должна явно проверить, жива ли связь, когда
происходит обмен на новую физическую связь при commit/rollback?
Значение по умолчанию: false.
Начиная с версии: 5.1.13. |
pinGlobalTxToPhysicalConnection
Используя XAConnections, драйвер должен гарантировать, что операции на
данном XID всегда направляются к той же самой физической связи?
Это позволяет XAConnection поддерживать
"XA START ... JOIN" после "XA END".
Значение по умолчанию: false.
Начиная с версии: 5.0.1. |
replicationConnectionGroup
Логическая группа соединений репликации в classloader, используемая,
чтобы управлять различными группами независимо. Если не определено, живое
управление соединениями репликации искалечено.
Начиная с версии: 8.0.7. |
resourceId
Глобально уникальное имя, которое определяет ресурс,
с которым этот источник данных или связь связываются, используется для
XAResource.isSameRM(), когда драйвер не может определить это значение на
основе имен хоста, используемых в URL.
Начиная с версии: 5.0.1. |
serverAffinityOrder
Список разделенных запятой значений, содержащий пары хоста/порта, которые
должны использоваться в выравнивании нагрузки по схеме "serverAffinity".
Только подмножество хостов, перечисленных в главной группе хостов в этом URL,
будет использоваться, и они должны быть идентичными в регистре и типе, то
есть нельзя использовать IP-адрес в одном месте и соответствующее
имя хоста в другом.
Начиная с версии: 8.0.8. |
Исполнительные расширения.
Свойства и описания |
callableStmtCacheSize
Если включено 'cacheCallableStmts', сколько вызываемых запросов
должно быть кэшировано?
Значение по умолчанию: 100.
Начиная с версии: 3.1.2. |
metadataCacheSize
Количество запросов для кэширования ResultSetMetadata, если
cacheResultSetMetaData установлен в 'true'.
Значение по умолчанию: 50.
Начиная с версии: 3.1.1. |
useLocalSessionState
Драйвер должен обратиться к внутренним значениям autocommit
и изоляции транзакции, которые установлены
Connection.setAutoCommit() и Connection.setTransactionIsolation(),
и операционному состоянию, заданному протоколом, вместо того, чтобы запросить
базу данных или вслепую послать команды в базу данных для вызова методов
commit() или rollback()?
Значение по умолчанию: false.
Начиная с версии: 3.1.7. |
useLocalTransactionState
Драйвер должен использовать состояние транзакции, обеспеченное протоколом
MySQL, чтобы определить, нужно ли на самом деле послать в базу данных
commit() или rollback()?
Значение по умолчанию: false.
Начиная с версии: 5.1.7. |
prepStmtCacheSize
Если кэширование подготовленных запросов позволено,
сколько подготовленных запросов должно кэшироваться?
Значение по умолчанию: 25.
Начиная с версии: 3.0.10. |
prepStmtCacheSqlLimit
Если кэширование подготовленных запросов позволено,
размер самого большого SQL, который драйвер кэширует?
Значение по умолчанию: 256.
Начиная с версии: 3.0.10. |
parseInfoCacheFactory
Название класса, осуществляющего com.mysql.cj.CacheAdapterFactory,
который будет использоваться, чтобы создать кэши для разобранного
представления клиентских подготовленных запросов.
Значение по умолчанию: com.mysql.cj.PerConnectionLRUFactory.
Начиная с версии: 5.1.1. |
serverConfigCacheFactory
Название класса, осуществляющего
com.mysql.cj.CacheAdapterFactory <String, Map<String, String>>,
который будет использоваться, чтобы создать кэши значений
конфигурации сервера MySQL.
Значение по умолчанию: com.mysql.cj.util.PerVmServerConfigCacheFactory.
Начиная с версии: 5.1.1. |
alwaysSendSetIsolation
Драйвер должен всегда общаться с базой данных, когда вызван
Connection.setTransactionIsolation()? Если false, драйвер
будет общаться с базой данных только когда требуемая изоляция транзакции
будет отличаться от последнего значения, которое было установлено через
Connection.setTransactionIsolation(), или значения, которое было прочитано из
сервера, когда связь была установлена. Обратите внимание на то, что
useLocalSessionState=true вызовет то же самое поведение, как
alwaysSendSetIsolation=false, независимо от того, как установлен
alwaysSendSetIsolation.
Значение по умолчанию: true.
Начиная с версии: 3.1.7. |
maintainTimeStats
Драйвер должен поддержать различные внутренние таймеры, чтобы позволить
вычисления времени простоя, а также больше многословных сообщений об ошибках,
когда связь с сервером прерывается? Установка в false удаляет по крайней мере
два вызова System.getCurrentTimeMillis() на запрос.
Значение по умолчанию: true.
Начиная с версии: 3.1.9. |
useCursorFetch
Драйвер должен использовать основанную на курсоре установку, чтобы
получить строки? Если установлено в "true" и "defaultFetchSize" > 0
(или setFetchSize() > 0 вызван в запросе), тогда основанный на курсоре
набор результатов будет использоваться. Обратите внимание на то, что
"useServerPrepStmts" автоматически установлен в "true" в этом случае, потому
что функциональность курсора доступна только для подготовленных
запросов серверной стороны.
Значение по умолчанию: false.
Начиная с версии: 5.0.0. |
cacheCallableStmts
Если драйвер кэширует стадию парсинга CallableStatements.
Значение по умолчанию: false.
Начиная с версии: 3.1.2. |
cachePrepStmts
Действительно ли драйвер должен кэшировать стадию парсинга
PreparedStatements клиентских подготовленных запросов,
проверить на пригодность сами запросы?
Значение по умолчанию: false.
Начиная с версии: 3.0.10. |
cacheResultSetMetadata
Действительно ли драйвер должен кэшировать ResultSetMetaData для
Statements и PreparedStatements? Требует JDK-1.4+.
Значение по умолчанию: false.
Начиная с версии: 3.1.1. |
cacheServerConfiguration
Действительно ли драйвер должен кэшировать результаты 'SHOW
VARIABLES' и 'SHOW COLLATION' на основе URL?
Значение по умолчанию: false.
Начиная с версии: 3.1.5. |
defaultFetchSize
Драйвер вызовет setFetchSize(n) с этим значением на всех
недавно созданных запросах.
Значение по умолчанию: 0.
Начиная с версии: 3.1.9. |
dontCheckOnDuplicateKeyUpdateInSQL
Остановит проверку содержит ли каждый оператор INSERT пункт
"ON DUPLICATE KEY UPDATE". Как побочный эффект, получая произведенную
информацию о ключах, запросы возвратят список, где обычно ее не было бы.
Также знайте, что в этом случае список произведенных возвращенных ключей
может не быть точным. Эффект этого значения отменяется, если установлено
одновременно с 'rewriteBatchedStatements=true'.
Значение по умолчанию: false.
Начиная с версии: 5.1.32. |
elideSetAutoCommits
Используя MySQL-4.1 или более новый, драйвер должен только выпустить
запросы 'set autocommit=n', когда состояние сервера не соответствует
требуемому Connection.setAutoCommit(boolean)?
Значение по умолчанию: false.
Начиная с версии: 3.1.3. |
enableEscapeProcessing
Устанавливает поведение обработки экранировки по умолчанию для объектов
запроса. Метод Statement.setEscapeProcessing()
может использоваться, чтобы определить поведение обработки
для отдельного объекта запроса. Поведение обработки по умолчанию в
подготовленных запросах должно быть определено свойством
'processEscapeCodesForPrepStmts'.
Значение по умолчанию: true.
Начиная с версии: 6.0.1. |
enableQueryTimeouts
Когда позволено, набор тайм-аутов запроса установлен через
Statement.setQueryTimeout(), используя общий экземпляр
java.util.Timer для планирования. Даже если тайм-аут не истекает прежде, чем
запрос обрабатывается, память, используемая TimerTask
для данного тайм-аута, не будет восстановлена до времени, когда он истек
бы, если бы это не было отменено драйвером. Окружающая среда высокой
нагрузки могла бы хотеть рассмотреть отключение этой функциональности.
Значение по умолчанию: true.
Начиная с версии: 5.0.6. |
largeRowSizeThreshold
Какой размер набора результатов драйвер JDBC должен считать большим и
использовать более эффективный способ представлять его внутренне?
Значение по умолчанию: 2048.
Начиная с версии: 5.1.1. |
readOnlyPropagatesToServer
Драйвер должен сделать соответствующие запросы, чтобы неявно установить
операционный режим доступа на серверной стороне, когда вызван
Connection.setReadOnly()? Установка этого значения к 'true'
позволяет InnoDB потенциальную оптимизацию только для чтения, но также и
требует дополнительного обмена данными, чтобы установить правильное
операционное состояние. Даже если это свойство будет установлено в 'false',
драйвер сделает максимальные усилия, чтобы предотвратить выполнение запросов,
изменения состояния базы данных. Требует минимум MySQL 5.6.
Значение по умолчанию: true.
Начиная с версии: 5.1.35. |
rewriteBatchedStatements
Драйвер должен использовать мультизапросы (независимо от
"allowMultiQueries"), а также переписывание подготовленных запросов для
INSERT во вставки нескольких значений, когда вызывают executeBatch()?
Заметьте, что у этого есть потенциал для инъекции SQL, используя простой
java.sql.Statements, если ваш код не анализирует ввод правильно.
Заметьте, что для подготовленных запросов серверной стороны
запросы не могут в настоящее время использовать в своих интересах
опцию переписывания, и что, если вы не определяете длину потока, используя
PreparedStatement.set*Stream(), драйвер не будет в состоянии определить
оптимальное количество параметров на пакет, и вы могли бы получить ошибку от
драйвера, что пакет слишком большой. Statement.getGeneratedKeys() для этих
переписанных запросов работает только, когда вся партия включает операторы
INSERT. Пожалуйста, будьте осторожны с использованием
rewriteBatchedStatements=true в сочетании с INSERT .. ON
DUPLICATE KEY UPDATE, который для переписанного сервером запроса возвращает
только одно значение как сумму всех затронутых (или найденных) строк
в партии, и невозможно отобразить его правильно к первоначальным запросам.
В этом случае драйвер возвращает 0 в результате каждого пакетного запроса,
если полное количество было 0, и Statement.SUCCESS_NO_INFO в результате
каждого пакетного запроса, если полное количество было >0.
Значение по умолчанию: false.
Начиная с версии: 3.1.13. |
useReadAheadInput
Использовать более новый оптимизированный неблокирующий буферизованный
поток ввода, читая с сервера?
Значение по умолчанию: true.
Начиная с версии: 3.1.5. |
Отладка/Профилирование.
Свойства и описания |
logger
Название класса, который осуществляет "com.mysql.cj.log.Log",
который будет использоваться, чтобы зарегистрировать сообщения
(по умолчанию "com.mysql.cj.log.StandardLogger", который пишет в STDERR).
Значение по умолчанию: com.mysql.cj.log.StandardLogger.
Начиная с версии: 3.1.1. |
profilerEventHandler
Название класса, который осуществляет интерфейс
com.mysql.cj.log.ProfilerEventHandler, который будет использоваться, чтобы
обращаться с событиями профилирования/отслеживания.
Значение по умолчанию: com.mysql.cj.log.LoggingProfilerEventHandler.
Начиная с версии: 5.1.6. |
useNanosForElapsedTime
Для профилирования/отладки функциональности, которая измеряет прошедшее
время, драйвер должен попытаться использовать обработку наносекунд при
ее наличии (JDK >= 1.5)?
Значение по умолчанию: false.
Начиная с версии: 5.0.7. |
maxQuerySizeToLog
Управляет максимальной длиной части запроса, который будет
зарегистрирован при отладке.
Значение по умолчанию: 2048.
Начиная с версии: 3.1.3. |
profileSQL
Трассировка запросов и время выполнения/получения к формируемому
'profilerEventHandler'.
Значение по умолчанию: false.
Начиная с версии: 3.1.0. |
logSlowQueries
Должны ли запросы, которые занимают больше времени, чем
'slowQueryThresholdMillis' или определенные
'autoSlowLog' зарегистрированы 'profilerEventHandler'?
Значение по умолчанию: false.
Начиная с версии: 3.1.2. |
slowQueryThresholdMillis
Если включено 'logSlowQueries', сколько времени запрос должен занять
(в ms), прежде чем он будет зарегистрирован как медленный?
Значение по умолчанию: 2000.
Начиная с версии: 3.1.2. |
slowQueryThresholdNanos
Если включено 'logSlowQueries', 'useNanosForElapsedTime' установлен в
true, и это свойство установлено в ненулевое значение, драйвер будет
использовать этот порог (в наносекундах), чтобы определить, был
ли запрос медленным.
Значение по умолчанию: 0.
Начиная с версии: 5.0.7. |
autoSlowLog
Вместо того, чтобы использовать slowQueryThreshold*, чтобы определить,
достаточно ли запрос медленный, чтобы быть зарегистрированным, поддержать ли
статистические данные, которые позволяют драйверу
определять запросы, которые вне 99%?
Значение по умолчанию: true.
Начиная с версии: 5.1.4. |
explainSlowQueries
Если включено 'logSlowQueries', драйвер должен автоматически выпустить
'EXPLAIN' на сервере и послать результаты в журнал как
уровень протокола WARN?
Значение по умолчанию: false.
Начиная с версии: 3.1.2. |
gatherPerfMetrics
Драйвер должен собрать исполнительные метрики и сообщить о них через
протокол каждые 'reportMetricsIntervalMillis' миллисекунд?
Значение по умолчанию: false.
Начиная с версии: 3.1.2. |
reportMetricsIntervalMillis
Если включено 'gatherPerfMetrics', как часто они должны
быть зарегистрированы (в ms)?
Значение по умолчанию: 30000.
Начиная с версии: 3.1.2. |
logXaCommands
Драйвер должен зарегистрировать команды XA, посланные
MysqlXaConnection серверу как уровень протокола DEBUG?
Значение по умолчанию: false.
Начиная с версии: 5.0.5. |
traceProtocol
Сетевой протокол должен быть зарегистрирован на уровне TRACE?
Значение по умолчанию: false.
Начиная с версии: 3.1.2. |
enablePacketDebug
Когда включено, кольцевой буфер пакетов 'packetDebugBufferSize'
будет сохранен и сброшен в дамп, когда исключения будут брошены в ключевые
области в коде драйвера.
Значение по умолчанию: false.
Начиная с версии: 3.1.3. |
packetDebugBufferSize
Максимальное количество пакетов, чтобы сохранить, когда
'enablePacketDebug' = true.
Значение по умолчанию: 20.
Начиная с версии: 3.1.3. |
useUsageAdvisor
Драйвер должен выпустить предупреждения 'usage', советуя надлежащее и
эффективное использование JDBC и MySQL Connector/J в 'profilerEventHandler'?
Значение по умолчанию: false.
Начиная с версии: 3.1.1. |
resultSetSizeThreshold
Если 'useUsageAdvisor' = true, сколько строк набор результатов должен
содержать, прежде чем драйвер предупреждает, что это подозрительно большое?
Значение по умолчанию: 100.
Начиная с версии: 5.0.5. |
autoGenerateTestcaseScript
Драйвер должен сбросить в дамп в STDERR SQL, который выполняет, включая
подготовленные запросы серверной стороны?
Значение по умолчанию: false.
Начиная с версии: 3.1.9. |
Исключения/Предупреждения.
Свойства и описания |
dumpQueriesOnException
Драйвер должен сбросить дамп содержания запроса, посланного в сервер, в
сообщении для SQLExceptions?
Значение по умолчанию: false.
Начиная с версии: 3.1.3. |
exceptionInterceptors
Разграниченный запятой список классов, реализующих
com.mysql.cj.exceptions.ExceptionInterceptor. Эти классы будут
создавать по одному экземпляру для каждого подключения, всем SQLExceptions,
брошенным драйвером, позволят быть перехваченным этими перехватчиками
цепочечным способом с первым классом, перечисленным как начало цепи.
Начиная с версии: 5.1.8. |
ignoreNonTxTables
Проигнорировать нетранзакционное предупреждение таблицы для отмены?
Значение по умолчанию: false.
Начиная с версии: 3.0.9. |
includeInnodbStatusInDeadlockExceptions
Включать вывод "SHOW ENGINE INNODB STATUS" в сообщениях об исключениях,
когда исключения мертвой блокировки будут обнаружены?
Значение по умолчанию: false.
Начиная с версии: 5.0.7. |
includeThreadDumpInDeadlockExceptions
Включать текущий дамп потока Java в сообщения об исключениях, когда
исключения мертвой блокировки будут обнаружены?
Значение по умолчанию: false.
Начиная с версии: 5.1.15. |
includeThreadNamesAsStatementComment
Включать название текущего потока как комментарий, видимый в
"SHOW PROCESSLIST", или в дампах мертвой блокировки Innodb, полезных в
корреляции с "includeInnodbStatusInDeadlockExceptions=true" и
"includeThreadDumpInDeadlockExceptions=true".
Значение по умолчанию: false.
Начиная с версии: 5.1.15. |
useOnlyServerErrorMessages
Не транслировать 'стандартные' сообщения об ошибках SQLState к сообщениям
об ошибках, возвращенным сервером.
Значение по умолчанию: true.
Начиная с версии: 3.0.15. |
Настройки для интеграции с другими продуктами.
Свойства и описания |
overrideSupportsIntegrityEnhancementFacility
Драйвер должен возвратить "true" для
DatabaseMetaData.supportsIntegrityEnhancementFacility() даже если база
данных не поддерживает его, приложениям, которые требуют, чтобы этот метод
возвратил "true", чтобы сигнализировать о поддержке внешних ключей, даже при
том, что спецификация SQL указывает, что это средство содержит намного
больше, чем просто поддержка внешнего ключа (одно такое приложение
это OpenOffice)?
Значение по умолчанию: false.
Начиная с версии: 3.1.12. |
ultraDevHack
Создать PreparedStatements для prepareCall()
при необходимости, потому что UltraDev поврежден и выпускает
prepareCall() для ВСЕХ запросов?
Значение по умолчанию: false.
Начиная с версии: 2.0.3. |
Совместимость с JDBC.
Свойства и описания |
useColumnNamesInFindColumn
До JDBC-4.0 спецификации JDBC связывали ошибку с тем, что могло быть дано
как "column name" в методах ResultSet (вроде findColumn())
или получателях, которые взяли свойство String. JDBC-4.0 разъяснил "column
name" как метку в пункте "AS", возвращаемую
ResultSetMetaData.getColumnLabel(), или имя столбца, если нет AS.
Установка этого значения в "true" даст поведение, которое является подходящим
JDBC-3.0 и более ранним версиям спецификации JDBC, но которое из-за ошибки
спецификации могло дать неожиданные результаты. Это свойство предпочтительнее
"useOldAliasMetadataBehavior", если вам не нужно определенное поведение,
которое это обеспечивает относительно ResultSetMetadata.
Значение по умолчанию: false.
Начиная с версии: 5.1.7. |
pedantic
Следовать спецификацией символов JDBC.
Значение по умолчанию: false.
Начиная с версии: 3.0.0. |
useOldAliasMetadataBehavior
Драйвер должен использовать устаревшее поведение для "AS"
на столбцах и таблицах и возвратить только псевдонимы (если таковые имеются)
для ResultSetMetaData.getColumnName() или ResultSetMetaData.getTableName(), а
не первоначальный столбец/имя таблицы?
В 5.0.x значение по умолчанию было true.
Значение по умолчанию: false.
Начиная с версии: 5.0.4. |
X Protocol и X DevAPI.
Свойства и описания |
xdevapi.asyncResponseTimeout
Перерыв (в секундах) для получения ответа сервера с помощью X Protocol.
Значение по умолчанию: 300.
Начиная с версии: 8.0.7. |
xdevapi.auth
Механизм аутентификации, чтобы использовать с X Protocol.
Позволенные значения: "SHA256_MEMORY", "MYSQL41",
"PLAIN" и "EXTERNAL". Значение нечувствительно к регистру. Если свойство не
установлено, механизм выбран в зависимости от типа подключения: "PLAIN"
используется для связей TLS, "SHA256_MEMORY" или "MYSQL41"
используется для незашифрованных связей.
Значение по умолчанию: PLAIN.
Начиная с версии: 8.0.8. |
xdevapi.connect-timeout
X DevAPI тайм-аут для сокетного соединения (в миллисекундах), '0' = без
тайм-аута. По умолчанию '10000'. Если не задан явно "xdevapi.connect-timeout"
и задан явно "connectTimeout", "xdevapi.connect-timeout" принимает значение
из "connectTimeout". Если "xdevapi.useAsyncProtocol=true",
проигнорированы "xdevapi.connect-timeout" и "connectTimeout".
Значение по умолчанию: 10000.
Начиная с версии: 8.0.13. |
xdevapi.connection-attributes
Разграниченный запятой список определенных пользователями пар key=value
(в дополнение к стандартным определенным X Protocol парам key=value), чтобы
передать MySQL Server для показа как параметры связи в таблицах
PERFORMANCE_SCHEMA tables session_account_connect_attrs и
session_connect_attrs. Например:
xdevapi.connection-attributes=key1=value1,key2=value2 или
xdevapi.connection-attributes=[key1=value1,key2=value2].
Эта функциональность доступна для использования только с MySQL Server 8.0.16
или позже. Более ранние версии X-протокола не поддерживают признаки связи,
заставляя этот параметр конфигурации быть проигнорированными. Для ситуаций,
где скорость создания/инициализации сессии очень важна, установка
xdevapi.connection-attributes=false заставит обойти обработку признака связи.
Начиная с версии: 8.0.16. |
xdevapi.dns-srv
Опция для инструктирования драйвера использовать данное имя хоста для
поиска записи DNS SRV и использовать получающийся список хостов в связи
отказоустойчивости мультихоста. Обратите внимание на то, что единственное имя
хоста без порта должно быть обеспечено, когда это включено.
Значение по умолчанию: false.
Начиная с версии: 8.0.19. |
xdevapi.ssl-mode
Режим SSL. Если не определен, применияется "sslMode".
Поскольку "PREFERRED" не применим к X-протоколу, если "xdevapi.ssl-mode" не
установлено, а "sslMode" = "PREFERRED", "xdevapi.ssl-mode" = "REQUIRED".
Значение по умолчанию: REQUIRED.
Начиная с версии: 8.0.7. |
xdevapi.ssl-truststore
URL к базе ключей сертификатов CA, которой доверяют. Если не определено,
используется значение trustCertificateKeyStoreUrl.
Начиная с версии: 6.0.6. |
xdevapi.ssl-truststore-password
Пароль для базы ключей сертификатов CA, которой доверяют.
Если не определено, используется значение trustCertificateKeyStorePassword.
Начиная с версии: 6.0.6. |
xdevapi.ssl-truststore-type
Тип базы ключей сертификатов CA, которой доверяют. Если не определено,
используется значение trustCertificateKeyStoreType.
Значение по умолчанию: JKS.
Начиная с версии: 6.0.6. |
xdevapi.tls-ciphersuites
Значения шифров для использования на сокетах SSL. Если не определено,
используется значение enabledSSLCipherSuites.
Начиная с версии: 8.0.19. |
xdevapi.tls-versions
Значения, перекрывающие протоколы TLS для использования на сокетах SSL.
Если не определено, используется значение enabledTLSProtocols.
Начиная с версии: 8.0.19. |
xdevapi.useAsyncProtocol
Используйте асинхронный вариант X Protocol.
Значение по умолчанию: false.
Начиная с версии: 6.0.0. |
6.4. Примечания о реализации JDBC API
MySQL Connector/J как строгое внедрение
JDBC API, проходит все тесты в общедоступной версии набора
тестов на соблюдение Oracle's JDBC. Спецификация JDBC гибка в том, как
определенная функциональность должна быть осуществлена. Эта секция сообщает
подробности на уровне интерфейса о решениях реализации, которые могли бы
затронуть, как вы кодируете запросы с MySQL Connector/J.
BLOB
Можно подражать BLOB с локаторами, добавляя свойство
emulateLocators=true к JDBC URL.
Используя этот метод, драйвер задержит загрузку фактических данных BLOB, пока
вы не будете получать другие данные и затем будете использовать методы поиска
(getInputStream() ,
getBytes() и т.д.) на потоке данных BLOB.
Необходимо использовать псевдоним столбца со
значением столбца к подлинному имени BLOB, например:
SELECT id, 'data' as blob_data from blobtable
Необходимо также следовать этим правилам:
SELECT
должен сослаться только на одну таблицу. У таблицы должен быть
primary key.
SELECT должен применить
псевдоним оригинального имени столбца BLOB, определенного как
строка, к альтернативному названию.
SELECT
должен покрыть все столбцы, которые составляют первичный ключ.
Внедрение BLOB не позволяет оперативную модификацию
(это копии, как сообщает метод
DatabaseMetaData.locatorsUpdateCopies() ).
Из-за этого используйте соответствующий
PreparedStatement.setBlob() или
ResultSet.updateBlob() (в случае обновляемых
наборов результатов), чтобы сохранить изменения в базе данных.
Связь
Метод isClosed()
не пингует сервер, чтобы определить, доступен ли он.
В соответствии со спецификацией JDBC, он вернет true только если
closed() был вызван на связи.
Если необходимо определить, действительна ли связь, выпустите простой запрос,
такой как SELECT 1 .
Драйвер бросит исключение, если связь больше не действительна.
DatabaseMetaData
Информация Foreign key (getImportedKeys()
/getExportedKeys() и
getCrossReference() ) доступна только из таблиц
InnoDB . Драйвер применяет
SHOW CREATE TABLE ,
чтобы получить эту информацию, поэтому если какие-либо другие механизмы
хранения добавляют поддержку внешних ключей, драйвер прозрачно поддержал
бы их тоже.
PreparedStatement
Два варианта подготовленных запросов осуществляются Connector/J,
клиентская и серверная сторона. Клиентские подготовленные запросы
используются по умолчанию, потому что ранние версии MySQL не поддерживали
функцию подготовленных запросов или имели проблемы с ее внедрением.
Запросы на сервере и кодированные двоично наборы результатов используются,
когда сервер поддерживает их. Чтобы позволить использование серверной стороны
подготовленных запросов, установите
useServerPrepStmts=true .
Будьте осторожны с использованием серверной стороны запросов с
параметрами large, которые
устанавливаются, используя setBinaryStream() ,
setAsciiStream() ,
setUnicodeStream() ,
setCharacterStream() ,
setNCharacterStream() ,
setBlob() ,
setClob() или
setNCLob() .
Чтобы повторно выполнить запрос с любым большим параметром, измененным
на небольшой параметр, вызовите
clearParameters() и заново установите все
параметры. Причины этого следующие:
Как только это было сделано, поток, используемый, чтобы прочитать
данные на клиентской стороне, закрывается (согласно JDBC spec)
и не может быть прочитан снова.
Если параметр изменяется от большого до небольшого, драйвер должен
перезагрузить состояние серверной стороны подготовленного запроса, чтобы
позволить параметру, который изменяется, занять место предшествующего
большого значения. Это удаляет все большие данные, которые уже послали в
сервер, таким образом требуя, чтобы данные были посланы заново, используя
метод setBinaryStream() ,
setAsciiStream() ,
setUnicodeStream() ,
setCharacterStream() ,
setNCharacterStream() ,
setBlob() ,
setClob() или
setNCLob() .
Следовательно, чтобы изменить тип параметра к небольшому, необходимо
вызвать clearParameters() и переустановить
все параметры подготовленного запросы снова, прежде чем это сможет
быть повторно выполнено.
ResultSet
По умолчанию ResultSets полностью получены и сохранены в памяти.
В большинстве случаев это самый эффективный способ работать и из-за дизайна
протокола сети MySQL его легче осуществить. Если вы работаете с ResultSets,
которые имеют большое количество строк или больших значений и не могут
выделить пространство "кучи" в вашем JVM для требуемой памяти,
можно сказать велеть драйверу передать результаты построчно.
Чтобы позволить эту функциональность, создайте экземпляр
Statement примерно так:
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);
Комбинация набора результатов только для чтения, только для пересылки и
с размером получения Integer.MIN_VALUE
служит сигналом драйверу передавать набор результатов потоком построчно.
После этого любые наборы результатов, созданные запросом,
будут получены построчно.
Есть некоторые проблемы с этим подходом. Необходимо прочитать все
строки в наборе результатов (или закрыть его), прежде чем можно будет
выпустить любые другие запросы на связи, или исключение будет брошено.
Если запрос в объеме транзакции, то блокировки выпущены, когда
транзакция заканчивается (это подразумевает, что запрос должен закончиться
сначала). Как с большинством других баз данных, запросы не полны, пока все
ожидаемые результаты запроса не прочитаны, или активный набор результатов для
запроса не закрывается.
Поэтому, используя текущие результаты, обработайте их как можно быстрее,
если вы хотите поддержать параллельный доступ к таблицам, на которые
ссылается запрос, производящий набор результатов.
Другая альтернатива должна использовать основанный на курсоре поток, чтобы
получить количество строк каждый раз. Это может быть сделано, установив
свойство связи useCursorFetch = true, а затем
вызвав setFetchSize(int) с
int будучи желаемым количеством строк, которые
будут возвращены каждый раз:
conn = DriverManager.getConnection("jdbc:mysql://localhost/?useCursorFetch=true", "user", "s3cr3t");
stmt = conn.createStatement();
stmt.setFetchSize(100);
rs = stmt.executeQuery("SELECT * FROM your_table_here");
Запросы
Connector/J включает поддержку
Statement.cancel() и
Statement.setQueryTimeout() .
Оба требуют, чтобы отдельная связь создала команду
KILL QUERY . В случае
setQueryTimeout() реализация создает
дополнительный поток, чтобы обращаться с функциональностью тайм-аута.
Отказ отменить запрос для setQueryTimeout()
может проявиться как RuntimeException
вместо того, чтобы терпеть неудачу тихо, так как в настоящее время нет
никакого способа открыть поток, который выполняет запрос, отменяемый из-за
истечения тайм-аута и бросить из него исключение вместо этого.
MySQL не поддерживает курсоры SQL, и драйвер JDBC не подражает им, таким
образом, setCursorName()
не имеет никакого эффекта.
Connector/J также поставляет два дополнительных метода:
setLocalInfileInputStream()
устанавливает экземпляр InputStream , который
будет использоваться, чтобы послать данные в сервер MySQL для
LOAD DATA LOCAL INFILE
вместо FileInputStream или
URLInputStream , который
представляет путь, данный как аргумент запроса.
Этот поток будет прочитан после выполнения
a LOAD DATA LOCAL INFILE
и будет автоматически закрыт драйвером, таким образом, он должен быть
перезагружен перед каждым вызовом execute*() ,
что заставило бы сервер MySQL запрашивать данные, чтобы обработать запрос для
LOAD DATA LOCAL INFILE .
Если это значение установлено к NULL ,
драйвер вернется к использованию
FileInputStream или
URLInputStream как требуется.
getLocalInfileInputStream() вернет
экземпляр InputStream , который будет
использоваться, чтобы послать данные в ответ на
LOAD DATA LOCAL INFILE .
Этот метод вернет NULL , если никакой такой
поток не был установлен, используя
setLocalInfileInputStream() .
6.5. Java, JDBC и типы MySQL
В целом любой тип данных MySQL может быть преобразован в
java.lang.String и любой числовой тип может быть
преобразован в любые числовые типы Java, хотя округление, переполнение или
потеря точности могут произойти.
Все типы TEXT вернут
Types.LONGVARCHAR с различными значениями
getPrecision() (65535, 255, 16777215 и
2147483647), причем getColumnType() вернет
-1 . Это поведение намеренное даже при том, что
TINYTEXT не падает из-за размера в категории
LONGVARCHAR . Это должно избежать различной
обработки в том же самом базовом типе.
getColumnType() вернет
-1 потому что внутренняя обработка сервера имеет
тип TEXT , который подобен
BLOB .
Также отметьте, что getColumnTypeName()
вернет VARCHAR даже при том, что
getColumnType() вернет
Types.LONGVARCHAR , потому что
VARCHAR определяемое собственное имя столбца
базы данных для этого типа.
Connector/J выпускает предупреждения или бросает исключения
DataTruncation , как требуется спецификацией
JDBC, если связь не формировалась, чтобы не делать так при помощи значения
jdbcCompliantTruncation , установив его в
false .
Преобразования, которые, как всегда гарантируют, будут работать,
перечисляются в следующей таблице. Первые столбец перечисляет один или
несколько типов данных MySQL и второй столбец перечисляет один или несколько
типов Java, в которые могут быть преобразованы типы MySQL.
Таблица 6.1. Возможные преобразования между типами данных MySQL и Java
CHAR, VARCHAR, BLOB, TEXT, ENUM, and SET |
java.lang.String, java.io.InputStream,
java.io.Reader, java.sql.Blob, java.sql.Clob |
FLOAT, REAL, DOUBLE PRECISION,
NUMERIC, DECIMAL, TINYINT, SMALLINT, MEDIUMINT, INTEGER, BIGINT |
java.lang.String, java.lang.Short,
java.lang.Integer, java.lang.Long, java.lang.Double,
java.math.BigDecimal |
DATE, TIME, DATETIME, TIMESTAMP
| java.lang.String, java.sql.Date,
java.sql.Timestamp |
Округление, переполнение или потеря точности могут произойти, если вы
выбираете Java-тип числовых данных, у которого есть меньшая точность, чем
тип данных MySQL, в который вы преобразовываете.
Метод ResultSet.getObject()
использует преобразования типов между типами MySQL и Явы, следуя спецификации
JDBC в соответствующих случаях. Значения, возвращенные
ResultSetMetaData.GetColumnTypeName() и
ResultSetMetaData.GetColumnClassName() ,
показаны в приведенной ниже таблице. Для получения дополнительной информации
о типах JDBC посмотрите ссылку на класс
java.sql.Types.
Таблица 6.2. Типы MySQL и возвращаемые значения для
ResultSetMetaData.GetColumnTypeName() и
ResultSetMetaData.GetColumnClassName()
Имя типа MySQL |
Возвращаемое значение
GetColumnTypeName |
Возвращаемое значение
GetColumnClassName |
BIT(1) |
BIT |
java.lang.Boolean |
BIT(> 1) |
BIT |
byte[] |
TINYINT |
TINYINT |
java.lang.Boolean ,
если свойство конфигурации
tinyInt1isBit установлено в
true (по умолчанию) и размер ресурса хранения
равняется 1 или java.lang.Integer ,
если нет. |
BOOL ,
BOOLEAN |
TINYINT |
См. TINYINT выше, поскольку это в настоящее
время псевдонимы для TINYINT(1) |
SMALLINT[(M)] [UNSIGNED]
| SMALLINT [UNSIGNED] |
java.lang.Integer
(независимо от того, является ли это
UNSIGNED или нет) |
MEDIUMINT[(M)] [UNSIGNED]
| MEDIUMINT [UNSIGNED] |
java.lang.Integer
(независимо от того, является ли это
UNSIGNED или нет) |
INT,INTEGER[(M)] [UNSIGNED]
| INTEGER [UNSIGNED] |
java.lang.Integer ,
если UNSIGNED
java.lang.Long |
BIGINT[(M)] [UNSIGNED] |
BIGINT [UNSIGNED] |
java.lang.Long , если UNSIGNED
java.math.BigInteger |
FLOAT[(M,D)] |
FLOAT |
java.lang.Float |
DOUBLE[(M,B)] |
DOUBLE |
java.lang.Double |
DECIMAL[(M[,D])] |
DECIMAL |
java.math.BigDecimal |
DATE |
DATE |
java.sql.Date |
DATETIME |
DATETIME |
java.sql.Timestamp |
TIMESTAMP[(M)] |
TIMESTAMP |
java.sql.Timestamp |
TIME |
TIME |
java.sql.Time |
YEAR[(2|4)] |
YEAR |
Если свойство конфигурации yearIsDateType
установлено в false , тогда тип возвращенного
объекта java.sql.Short . Если установлено в
true (по умолчанию), тогда возвращенный объект
имеет тип java.sql.Date
с установкой даты 1 января в полночь |
CHAR(M) |
CHAR |
java.lang.String (если набор символов для
столбца не BINARY , вернется
byte[] ) |
VARCHAR(M) [BINARY] |
VARCHAR |
java.lang.String
(если набор символов для столбца не BINARY ,
вернется byte[] ) |
BINARY(M) |
BINARY |
byte[] |
VARBINARY(M) |
VARBINARY |
byte[] |
TINYBLOB |
TINYBLOB |
byte[] |
TINYTEXT |
VARCHAR |
java.lang.String |
BLOB |
BLOB |
byte[] |
TEXT |
VARCHAR |
java.lang.String |
MEDIUMBLOB |
MEDIUMBLOB |
byte[] |
MEDIUMTEXT |
VARCHAR |
java.lang.String |
LONGBLOB |
LONGBLOB |
byte[] |
LONGTEXT |
VARCHAR |
java.lang.String |
ENUM('value1','value2',...)
| CHAR |
java.lang.String |
SET('value1','value2',...)
| CHAR |
java.lang.String |
6.6. Использование наборов символов и Unicode
Все последовательности, посланные от драйвера JDBC
серверу, преобразовываются автоматически из родной формы Java Unicode
к кодировке символов клиента, включая все запросы, посланные, используя
Statement.execute() ,
Statement.executeUpdate() и
Statement.executeQuery() , а также все параметры
PreparedStatement и
CallableStatement ,
исключая использование параметров, установленных
setBytes() ,
setBinaryStream() ,
setAsciiStream() ,
setUnicodeStream() и
setBlob() .
Количество кодировок для каждого подключения
Connector/J яподдерживает односимвольное кодирование между клиентом и
сервером и любое количество кодировок символов для данных, возвращенных
сервером клиенту в ResultSets .
Урегулирование кодировки символов
Кодировка символов между клиентом и сервером автоматически обнаружена
после установления связи (при условии, что свойства связи Connector/J
characterEncoding и
connectionCollation не заданы).
Вы определяете кодировку на сервере, используя системную переменную
character_set_server
(fдля получения дополнительной информации посмотрите
Server Character Set and Collation).
Драйвер автоматически использует кодировку, определенную сервером.
Например, чтобы использовать
4-byte UTF-8 character set с Connector/J, формируйте сервер MySQL
с character_set_server=utf8mb4 ,
и уберите characterEncoding и
connectionCollation из строки подключения
Connector/J. Connector/J тогда опознает автоматически UTF-8.
Чтобы отвергнуть автоматически обнаруженную кодировку
на клиентской стороне, используйте свойство
characterEncoding в связи URL к серверу.
Используйте имена стиля Java, определяя кодировки символов.
В следующей таблице перечислены имена набора символов MySQL и их
соответствующие имена в стиле Java:
Таблица 6.3. Соответствие имен кодировок MySQL и Java
ascii |
US-ASCII |
big5 |
Big5 |
gbk |
GBK |
sjis |
SJIS или Cp932 |
cp932 |
Cp932 или MS932 |
gb2312 |
EUC_CN |
ujis |
EUC_JP |
euckr |
EUC_KR |
latin1 |
Cp1252 |
latin2 |
ISO8859_2 |
greek |
ISO8859_7 |
hebrew |
ISO8859_8 |
cp866 |
Cp866 |
tis620 |
TIS620 |
cp1250 |
Cp1250 |
cp1251 |
Cp1251 |
cp1257 |
Cp1257 |
macroman |
MacRoman |
macce |
MacCentralEurope |
Для 8.0.12 и раньше
:utf8
Для 8.0.13 и позже:
utf8mb4 |
UTF-8 |
ucs2 |
UnicodeBig |
Для Connector/J 8.0.12 и ранее:
Чтобы использовать набор символов
utf8mb4
для связи, сервер ДОЛЖЕН БЫТЬ настроен с
character_set_server=utf8mb4 ,
если это не так, когда UTF-8 используется для
characterEncoding в строке подключения это
отображается к имени набора символов MySQL utf8 ,
который является псевдонимом для
utf8mb3 .
Для Connector/J 8.0.13 и позже:
Когда UTF-8 используется для
characterEncoding в строке подключения это
отображается к имени набора символов MySQL
utf8mb4 .
Если опция связи connectionCollation
также установлена с characterEncoding
и несовместима с ней, characterEncoding
будет отвергнута с соответствием кодировки
connectionCollation .
Поскольку нет никакого названия набора символов стиля Java для
utfmb3 , который можно использовать с опцией
связи charaterEncoding , единственный способ
использовать utf8mb3 как ваш набор символов
связи, это использовать сопоставление utf8mb3
(например, utf8_general_ci ) для выбора связи
connectionCollation , который принудительно
вызывает набор символов utf8mb3 ,
который будет использоваться.
Не делайте запрос
SET NAMES с Connector/J, так как драйвер не обнаружит, что
набор символов был изменен запросом и продолжит использовать набор символов,
формируемый, когда связь была настроена.
6.7. Соединение безопасно, используя SSL
Connector/J может зашифровать все данные драйвером JDBC
и сервером (за исключением начального рукопожатия) используя SSL.
Есть потеря производительности для предоставления возможности шифрования
связи, серьезность которой зависит от многих факторов включая (но не
ограничивая) размер запроса, возвращенный объем данных, серверное
оборудование, использовавшаяся библиотека SSL, сетевая пропускная
способность и так далее.
Система работает через два файла Java keystore:
один файл содержит информацию о сертификате для сервера
(truststore в примерах ниже), другой содержит
ключи и сертификат для клиента (keystore
в примерах ниже). Все файлы Java keystore защищены паролем, поставляемым
keytool, когда вы создали
файлы. Вам нужны имена файлов и связанные пароли, чтобы создать связь SSL.
Для работы с SSL у вас должно быть следующее:
По умолчанию Connector/J устанавливает безопасные соединения с серверами
MySQL. Обратите внимание на то, что серверы MySQL 5.7 и 8.0,
когда собраны с OpenSSL, могут автоматически произвести
файлы SSL при запуске и формировать связь SSL соответственно.
8.0.12 и раньше: пока сервер
правильно формируется, чтобы использовать SSL, нет никакой потребности
формировать что-либо на клиенте Connector/J, чтобы использовать зашифрованные
связи (исключение: когда Connector/J соединяется с очень старыми версиями
сервера, такими как 5.6.25 и ранее или 5.7.5 и ранее, в этом случае клиент
должен установить свойство связи useSSL=true ,
чтобы использовать зашифрованные связи). Клиент может потребовать SSL,
который будет использоваться, устанавливая свойство связи
requireSSL=true , связь тогда прерывается, если
сервер не формируется, чтобы использовать SSL.
Без requireSSL=true связь просто отступает к
незашифрованному способу, если сервер не формируется, чтобы использовать SSL.
8.0.13 и позже: пока сервер
правильно формируется, чтобы использовать SSL, нет никакой потребности
формировать что-либо на клиенте Connector/J, чтобы использовать зашифрованные
связи. Клиент может потребовать SSL, который будет использоваться,
устанавливая свойства связи sslMode=REQUIRED ,
VERIFY_CA или
VERIFY_IDENTITY , связь тогда прерывается, если
сервер не формируется, чтобы использовать SSL. С
sslMode=PREFERRED связь просто отступает к
незашифрованному способу, если сервер не формируется, чтобы использовать SSL.
Для связей X-протокола, значение свойства
xdevapi.ssl-mode определяет режим SSL, точно так
же, как sslMode для связей MySQL-протокола
(за исключением того, что PREFERRED
не поддерживается X-протоколом), если не задано явно
xdevapi.ssl-mode берет значение
sslMode (если не задано
xdevapi.ssl-mode , а
sslMode =PREFERRED ,
xdevapi.ssl-mode =REQUIRED
).
Для дополнительной безопасности вы можете настроить клиент для
односторонней (сервер или клиент) или двухсторонней (сервер и клиент)
аутентификация SSL, позволяя клиенту или серверу подтверждать подлинность
идентичности друг друга.
Версии TLS: допустимые версии
протокола TLS могут быть ограничены, используя свойства связи
enabledTLSProtocols и для X DevAPI (только
для выпуска 8.0.19 и позже)
xdevapi.tls-versions (когда
xdevapi.tls-versions не задано, берется
значение enabledTLSProtocols ).
Если никакие ограничения не были определены, Connector/J пытается соединиться
с сервером со следующими версиями TLS:
TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 для
MySQL Community Server 8.0, 5.7.28 и выше, 5.6.46 и выше и всех
коммерческих версий MySQL Server.
TLSv1,TLSv1.1 для всех других
версий MySQL Server.
Connector/J 8.0.18 и ранее соединяясь с
MySQL Community Server 5.6 и 5.7 используют JDBC API: из-за
проблем совместимости с MySQL Server, собранным с yaSSL, Connector/J не
позволяет связи с TLSv1.2 и выше по умолчанию. Соединяясь с серверами,
которые ограничивают связи, чтобы использовать поздние версии TLS, позвольте
им явно, установив свойство связи Connector/J
enabledTLSProtocols (например, установив
enabledTLSProtocols=TLSv1,TLSv1.1,TLSv1.2 ).
Наборы шифров: С версии 8.0.19
шифры, применимые Connector/J, предварительно ограничиваются файлом, который
может быть найден в
src/main/resources/com/mysql/cj/TlsSettings.properties
в каталоге src на исходном дереве или
в независимом от платформы архиве (формат
.tar.gz или .zip )
для Connector/J. Файл содержит четыре секции, перечисляющие в каждой
обязательные, одобренные, устаревшие и недопустимые шифры.
Только шифры, перечисленные в первых трех секциях, могут использоваться.
Последняя (недопустимая) секция определяет образцы или маски, которые
помещают в черный список небезопасные шифры. Практически, с белым списком,
уже данным в первых трех секциях, образцы черного списка избыточны,
но они там как дополнительная гарантия против нежелательных шифров.
Белый список и черный список относятся к JDBC и к связям X DevAPI.
Допустимые шифры для связей SSL могут быть ограничены, используя свойства
связи enabledSSLCipherSuites и для X DevAPI
(для выпуска 8.0.19 и позже) xdevapi.tls-ciphersuites
(если xdevapi.tls-ciphersuites не задан,
это принимает значение enabledSSLCipherSuites ).
Если никакие такие ограничения не были определены, Connector/J пытается
установить связи SSL с любыми шифрами в белом списке,
которые принимает сервер.
Подготовка аутентификации сервера
8.0.12 и ранее: Аутентификация
сервера через проверку сертификата сервера позволена, когда свойства связи
Connector/J useSSL И
verifyServerCertificate = true вместе.
Проверка имени хоста не поддерживается: идентификация
хоста только сертификатами.
8.0.13 и позже: Аутентификация
сервера через проверку сертификата сервера позволена, когда свойство связи
Connector/J sslMode =
VERIFY_CA или
VERIFY_IDENTITY . Если не задано
sslMode , аутентификация сервера через проверку
сертификата сервера позволена, когда устаревшие свойства
useSSL И
verifyServerCertificate = true вместе.
Сертификаты, подписанные доверяемым CA. Когда аутентификация
сервера через проверку сертификата сервера позволена, если никакие
дополнительные конфигурации не сделаны относительно аутентификации сервера,
Java проверяет сертификат сервера, используя его по умолчанию доверенный
сертификат CA обычно из
$JAVA_HOME/lib/security/cacerts .
Использование самоподписанных сертификатов.
Сертификатам сервера MySQL довольно свойственно быть самоподписанными или
подписанными самоподписанным сертификатом CA, сгенерированные сертификаты
и ключи, созданные сервером MySQL, основаны на последнем то есть, сервер
производит все необходимые ключи и самоподписанный сертификат CA, который
используется, чтобы подписать сертификаты сервера и клиента.
Сервер тогда настраивается, чтобы использовать сертификат CA и сертификат
сервера. Хотя файл сертификата клиента помещается в тот же самый каталог, он
не используется сервером.
Чтобы проверить сертификат сервера, Connector/J должен быть в состоянии
прочитать сертификат, который подписал его, то есть, сертификат сервера,
который подписал или самоподписанный сертификат CA. Это может быть достигнуто
любым импортированием сертификата (ca.pem
или любой другой сертификат) в базу Java доверенных сертификатов по умолчанию
(хотя вмешиваться в базу доверенных сертификатов по умолчанию не
рекомендуется) или импортируя его в файл базы Java доверенных сертификатов и
формируя драйвер Connector/J соответственно. Используйте Java keytool
(как правило, расположенный в подкаталоге bin
вашего JDK или JRE), чтобы импортировать сертификата сервера:
shell> keytool -importcert -alias MySQLCACert -file ca.pem \
-keystore truststore -storepass mypassword
Поставляйте надлежащие аргументы команды. Если файл базы доверенных
сертификатов еще существует, новый будет создан, иначе сертификат будет
добавлен к существующему файлу. Взаимодействие с
keytool похоже на это:
Owner: CN=MySQL_Server_5.7.17_Auto_Generated_CA_Certificate
Issuer: CN=MySQL_Server_5.7.17_Auto_Generated_CA_Certificate
Serial number: 1
Valid from: Thu Feb 16 11:42:43 EST 2017 until: Sun Feb 14 11:42:43 EST 2027
Certificate fingerprints:
MD5:18:87:97:37:EA:CB:0B:5A:24:AB:27:76:45:A4:78:C1
SHA1: 2B:0D:D9:69:2C:99:BF:1E:2A:25:4E:8D:2D:38:B8:70:66:47:FA:ED
SHA256: C3:29:67:1B:E5:37:06:F7:A9:93:DF:C7:B3:27:5E:09:C7:FD:EE:2D:18:86:F4:9C:40:D8:26:CB:DA:95:A0:24
Signature algorithm name: SHA256 with RSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 1
Trust this certificate? [no]:yes
Certificate was added to keystore
Вывод команды показывает все детали об импортированном сертификатов.
Удостоверьтесь, что вы помните пароль, который вы задали.
Кроме того, обратите внимание, что пароль должен будет быть написан как
простой текст в вашем конфигурационном файле Connector/J или
исходном коде приложения.
Следующий шаг должен формировать Java или Connector/J, чтобы прочитать
базу доверенных сертификатов, которую вы просто создали или изменили.
Это может быть сделано при помощи одного из следующих трех методов:
Используя параметры командной строки Java:
-Djavax.net.ssl.trustStore=path_to_truststore_file
-Djavax.net.ssl.trustStorePassword=mypassword
Указание системных свойств непосредственно в коде клиента:
System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file ");
System.setProperty("javax.net.ssl.trustStorePassword","mypassword ");
Определение нужных свойств связи Connector/J:
clientCertificateKeyStoreUrl=file:path_to_truststore_file
clientCertificateKeyStorePassword=mypassword
Заметьте, что когда используются вместе, свойства связи отвергают
значения, установленные другими двумя методами.
Кроме того, значения свойств связи используются только в той связи в то
время, как указание значений в масштабе всей системы используется для всех
связей (если не отвергнуто свойствами связи).
С вышеупомянутой установкой и позволенной аутентификацией сервера
все установленные связи будут SSL-зашифрованными с сервером, заверяемым в
процессе рукопожатия SSL, клиент может теперь безопасно доверять серверу,
с которым это соединяется.
Для X-Protocol свойства связи
xdevapi.ssl-truststore ,
xdevapi.ssl-truststore-type и
xdevapi.ssl-truststore-password
определяют параметры настройки базы доверенных сертификатов, точно так же,
как trustCertificateKeyStoreUrl ,
trustCertificateKeyStoreType и
trustCertificateKeyStorePassword
связей MySQL-протокола, если не заданы явно
xdevapi.ssl-truststore ,
xdevapi.ssl-truststore-type и
xdevapi.ssl-truststore-password берут значения
trustCertificateKeyStoreUrl ,
trustCertificateKeyStoreType и
trustCertificateKeyStorePassword .
Сервисная проверка идентичности.
8.0.13 и позже: Вне аутентификации
сервера через проверку сертификата сервера, когда
sslMode =
VERIFY_IDENTITY , Connector/J
также выполняет проверку идентичности имени хоста, проверяя имя хоста,
которое использует для соединения, на совпадение со значением Common
Name в сертификате сервера.
Подготовка аутентификации клиента
Сервер может хотеть подтвердить подлинность клиента и потребовать, чтобы
клиент предоставил сертификат SSL ему, который он проверяет по известным
центрам сертификации или выполняет дополнительные проверки на личность
клиента в случае необходимости (см.
CREATE USER SSL/TLS Options).
В этом случае у Connector/J должен быть доступ к сертификату клиента, таким
образом, это можно послать в сервер, устанавливая новые соединения с базой
данных. Это сделано, используя файлы Java keystore.
Чтобы позволить аутентификацию клиента, у клиента, соединяющегося с
сервером, должен быть его собственный набор ключей и сертификат SSL.
Сертификат клиента должен быть подписан так, чтобы сервер мог проверить его.
В то время как можно подписать сертификат клиента в официальных центрах
сертификации, более распространено использование промежуточных, частных,
сертификатов CA, чтобы подписать сертификат клиента.
Такой промежуточный сертификат CA может быть самоподписан или подписан
доверенным корневым CA. Требование в том, что сервер знает сертификат CA,
который способен к утверждению сертификата клиента.
Некоторые серверы MySQL в состоянии произвести ключи SSL и сертификаты для
коммуникационного шифрования, включая сертификат и закрытый ключ
(содержавшийся в файлах client-cert.pem и
client-key.pem ), который может использоваться
любым клиентом. Этот сертификат SSL уже подписан самоподписанным сертификатом
CA ca.pem , который сервер, возможно, уже
настроил, чтобы использовать.
Если вы не хотите использовать ключи клиента и файлы сертификата,
произведенные сервером, можно также произвести новые,
используя процедуры, описанные в
Creating SSL and RSA Certificates and Keys.
Заметьте, что, согласно установке сервера, вам, вероятно, придется снова
использовать уже существующий сертификат CA, с которым сервер настроен для
работы, чтобы подписать новый сертификат клиента, вместо того,
чтобы создать новый.
Как только у вас есть закрытый ключ клиента и файлы сертификата, которые
вы хотите использовать, необходимо импортировать их в Java keystore
так, чтобы они могли использоваться библиотекой Java SSL и Connector/J.
Следующие инструкции объясняют, как создать файл keystore:
Преобразуйте ключ клиента и файлы сертификата в архив PKCS #12:
shell> openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem \
-name "mysqlclient" -passout pass:mypassword \
-out client-keystore.p12
Импортируйте ключ клиента и сертификат в Java keystore:
shell> keytool -importkeystore -srckeystore client-keystore.p12 \
-srcstoretype pkcs12 -srcstorepass mypassword \
-destkeystore keystore -deststoretype JKS \
-deststorepass mypassword
Поставляйте надлежащие аргументы команды. Если файла keystore нет,
новый будет создан, иначе сертификат будет добавлен к существующему файлу.
Вывод keytool примерно такой:
Entry for alias mysqlclient successfully imported.
Import command completed: 1 entries successfully imported,
0 entries failed or cancelled
Удостоверьтесь, что вы помните пароль, который вы выбрали.
Кроме того, обратите внимание, что пароль должен будет быть написан как
простой текст в вашем конфигурационном файле Connector/J или
исходном коде приложения.
После этого шага можно удалить архив PKCS #12
(client-keystore.p12
в этом примере).
Следующий шаг должен формировать Java или Connector/J, чтобы это прочитало
базу доверенных сертификатов, которую вы просто создали или изменили.
Это может быть сделано при помощи одного из следующих трех методов:
Используя параметры командной строки Java:
-Djavax.net.ssl.keyStore=path_to_keystore_file
-Djavax.net.ssl.keyStorePassword=mypassword
Установкой системных свойств непосредственно в коде клиента:
System.setProperty("javax.net.ssl.keyStore","path_to_keystore_file");
System.setProperty("javax.net.ssl.keyStorePassword","mypassword");
Через свойства связи Connector/J:
clientCertificateKeyStoreUrl=file:path_to_truststore_file
clientCertificateKeyStorePassword=mypassword
Заметьте, что, когда используется вместе, свойства связи отвергают
значения, установленные другими двумя методами. Кроме того,
значения, установленные свойствами связи используются только в этой связи в
то время, как значения в масштабе всей системы используются для всех связей
(если не отвергнуты свойствами связи).
С вышеупомянутыми установками все установленные связи будут
SSL-зашифрованными с клиентом, заверяемым в процессе рукопожатия SSL, сервер
может теперь безопасно доверять клиенту, который просит связь с ним.
Подготовка двухсторонней идентификации
Примените шаги, обрисованные в общих чертах
здесь и
здесь,
чтобы настроить взаимный процесс двусторонней аутентификации, в котором
сервер и клиент подтверждают подлинность друг друга прежде,
чем установить связь.
Хотя типичная установка применяет тот же самый сертификат CA на обоих
концоах для взаимной аутентификации, это не должно иметь место.
Единственное требование: сертификат CA, формируемый в сервере, должен быть в
состоянии утвердить сертификат клиента, а сертификат CA, импортированный в
базу доверенных сертификатов клиента, должен быть в состоянии утвердить
сертификат сервера, два сертификата CA, используемые на двух концах,
могут быть различными.
Отладка связи SSL
JSSE предоставляет отладочную информацию через
stdout , когда вы устанавливаете системное
свойство -Djavax.net.debug=all .
Java говорит вам, какой keystores и базы доверенных сертификатов
используются, а также что происходит во время рукопожатия SSL и обмена
сертификатами. Это будет полезно, когда вы попытаетесь отладить
неудавшуюся связь SSL.
6.8. Связь через сокеты Unix
Connector/J не поддерживает связи с MySQL Server через сокеты Unix.
Однако есть способ для того, чтобы пользоваться сторонними библиотеками,
которые поставляют функцию через подключаемый модуль. Такой модуль должен
осуществить интерфейс
com.mysql.cj.protocol.SocketFactory или старый интерфейс
com.mysql.jdbc.SocketFactory Connector/J.
Следуйте за этими требованиями, когда вы будете использовать такой модуль
для сокетов Unix:
MySQL Server должен формироваться с системной переменной
--socket (для родных связей
протокола, используя API JDBC) или
--mysqlx-socket (для связей
X Protocol, используя X DevAPI), которая должна содержать путь к
файлу сокета Unix.
Полностью квалифицированное имя класса должно быть передано к
Connector/J через свойство связи socketFactory .
Например, с библиотекой junixsocket:
socketFactory=org.newsclub.net.mysql.AFUNIXDatabaseSocketFactory
Вы, возможно, также должны были бы передать другие параметры в модуль
как свойства связи. Например, для библиотеки junixsocket обеспечьте путь к
файлу сокеты свойством junixsocket.file :
junixsocket.file=path_to_socket_file
Используя X Protocol, задайте свойство связи
xdevapi.useAsyncProtocol=false (что является
настройкой по умолчанию для Connector/J 8.0.12 и позже). Unix сокеты не
поддерживается для асинхронных каналов.
Когда xdevapi.useAsyncProtocol=true ,
socketFactory игнорируется.
Для X Protocol возможность использовать сокеты Unix
доступна только для Connector/J 8.0.12 и позже.
6.9. Соединение используя именованные каналы
Для MySQL 8.0.14 и раньше, 5.7.25 и раньше и
5.6.43 и раньше, минимальные разрешения на именованных каналах
даны клиентам, которые используют их, чтобы соединиться с сервером.
Connector/J, однако, может использовать именованные каналы только когда
предоставлен полный доступ на них. Сервер MySQL, с которым Connector/J хочет
соединиться, должен быть запущен с системной переменной
named_pipe_full_access_group ,
который определяет группу в Windows, содержащую пользователя, который
выполняет клиентское приложение JVM (и таким образом Connector/J),
см. описание для
named_pipe_full_access_group
.
Поддержка именованных каналов недоступна для связей X-протокола.
Connector/J также поддерживает доступ к MySQL, используя именованные
каналы на платформах Windows с
NamedPipeSocketFactory как доплнительный модуль.
Если вы не используете namedPipePath ,
по умолчанию применяется '\\.\pipe\MySQL' .
При использовании NamedPipeSocketFactory ,
имя хоста и значение номера порта в URL JDBC проигнорированы.
Чтобы активировать эту опцию, установите свойство
socketFactory :
socketFactory=com.mysql.cj.protocol.NamedPipeSocketFactory
Установите это свойство, а также путь именованного канала, со
следующей связью URL:
jdbc:mysql:///test?socketFactory=com.mysql.cj.protocol.NamedPipeSocketFactory&namedPipePath=\\.\pipe\MySQL80
Чтобы создать ваши собственные модули сокетов, следуйте за примером кода в
com.mysql.cj.protocol.NamedPipeSocketFactory
или com.mysql.cj.protocol.StandardSocketFactory
.
Дополнительный подход должен использовать следующие два свойства в связи
URL для установления связей именованного канала на платформах Windows:
Форма address-equals или
key-value спецификации хоста (см.
здесь)
значительно упрощает URL для связи именованного канала на Windows.
Например, чтобы использовать именованный канал по умолчанию
\\.\pipe\MySQL ,:
jdbc:mysql://address=(protocol=pipe)/test
Чтобы использовать именованный канал
\\.\pipe\MySQL80 :
jdbc:mysql://address=(protocol=pipe)(path=\\.\pipe\MySQL80)/test
С (protocol=pipe)
NamedPipeSocketFactory автоматически выбран.
Именованные каналы работают только соединяясь с сервером MySQL на той же
самой физической машине, где работает драйвер JDBC.
В простых тестах производительности доступ именованного канала
на 30%-50% быстрее, чем стандартный доступ TCP/IP. Однако это варьируется в
зависимости от системы, и именованные каналы медленнее, чем TCP/IP, во
многих конфигурациях Windows.
6.10. Соединение используя идентификацию PAM
Java-приложения используя Connector/J могут соединиться с серверами MySQL,
которые используют схему аутентификации pluggable authentication module (PAM).
Для идентификации PAM у вас должно быть следующее:
Поддержка аутентификации PAM позволена по умолчанию в Connector/J 8.0,
таким образом, никакая дополнительная конфигурация не необходима.
Чтобы отключить функцию аутентификации PAM, надо определить
mysql_clear_password (метод) или
com.mysql.cj.protocol.a.authentication.MysqlClearPasswordPlugin
(имя класса) в списке разделенных запятой значений аргументов в
опции связи disabledAuthenticationPlugins , см.
раздел
6.3.
6.11. Использование репликации Master/Slave с ReplicationConnection
См.
раздел 9.4.
6.12. Поддержка записей DNS SRV
Connector/J поддерживает использование записи DNS SRV для
связей начиная с выпуска 8.0.19.
Если несколько экземпляров MySQL предоставляют ту же самую услугу для
ваших запросов, DNS SRV записи может использоваться, чтобы обеспечить
отказоустойчивость, выравнивание нагрузки и службы репликации.
Они устраняют необходимость клиентов опознать каждый возможный хост в строке
подключения или для связей, которые будут обработаны дополнительным
компонентом программного обеспечения. Вот резюме для поддержки
Connector/J DNS SRV:
Эти новые схемы в связи URL позволяют DNS SRV:
jdbc:mysql+srv: Для основной
отказоустойчивости связей JDBC, которые используют записи DNS SRV.
jdbc:mysql+srv:loadbalance: Для
выравнивания нагрузки связи JDBC, которые используют записи DNS SRV.
jdbc:mysql+srv:replication: Для связей
репликации JDBC, которые используют записи DNS SRV.
mysqlx+srv: Для связей X DevAPI, которые
используют записи DNS SRV.
Помимо использования новых схем в связи URL, поддержка DNS SRV
быть включена или отключена использованием двух новых свойств связи,
dnsSrv и
xdevapi.dns-srv , для JDBC и X DevAPI,
соответственно. Например, эта связь URL позволяет поддержку DNS SRV:
mysqlx://johndoe:secret@_mysql._tcp.mycompany.local/db?xdevapi.dns-srv=true
Однако используя схему DNS SRV со свойством связи =
false будет ошибка, например:
mysqlx+srv://johndoe:secret@_mysql._tcp.mycompany.local/db?xdevapi.dns-srv=false
# The connection URL causes Connector/J to throw an error
Вот некоторые требования и ограничения на DNS SRV Connector/J:
Connection/J бросает исключение, если многие хосты определяются в
связи URL для DNS SRV (за исключением настроенной репликации, создаваемой
через jdbc:mysql+srv:replication , которая
требует, чтобы были определены точно один мастер и один подчиненный сервер).
Connection/J бросает исключение, если номер порта определяется в связи
URL для DNS SRV.
Записи DNS SRV поддерживаются только для связей TCP/IP.
Connection/J бросает исключение, при попытке позволить DNS SRV на
связи именованного канала Windows.
Поддержка DNS SRV для выравнивания нагрузки и Отказоустойчивости.
Для выравнивания нагрузки и связей отказоустойчивости, Connector/J использует
поле priority записей DNS SRV, чтобы выбрать
приоритеты для попыток подключения для хостов.
DNS SRV для объединения связи. В установке объединения связи X
DevAPI Connector/J повторно запрашивает записи DNS SRV регулярно и постепенно
сокращают любые связи, хосты которых больше не появляются в записях, и
повторно допускает связи в пул, когда их хосты вновь появляются в записях.
Поиск записей DNS SRV. Обязанность пользователей обеспечить имя
хоста полного сервиса, Connector/J не добавляет префикс и не утверждает
структуру имени хоста. Ниже приводятся примеры действительных сервисных
образцов имени хоста:
foo.domain.local
_mysql._tcp.foo.domain.local
_mysqlx._tcp.foo.domain.local
_readonly._tcp.foo.domain.local
_readwrite._tcp.foo.domain.local
См. Connections Using DNS SRV Records
в X DevAPI User Guide.
6.13. Отображение кодов ошибок MySQL к кодам JDBC SQLState
Приведенная ниже таблица обеспечивает отображение кодов ошибок MySQL
к значениям JDBC SQLState .
Таблица 6.4. Отображение кодов ошибок MySQL к кодам JDBC SQLState
MySQL Error Number |
Имя ошибки в MySQL |
SQL Standard SQLState |
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 |
|
|