我必须将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]
答案 0 :(得分:1)
在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