将默认列值从datetime转换为varchar

时间:2016-06-23 12:14:04

标签: mysql sql mariadb

我必须将varchar列添加到默认为当前时间戳的表中。为此,我需要将值从datetime转换为varchar。

我尝试了以下

ALTER TABLE `TableName`
    CHANGE COLUMN `DocumentID` `DocumentID` VARCHAR(150) NULL DEFAULT CONVERT(NOW(), CHAR);

ALTER TABLE `TableName`
    CHANGE COLUMN `DocumentID` `DocumentID` VARCHAR(150) NULL DEFAULT CONVERT(CURRENT_TIMESTAMP, CHAR);

我总是收到错误消息,我的语法错误。我正在使用MariaDB和HeidiSQL。有没有办法做到这一点?

编辑:我基本上是在寻找以下SQL Server语句的MySQL等价物:

ALTER TABLE [dbo].[TableName] ADD  CONSTRAINT [DF_TableName_DocumentID]  DEFAULT (getdate()) FOR [DocumentID]

2 个答案:

答案 0 :(得分:1)

MariaDB document

  

在MariaDB 10.2.1中,您可以使用DEFAULT中的大多数功能。表达式   周围应该有括号。

因此,您可以检查MariaDB的版本并使用正确的语法(表达式括号):

 (CONVERT(CURRENT_TIMESTAMP, CHAR))

<强>更新

作为替代方案,您可以使用Trigger设置稳定版本的功能值(&lt; 10.2)

答案 1 :(得分:0)

如果使用CURRENT_TIMESTAMP作为默认值,则必须使用函数检索的数据类型,在本例中为时间戳https://www.sencha.com/forum/showthread.php?299915-How-to-make-an-ajax-request-cross-origin-CORS

我不知道可能导致您将其另存为varchar的原因。我不确定,但我认为MariaDB不允许将函数作为默认值调用,因此您无法将CURRENT_TIMESTAMP转换为varchar。您有另一种方法,使用插入后触发器更新字段(您可以在触发器内调用CONVERT(CURRENT_TIMESTAMP,VARCHAR))。

无论哪种方式,我都建议保留时间戳。

我看到该字段被称为&#34; DocumentID&#34;,或许你想将哈希值保存为标识符?您可以使用as you can see in the docs来实现此目的。 virtual columns