Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да промените часовата зона на MySQL във връзка с база данни с помощта на Java?

useTimezone е по-старо решение. Екипът на MySQL пренаписа setTimestamp/getTimestamp кода сравнително наскоро, но той ще бъде активиран само ако зададете параметъра на връзката useLegacyDatetimeCode=false и използвате най-новата версия на mysql JDBC конектор. Така например:

String url =
 "jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false

Ако изтеглите изходния код на mysql-connector и погледнете setTimestamp, е много лесно да видите какво се случва:

Ако използвате наследен код за дата и време =false, се извиква newSetTimestampInternal(...). След това, ако календарът, предаден на newSetTimestampInternal, е NULL, вашият обект за дата се форматира в часовата зона на базата данни:

this.tsdf = new SimpleDateFormat("''yyyy-MM-dd HH:mm:ss", Locale.US);
this.tsdf.setTimeZone(this.connection.getServerTimezoneTZ());
timestampString = this.tsdf.format(x);

Много е важно Календарът да е нулев - така че се уверете, че използвате:

setTimestamp(int,Timestamp).

... НЕ setTimestamp(int,Timestamp,Calendar).

Сега трябва да е ясно как работи това. Ако създадете дата:5 януари 2011 г. 3:00 ч. в Америка/Лос_Анджелес (или каквато часова зона искате) с помощта на java.util.Calendar и извикате setTimestamp(1, myDate), тогава тя ще вземе вашата дата, използвайте SimpleDateFormat за да го форматирате в часовата зона на базата данни . Така че, ако вашата БД е в America/New_York, тя ще изгради низа '2011-01-05 6:00:00', който да бъде вмъкнат (тъй като Ню Йорк изпреварва LA с 3 часа).

За да извлечете датата, използвайте getTimestamp(int) (без календара). Отново ще използва часовата зона на базата данни, за да изгради дата.

Забележка:Часовата зона на уеб сървъра вече е напълно без значение! Ако не зададете useLegacyDatetimecode на false, часовата зона на уеб сървъра се използва за форматиране – добавя много объркване.

Забележка:

Възможно е MySQL да се оплаквам, че часовата зона на сървъра е двусмислена. Например, ако вашата база данни е настроена да използва EST, може да има няколко възможни EST часови зони в Java, така че можете да изясните това за mysql-connector, като му кажете точно каква е часовата зона на базата данни:

String url =
 "jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false&serverTimezone=America/New_York";

Трябва да направите това само ако се оплаква.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Код на грешка:1215. Не може да се добави ограничение за външен ключ (външни ключове)

  2. Получаване на времева разлика между две времена в PHP

  3. PDO множество заявки

  4. Как мога да активирам бавния регистър на заявките на MySQL, без да рестартирам MySQL?

  5. Как да търсите точно съвпадаща дума с MySql Query