将默认列值从 datetime 转换为 varchar

Convert default column value from datetime to varchar

我必须向默认为当前时间戳的 table 添加一个 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。有办法吗?

编辑:我基本上是在寻找 MySQL 等价于以下 SQL 服务器语句:

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

MariaDB document

In MariaDB 10.2.1 you can use most functions in DEFAULT. Expressions should have parentheses around them.

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

 (CONVERT(CURRENT_TIMESTAMP, CHAR))

更新

作为替代方案,您可以使用 Trigger 设置稳定版本 (< 10.2) 的函数值

如果您使用 CURRENT_TIMESTAMP 作为默认值,则必须使用函数检索的数据类型,在本例中是时间戳 as you can see in the docs.

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

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

我看到这个字段叫做 "DocumentID",也许你想保存一个哈希值作为标识符?您可以使用 virtual columns. An example.

来实现此目的