将默认列值从 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]
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.
来实现此目的
我必须向默认为当前时间戳的 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]
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.
来实现此目的