17

現在、特定のテーブルのすべての列を一覧表示し、各列が署名されていないかどうかを判断しようとしています。

ここに、私のテスト フィクスチャの例を示します。

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

特定のテーブルのすべての列を一覧表示するには、次の 2 つの可能性を見つけました。

SHOW FULL COLUMNS
FROM ttypes;

ドキュメントによると、このクエリは次のフィールドを返します: Field、Type、Null、Default、Extra & Comment。列が署名されていないかどうかを判断できるものはありません。

その後、クエリinformation_schema.columnsで使用されるベース テーブルであるを調べます。SHOW COLUMNS

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

残念ながら、列が署名されていないかどうかを判断できる結果フィールドはありません。

4

4 に答える 4

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 に答える
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)

残念ながら、Typeand findの内容を解析するunsignedunsigned、そこに含めないかする必要があります-署名された列には何も入れません。

于 2012-05-19T13:24:34.760 に答える
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 に答える