如何确定列是否未签名?

ege*_*oen 14 mysql database-metadata

我目前正在尝试列出特定表的所有列,并确定每列是否未签名.

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

CREATE TABLE ttypes
(
    cbiginteger BIGINT UNSIGNED,
    cinteger INT UNSIGNED,
    csmallinteger SMALLINT UNSIGNED
) ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)

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

SHOW FULL COLUMNS
FROM ttypes;
Run Code Online (Sandbox Code Playgroud)

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

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

SELECT ...
FROM information_schema.columns
WHERE table_name = 'ttypes';
Run Code Online (Sandbox Code Playgroud)

不幸的是,没有结果字段允许我确定列是否未签名.

Sim*_*mon 8

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

那应该包含在SHOW COLUMNS(内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)
Run Code Online (Sandbox Code Playgroud)

不幸的是,您必须解析内容Type并查找unsigned或不在unsigned其中 - 它没有为签名列添加任何内容.


mal*_*hal 5

试试这个魔术:

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'
Run Code Online (Sandbox Code Playgroud)

输出量

COLUMN_NAME  COLUMN_TYPE       IS_NULLABLE  IS_UNSIGNED
-----------  ----------------  -----------  -----------
id           int(10) unsigned  NO           YES
recordID     varchar(255)      YES          NO
Run Code Online (Sandbox Code Playgroud)