如何通过适当的引用从 MySQL 5.7 information_schema.columns 获取默认列值?
Posted
技术标签:
【中文标题】如何通过适当的引用从 MySQL 5.7 information_schema.columns 获取默认列值?【英文标题】:How to get a default column value from MySQL 5.7 information_schema.columns with appropriate quoting? 【发布时间】:2021-10-08 21:05:07 【问题描述】:我维护 Beekeeper Studio,一个开源 SQL GUI。
我在 mysql 5.7 中遇到了 information_schema.columns
的问题。
运行时:
select * from information_schema.columns where table_name = ?`
它返回COLUMN_DEFAULT
,但它似乎没有区分变量(例如CURRENT_TIMESTAMP)和字符串'foo'。
有没有地方可以通过适当的引用获得“真实”默认值?
我的期望:
CURRENT_TIMESTAMP
'foo'
【问题讨论】:
检查列的数据类型并在需要时用引号将默认值括起来。但请记住,有时会有歧义(例如,当数据类型为 ENUM 或 SET 时)。 PS。 CURRENT_TIMESTAMP 是一个函数,而不是一个变量。 真正的默认值已经在DEFAULT_VALUE
列中,就像真正的column_name在COLUMN_NAME
列中一样。尝试对值执行某些操作时可能需要引用,但引用不是(或从不)值的一部分。
【参考方案1】:
不幸的是,在 MySQL 5.7 中,INFORMATION_SCHEMA 中没有可以告诉您这一点的元数据。您只需要知道对于 DATETIME 或 TIMESTAMP 列,CURRENT_TIMESTAMP 是一种特殊情况。
它在代码中被视为特殊情况,因此如果您使用 SHOW CREATE TABLE,它会输出文字字符串“CURRENT_TIMESTAMP”而不是带引号的日期时间值。
https://github.com/mysql/mysql-server/blob/5.7/sql/sql_show.cc#L1402-L1411
【讨论】:
以上是关于如何通过适当的引用从 MySQL 5.7 information_schema.columns 获取默认列值?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Magnolia 5.7 中检测设备并渲染适当的图像变化