6.3.11 Обработка типов DateTime
-
connectionTimeZoneНастраивает часовой пояс подключения, который используется Connector/J, если при сохранении мгновенных временных значений требуется преобразование между значением по умолчанию JVM и целевым часовым поясом.
Принимает имя географического часового пояса или смещение часового пояса от Гринвича/UTC, используя синтаксис, который может разобрать 'java.time.ZoneId', или одно из двух логических значений "LOCAL" и "SERVER". По умолчанию значение равно "LOCAL". Если задан явный часовой пояс, то он должен поддерживаться как JVM, так и MySQL. Если задано значение "LOCAL", драйвер предполагает, что часовой пояс подключения совпадает с часовым поясом JVM по умолчанию. Если задано значение "SERVER", драйвер пытается определить часовой пояс сеанса из значений, настроенных в переменных сеанса MySQL-сервера 'time_zone' или 'system_time_zone'. Обнаружение часового пояса и последующее сопоставление с часовым поясом Java могут завершиться неудачей по нескольким причинам, в основном из-за использования сокращений названий часовых поясов, в этом случае необходимо установить явный часовой пояс или настроить другой часовой пояс на сервере.
Этот параметр сам по себе не устанавливает переменную сеанса MySQL-сервера 'time_zone' в заданное значение. Для этого необходимо установить параметр подключения 'forceConnectionTimeZoneToSession' в значение "true".
Обратите внимание, что установка значения для 'connectionTimeZone' в сочетании с "forceConnectionTimeZoneToSession=false" и "preserveInstants=false" не имеет эффекта, так как в этом случае этот параметр не используется для изменения часового пояса сеанса, ни для преобразований часовых поясов данных, основанных на времени.
Прежний параметр подключения 'serverTimezone' по-прежнему допустим как псевдоним для этого параметра, но в будущем может быть устаревшим.
Дополнительную информацию см. в параметрах 'forceConnectionTimeZoneToSession' и 'preserveInstants'.
С версии 3.0.2 -
forceConnectionTimeZoneToSessionПри включении устанавливает значение часового пояса, определённое свойством подключения 'connectionTimeZone', в текущую переменную сеанса сервера 'time_zone'. Если значение часового пояса задано как географический часовой пояс, то Connector/J устанавливает это значение в сеансе сервера как есть, в этом случае таблицы системы часовых поясов должны быть заполнены предварительно (см. документацию MySQL Server для получения дополнительной информации); однако, если значение задано как смещение от Гринвича/UTC в любом из поддерживаемых синтаксисов, то часовой пояс сеанса сервера устанавливается как числовое смещение от UTC.
В этом случае не требуется промежуточное преобразование между часовым поясом JVM по умолчанию и часовым поясом подключения для хранения корректного значения миллисекунд мгновенных объектов Java, таких как 'java.sql.Timestamp' или 'java.time.OffsetDateTime', при хранении в столбцах TIMESTAMP.
Обратите внимание, что это также влияет на результат работы функций MySQL, таких как 'NOW()', 'CURTIME()' или 'CURDATE()'.
Этот параметр не имеет эффекта, если используется совместно с "connectionTimeZone=SERVER", так как в этом случае сеанс уже настроен на нужный часовой пояс.
Дополнительную информацию см. в параметрах 'connectionTimeZone' и 'preserveInstants'.
Значение по умолчанию false С версии 8.0.23 -
noDatetimeStringSyncНе гарантировать, что 'ResultSet.getTimestamp().toString().equals(ResultSet.getString())'.
Значение по умолчанию false С версии 3.1.7 -
preserveInstantsЕсли включено, Connector/J делает всё возможное, чтобы сохранить мгновенную точку на временной шкале для объектов Java, основанных на моментах времени, таких как 'java.sql.Timestamp' или 'java.time.OffsetDateTime', вместо их первоначального визуального представления. В противном случае драйвер всегда использует часовой пояс JVM по умолчанию для отображения значений, которые он отправляет на сервер, и для построения объектов Java из полученных данных.
MySQL использует неявное преобразование часового пояса для значений TIMESTAMP: они преобразуются из часового пояса сеанса в UTC для хранения и обратно из UTC в часовой пояс сеанса для извлечения. Таким образом, чтобы сохранить корректное значение UTC внутри, драйвер преобразует значение из исходного часового пояса в часовой пояс сеанса перед отправкой на сервер. При извлечении Connector/J преобразует полученное значение из часового пояса сеанса в часовой пояс JVM по умолчанию.
При хранении преобразование выполняется только в том случае, если целевой 'SQLType', либо явный, либо по умолчанию, равен TIMESTAMP. При извлечении преобразование выполняется только в том случае, если исходный столбец имеет тип TIMESTAMP, DATETIME или символьного типа, а целевой класс — основанный на моментах времени, например, 'java.sql.Timestamp' или 'java.time.OffsetDateTime'.
Обратите внимание, что этот параметр не имеет эффекта, если используется в сочетании с "connectionTimeZone=LOCAL", так как в этом случае исходный и целевой часовые пояса одинаковы. Однако в этом случае всё ещё можно сохранить правильное значение момента времени, если он установлен вместе с "forceConnectionTimeZoneToSession=true".
Дополнительную информацию см. в параметрах 'connectionTimeZone' и 'forceConnectionTimeZoneToSession'.
Значение по умолчанию true С версии 8.0.23 -
sendFractionalSecondsЕсли установлено в "false", дробная часть секунды всегда будет усечена перед отправкой любых данных на сервер. Этот параметр применим только к подготовленным запросам, вызываемым операциям или обновляемым наборам результатов.
Значение по умолчанию true С версии 5.1.37 -
sendFractionalSecondsForTimeЕсли установлено в "false", дробная часть секунды 'java.sql.Time' будет игнорироваться в соответствии со спецификацией JDBC. Если установлено в "true", её значение отображается с дробной частью секунды, что позволяет хранить миллисекунды в столбце TIME MySQL. Этот параметр применим только к подготовленным запросам, вызываемым операциям или обновляемым наборам результатов. Он не имеет эффекта, если "sendFractionalSeconds=false".
Значение по умолчанию true С версии 8.0.23 -
treatMysqlDatetimeAsTimestampДолжен ли драйвер рассматривать тип MySQL DATETIME как TIMESTAMP в 'ResultSet.getObject()'? Включение этого параметра изменяет сопоставление по умолчанию типов данных MySQL с типами Java для DATETIME со 'java.time.LocalDateTime' на 'java.sql.Timestamp'. Учитывая природу типа DATETIME и его неспособность представлять мгновенные значения, не рекомендуется включать этот параметр, если драйвер используется с фреймворком или API, которые ожидают исключительно объекты, соответствующие сопоставлению по умолчанию типов данных MySQL с типами Java, что, например, характерно для 'javax.sql.rowset.CachedRowSet'.
Значение по умолчанию false С версии 8.2.0 -
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
© 2025 Oracle
Licensed under the GPLv2 License.