Как установить значение по умолчанию для столбца MySQL Datetime?

Вы можете использовать метод ToString () для преобразования целого в строку.

int x = 10;

Console.WriteLine (x.ToString ())

828
задан Moppo 12 July 2015 в 19:15
поделиться

7 ответов

ВАЖНОЕ РЕДАКТИРОВАНИЕ: теперь возможно достигнуть этого с полями DATETIME с тех пор MySQL 5.6.5 , смотреть на другое сообщение ниже...

Предыдущие версии не могут сделать этого с ДАТОЙ И ВРЕМЕНЕМ...

, Но можно сделать это с МЕТКОЙ ВРЕМЕНИ:

mysql> create table test (str varchar(32), ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.00 sec)

mysql> desc test;
+-------+-------------+------+-----+-------------------+-------+
| Field | Type        | Null | Key | Default           | Extra |
+-------+-------------+------+-----+-------------------+-------+
| str   | varchar(32) | YES  |     | NULL              |       | 
| ts    | timestamp   | NO   |     | CURRENT_TIMESTAMP |       | 
+-------+-------------+------+-----+-------------------+-------+
2 rows in set (0.00 sec)

mysql> insert into test (str) values ("demo");
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+------+---------------------+
| str  | ts                  |
+------+---------------------+
| demo | 2008-10-03 22:59:52 | 
+------+---------------------+
1 row in set (0.00 sec)

mysql>

** ПРОТЕСТ: при определении столбца с CURRENT_TIMESTAMP НА как значение по умолчанию необходимо будет ВСЕГДА определять значение для этого столбца, или значение автоматически сбросит себя к "теперь ()" на обновлении. Это означает, что, если Вы не хотите, чтобы значение изменилось, Ваш оператор UPDATE должен содержать" [Ваше имя столбца] = [Ваше имя столбца]" (или некоторое другое значение) или значение станет "теперь ()". Странный, но верный. Я надеюсь, что это помогает. Я использую 5.5.56-MariaDB **

807
ответ дан Community 12 July 2015 в 19:15
поделиться

Можно использовать теперь () для устанавливания значения столбца даты и времени, но иметь в виду, что Вы не можете использовать это в качестве значения по умолчанию.

6
ответ дан KernelM 12 July 2015 в 19:15
поделиться

При попытке установить значение по умолчанию как ТЕПЕРЬ (), я не думаю поддержки MySQL это. В MySQL Вы не можете использовать функцию или выражение как значение по умолчанию ни для какого типа столбца, за исключением столбца Типа данных timestamp, для которого можно определить CURRENT_TIMESTAMP как значение по умолчанию.

3
ответ дан Vijesh VP 12 July 2015 в 19:15
поделиться

это - действительно ужасные новости. вот долгая незаконченная ошибка/запрос новых функций для этого . то обсуждение также говорит об ограничениях типа данных timestamp.

я серьезно задаюсь вопросом, какова проблема с получением этой реализованной вещи.

13
ответ дан Kinjal Dixit 13 July 2015 в 05:15
поделиться
  • 1
    Какие-либо продолжения на этом? Или обходные решения? Походит на ошибку где-нибудь в git/mysgit, если с autocrlf = ложь он все еще настаивает на том, чтобы преобразовывать файлы (файлы, которые, кажется, имеют непоследовательные окончания строки). – core24 1 September 2012 в 05:38

MySQL (before version 5.6.5) does not allow functions to be used for default DateTime values. TIMESTAMP is not suitable due to its odd behavior and is not recommended for use as input data. (See MySQL Data Type Defaults.)

That said, you can accomplish this by creating a Trigger.

I have a table with a DateCreated field of type DateTime. I created a trigger on that table "Before Insert" and "SET NEW.DateCreated=NOW()" and it works great.

I hope this helps somebody.

144
ответ дан 22 November 2019 в 21:11
поделиться

Я смог решить эту проблему с помощью этого оператора alter в моей таблице, у которой было два поля даты и времени.

ALTER TABLE `test_table`
  CHANGE COLUMN `created_dt` `created_dt` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
  CHANGE COLUMN `updated_dt` `updated_dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

Это работает так, как и следовало ожидать now () для работы. Вставка нулей или игнорирование полей created_dt и updated_dt приводит к идеальному значению отметки времени в обоих полях. Любое обновление строки изменяет файл updated_dt. Если вы вставляете записи через браузер запросов MySQL, вам нужен еще один шаг, триггер для обработки created_dt с новой меткой времени.

CREATE TRIGGER trig_test_table_insert BEFORE INSERT ON `test_table`
    FOR EACH ROW SET NEW.created_dt = NOW();

Триггер может быть любым, как вы хотите. Мне нравится соглашение об именах [trig] _ [my_table_name] _ [insert]

27
ответ дан 22 November 2019 в 21:11
поделиться

Для всех, кто использует колонку TIMESTAMP в качестве решения, я хочу обратить внимание на следующее ограничение из руководства:

http://dev.mysql.com/doc/refman/5.0/en/datetime.html

"Тип данных TIMESTAMP имеет диапазон от '1970-01-01 00:00:01' UTC до '2038-01-19 03:14:07' UTC. Он имеет различные свойства, зависящие от версии MySQL и режима SQL, в котором работает сервер. Эти свойства описаны далее в этом разделе. "

Так что это, очевидно, сломает ваше программное обеспечение примерно через 28 лет.

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

7
ответ дан 22 November 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: