我目前正在尝试列出一个特定表的所有列,并确定每一列是否是无符号的。
下面是我的测试夹具的一个例子:
CREATE TABLE ttypes
(
cbiginteger BIGINT UNSIGNED,
cinteger INT UNSIGNED,
csmallinteger SMALLINT UNSIGNED
) ENGINE = InnoDB;
为了列出特定表的所有列,我发现了两种可能性:
SHOW FULL COLUMNS
FROM ttypes;
根据documentation,此查询返回以下字段:字段、类型、空值、默认值、附加值和注解。它们都不允许我确定一个列是否是无符号的。
之后,我查看information_schema.columns
,它是SHOW COLUMNS
查询使用的基表。
SELECT ...
FROM information_schema.columns
WHERE table_name = 'ttypes';
不幸的是,没有一个结果字段允许我确定一个列是否是无符号的。
5条答案
按热度按时间bybem2ql1#
试试这个魔法:
输出
vshtjzan2#
据我所知,这些属性的唯一存储位置是
INFORMATION_SCHEMA.COLUMNS
中的COLUMN_TYPE
。这应该包含在
SHOW COLUMNS
的输出中(在Type
内):不幸的是,您必须解析出
Type
的内容,并在其中找到unsigned
,或者不是unsigned
-它没有为有符号列放入任何内容。ercv8c1e3#
要确定表中所有变量的类型,可以运行如下查询:
之后,您可以轻松地确定特定变量的类型(例如cinterger),查询如下:
上面的代码只会在变量是无符号的情况下返回所搜索的变量的名称。
最后,你可以使用mysql循环,过程或你最喜欢的脚本语言来使用这个结果和/或继续搜索其他变量。
6xfqseft4#
为了防止有人在.net中偶然发现这个MySQL驱动程序,像我一样使用GetSchema(),这里是如何获得未签名信息的。
然后:
希望这不是完全不合时宜的问题,并帮助有人寻找编程确定的迹象。
jm81lzqq5#
我使用SQLColumns通过ODBC获取类型名称。这适用于8.0.29之前的Connector/ODBC版本。从8.0.29开始,它不再包含“unsigned”,我再也不能以这种方式获取类型。