2012-05-19 26 views
13

現在、特定のテーブルのすべての列をリストし、各列が符号なしであるかどうかを判断しようとしています。ここで列が符号なしであるかどうかを判断する方法?

、私のテスト・フィクスチャの例:

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

特定のテーブルのすべての列を一覧表示するために、私は2つの可能性を発見した:、documentationによれば、これを

SHOW FULL COLUMNS 
FROM ttypes; 

をクエリは次のフィールドを返します:フィールド、タイプ、ヌル、デフォルト、追加&コメント。それらのどれも、私が列が符号なしかどうかを判断することはできません。

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

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

残念ながら、結果フィールドでは、列が符号なしかどうかを判断できません。

+0

あなたは、MySQLのバージョンは何を使用していますか? – Simon

答えて

7

私が知る限り、それらの属性が格納される場所はCOLUMN_TYPEで、INFORMATION_SCHEMA.COLUMNSです。 (Type以内)SHOW COLUMNSからの出力に含まれるべきである

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) 

残念ながらあなたはTypeの内容を解析し、そこにunsigned、またはないunsignedを見つける必要があるだろう - それはdoesnの署名付きの列の場合は何も入れません。あなたはこのようなクエリを実行することができ、テーブル内のすべての変数の型を決定するために

+0

すぐにお返事ありがとうございます。 – egeloen

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ループ、プロシージャ、またはお気に入りのスクリプト言語を使用することができます。

3

はこの魔法を試してみてください:

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 
関連する問題