如何通过适当的引用从 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 获取默认列值?的主要内容,如果未能解决你的问题,请参考以下文章

mysql 5.7 多源复制 原创

如何在 Magnolia 5.7 中检测设备并渲染适当的图像变化

mysql 5.7 json类型字段操作

如何在 mysql 5.7 上显示从月份的第一个日期到 MYSQL 5.7 上的月底日期的日期? [复制]

如何从 Mysql 8.0 转储到 5.7?

mysql 5.7 json 增删改查怎么写