2014-07-03 6 views
0

мне нужно понять, как Sybase ручки и магазины часовых поясов:Как Sybase обрабатывает часовые пояса?

Например, если клиент JDBC, например, в часовом поясе +1: 00 и Sybase DB находится в часовом поясе +2: 00:

  1. Когда клиентское приложение JDBC записывается в базу данных (например, INSERT/UPDATE), Sybase преобразует дату и время, полученные от клиентского приложения, в локальный часовой пояс, когда он хранит его в таблице db?
  2. Когда клиентское приложение JDBC читает из базы данных, будет ли набор результатов Sybase содержать клиентский или часовой пояс сервера с запросами SELECT?
  3. Если поле сервера БД впоследствии перенесено в другую страну, например, во временной зоне +3: 00, будут ли значения даты и времени, хранящиеся в базе данных Sybase, несовместимыми с datetime, вставленными после перемещения?

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

+0

Экспериментируйте, и вы откроете для себя ответы. Или прочитайте документацию. Вероятно, вы обнаружите, что поведение зависит от типа данных. –

+0

К сожалению, у меня нет бесплатного сервера базы данных Sybase, на котором я могу экспериментировать. Я также не администратор базы данных, поэтому я задаю вопрос. – Koning

ответ

1

Sybase ASE будет хранить любую метку времени, переданную ей клиентским приложением. Он предполагает, что приложение знает, что он делает, и не будет делать никакого преобразования.

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

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

+1

Я добавлю вышеизложенное, хотя клиентское приложение считывает данные с сервера Sybase с использованием своей даты системы (getdate()), это будет основано на настройке локального часового пояса базы данных, а не часовом поясе клиентского приложения. Вы можете использовать getutcdate() для получения согласованного времени в часовых поясах, так как это всегда возвращает дату UTC. Если у вас есть сомнения –

0

Я понимаю, что Sysbase хранит микросекунд с 00:00 1 января 1970.

  • ВЫБРАТЬ \ READ: возвращает преобразованную дату (которые хранились в микросекундах) в часовом поясе хост-машине ,
  • INSERT \ WRITE: Вставляет значение микросекунд в зависимости от часового пояса часового пояса хост-машины.

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

Моя рекомендация, у меня есть DB и Application, всегда обрабатывайте в UTC, сделайте преобразование в слое презентации.

Смежные вопросы