2016-12-11 2 views
0

В MariaDB 5.5 и до того, как может быть только один столбец TIMESTAMP в таблице , которая CURRENT_TIMESTAMP определяется как значение по умолчанию. Этот предел больше не применяется с MariaDB 10.0.MariaDB Баг с TIMESTAMP, CURRENT_TIMESTAMP и ON UPDATE CURRENT_TIMESTAMP

Источник: https://mariadb.com/kb/en/mariadb/timestamp/

Я следующая таблица:

CREATE TABLE oauth_client_details (
    client_id VARCHAR(255) PRIMARY KEY, 
    resource_ids VARCHAR(255), 
    client_secret VARCHAR(255), 
    scope VARCHAR(255), 
    authorized_grant_types VARCHAR(255), 
    web_server_redirect_uri VARCHAR(255), 
    authorities VARCHAR(255), 
    access_token_validity INTEGER, 
    refresh_token_validity INTEGER, 
    additional_information VARCHAR(4096), 
    autoapprove VARCHAR(255), 
    version bigint(20) UNSIGNED DEFAULT '1', 
    creation_datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
    modification_datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    active tinyint(1) UNSIGNED DEFAULT '1' 
); 

мне нужна:

  1. создания дата и время должны быть заполнен с текущим временем на вставке
  2. изменить дату и время модификации с текущей меткой времени при обновлении.

я сделал вставку и здесь значения, которые я получил:

  • creation_datetime: '2016-12-11 20:03:24'
  • modification_datetime: «2016-12-11 : 03: 24 '

Я ожидал, что эти значения будут одинаковыми, так почему же это теперь другое?

Я хотел был бы хранить только время UTC и перевести его к locale в последний момент.

  • Мой весенний сервер использует UTC время.
  • MariaDB:

    SELECT @@global.time_zone, @@global.system_time_zone; 
    |SYSTEM|UTC 
    

Это сейчас в моей стране 20:03, так что я полагаю, что неправильное значение является modification_datetime поле.

Я использую mariadb:10.1.17 официальное изображение докеров без какой-либо модификации изображения.

Это моя вставка заявление:

==> Preparing: insert into oauth_client_details(client_id,authorized_grant_types,access_token_validity,additional_information,active,client_secret,creation_datetime,autoapprove,modification_datetime,resource_ids,web_server_redirect_uri,authorities,refresh_token_validity,scope,version) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) 
==> Parameters: bo(String), authorization_code,refresh_token(String), 1800(Integer), {"companyId":1,"companyName":"testing"}(String), true(Boolean), $2a$10$h/0tc3qnZj/ZfRrNXf.oiuypEyYXJAJZdHPgy2ZMc1XMAntAMPK(String), null, true(Boolean), null, testinggroup/api(String), http://localhost:8080,http://dev:31735(String), ROLE_CLIENT(String), 3600(Integer), read,write,trust(String), 1(Long) 

ли когда-либо был кто это?

Редактировать: Я обновил свой докер Mariadb с версии 10.1.17 до 10.1.19 последней в дате, и у меня все еще есть такая же ошибка.

+0

Появляется, если даты разные, потому что я оставил в коде createDateTime = new DateTime(); Это означает, что сервер DateTime использует мой местный часовой пояс, а sql - другой – BigDong

ответ

0

Кажется, даты разные, потому что я оставил код creationDateTime = new DateTime(); в модели.

Это означает, что сервер использовал DateTime() для createDateTime и UTC базы данных.

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