17

我目前正在尝试列出特定表的所有列并确定每列是否无符号。

这里,我的测试夹具的一个例子:

CREATE TABLE ttypes
(
    cbiginteger BIGINT UNSIGNED,
    cinteger INT UNSIGNED,
    csmallinteger SMALLINT UNSIGNED
) ENGINE = InnoDB;

为了列出特定表的所有列,我发现了两种可能性:

SHOW FULL COLUMNS
FROM ttypes;

根据文档,此查询返回以下字段:字段、类型、空值、默认值、额外和注释。它们都不允许我确定列是否未签名。

之后,我查看information_schema.columns哪个是SHOW COLUMNS查询使用的基表。

SELECT ...
FROM information_schema.columns
WHERE table_name = 'ttypes';

不幸的是,没有一个结果字段允许我确定列是否是无符号的。

4

4 回答 4

8

据我所知,这些属性存储的唯一位置是COLUMN_TYPEINFORMATION_SCHEMA.COLUMNS.

这应该包含在SHOW COLUMNS(within Type)的输出中:

mysql> show columns from ttypes;
+---------------+----------------------+------+-----+---------+-------+
| Field         | Type                 | Null | Key | Default | Extra |
+---------------+----------------------+------+-----+---------+-------+
| cbiginteger   | bigint(20) unsigned  | YES  |     | NULL    |       |
| cinteger      | int(10) unsigned     | YES  |     | NULL    |       |
| csmallinteger | smallint(5) unsigned | YES  |     | NULL    |       |
+---------------+----------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

不幸的是,您必须解析Typeand find的内容unsigned,或者不在unsigned那里 - 它不会为已签名的列添加任何内容。

于 2012-05-19T13:24:34.760 回答
8

试试这个魔法:

select COLUMN_NAME,
       COLUMN_TYPE, 
       IS_NULLABLE, 
       IF(COLUMN_TYPE LIKE '%unsigned', 'YES', 'NO') as IS_UNSIGNED 
       from information_schema.COLUMNS where TABLE_NAME='record1'

输出

COLUMN_NAME  COLUMN_TYPE       IS_NULLABLE  IS_UNSIGNED
-----------  ----------------  -----------  -----------
id           int(10) unsigned  NO           YES
recordID     varchar(255)      YES          NO
于 2015-02-20T12:45:47.470 回答
4

要确定表中所有变量的类型,您可以运行如下查询:

select COLUMN_NAME,COLUMN_TYPE from information_schema.COLUMNS where TABLE_NAME='ttypes' and COLUMN_TYPE LIKE '%unsigned%' 

之后,您可以使用如下查询轻松确定特定变量(例如 cinterger)的类型:

select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='ttypes' and COLUMN_TYPE LIKE '%unsigned%' and COLUMN_NAME LIKE 'cinteger'

上面的代码只有在没有符号的情况下才会返回搜索到的变量的名称。

最后,您可以使用 mysql 循环、过程或您喜欢的脚本语言来使用此结果和/或继续搜索其他变量。

于 2012-05-19T14:59:37.253 回答
0

以防万一有人偶然发现.net 中的 MySQL 驱动程序,像我一样使用 GetSchema(),这里是未签名信息的可用方式。

_connection.GetSchema("Columns")

在此处输入图像描述

进而:

在此处输入图像描述

希望这不是完全不适合这个问题,并帮助寻找以编程方式确定标志的人。

于 2018-08-27T16:28:53.970 回答