2016-06-01 3 views
0

Я создал несколько таблиц с типом данных timestamp. Когда я описываю несколько столбцов временной отметки, по умолчанию отображаются current_timestamp, а несколько столбцов временной отметки по умолчанию отображаются 0000-00-00 00:00:00.000000. Я думал, что столбец timestamp будет только по умолчанию current_timestamp. Я также понимаю, что если мы дадим те даты, которые не указаны в заданном диапазоне от документации, он сохранит значения как 0000-00-00 00:00:00.000000. Но как он показывает различное значение по умолчанию в выводе таблицы desc?MySQL/MariaDB timestamp, datetime datatypes

desc screen; 
+-----------------+--------------+------+-----+---------------------------- 
| Field   | Type   | Null | Key | Default 
+-----------------+--------------+------+-----+---------------------------- 
| SCREEN_ID  | smallint(6) | NO | PRI | NULL 
| SCREEN_NAME  | varchar(100) | NO | UNI | NULL 
| CREATED_BY  | varchar(30) | NO |  | NULL 
| CREATED_DATE | timestamp(6) | NO |  | CURRENT_TIMESTAMP(6) 
| UPDATED_BY  | varchar(30) | NO |  | NULL 
| UPDATED_DATE | timestamp(6) | NO |  | 0000-00-00 00:00:00.000000 
| SYSCREATED_DATE | timestamp(6) | NO |  | CURRENT_TIMESTAMP(6) 
| SYSUPDATED_DATE | timestamp(6) | NO |  | CURRENT_TIMESTAMP(6) 
+-----------------+--------------+------+-----+---------------------------- 

Ниже DDL я использовал для создания таблицы

CREATE TABLE SCREEN (
    SCREEN_ID SMALLINT AUTO_INCREMENT NOT NULL, 
    SCREEN_NAME VARCHAR(100), 
    CREATED_BY VARCHAR(30), 
    CREATED_DATE TIMESTAMP(6), 
    UPDATED_BY VARCHAR(30), 
    UPDATED_DATE TIMESTAMP(6), 
    SYSCREATED_DATE TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP, 
    SYSUPDATED_DATE TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP, 
    CONSTRAINT SCREEN_PK PRIMARY KEY(SCREEN_ID) 
); 

Пожалуйста, помогите мне. Я планирую изменить все столбцы timestamp на datetime из-за этого несоответствия. Целесообразно?

+0

Из любопытства, что означает 'TIMESTAMP (6)'? – Mjh

+0

У меня вопрос. Мы используем эти столбцы для хранения метки времени при вставке новой строки или обновлении существующей строки. Он сохраняет значение метки времени в этом формате. 2015-08-03 19: 49: 43.187081 – user6404269

+0

Мне интересно, почему у вас есть '(6)' рядом с типом поля. Зачем вам отрезать длину дисплея? Для этого должна быть причина. – Mjh

ответ

0

Ваш столбец UPDATED_DATE не имеет значения по умолчанию. Таким образом, описание показывает некоторый хлам в столбце значения по умолчанию ... Измените его на DEFAULT CURRENT_TIMESTAMP, как и на другие поля.

+0

Привет, Jehy, Большое спасибо за ваш ответ. У меня есть не задано значение по умолчанию для созданной даты, а также обновленная дата ... вы можете проверить то же самое в DDL, который я опубликовал ранее. Поэтому мой вопрос в том, почему created_date показывает current_timestamp, где as updated_date показывает 0000-00 ... значение, когда я описываю таблицу – user6404269

+0

@ user6404269 О, извините, вы не описали, какие столбцы сомнительны. Для 'created_date' и' updated_date' - не должно быть разницы. Попробуйте изменить таблицу, чтобы сделать столбцы одинаковыми. Кстати, я не советую использовать тип TIMESTAMP, потому что это зависит от часового пояса сервера. Также см. Мой комментарий на вопрос о timestamp (6). – Jehy

+0

Спасибо Jehy, я изменил все столбцы timestamp на datetime – user6404269

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