質問

現在、特定のテーブルのすべての列をリストして、各列が符号なしまたはそうでないかどうかを判断します。

ここでは、私のテストフィクスチャの例:

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

特定の表のすべての列をリストするために、2つの可能性を発見しました:

SHOW FULL COLUMNS
FROM ttypes;
. ドキュメント、このクエリは返されます。これらのフィールド:フィールド、type、null、デフォルト、特別&コメント。それらのどれも私が列が符号なしまたはそうでないかどうかを判断することを許可しません。

その後、 information_schema.columns これはSHOW COLUMNSクエリによって使用される基本テーブルです。

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

残念ながら、どの結果フィールドも私が列が符号なしまたはそうでないかどうかを判断することを可能にします。

役に立ちましたか?

解決

私が知ることができる限り、それらの属性のみが保存されている唯一の場所はCOLUMN_TYPEINFORMATION_SCHEMA.COLUMNSにあります。

SHOW COLUMNSType内)からの出力に含まれるべきです:

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を見つけてはいけません。

他のヒント

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

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
.

テーブル内のすべての変数の型を決定するには、次のようなクエリを実行できます。

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

誰かが.NETのMySQLドライバでは、GetSchema()を使用して、ここに符号なし情報が利用可能な方法です。

_connection.GetSchema("Columns")
.

画像の説明が入力されています

、次に

画像の説明が入力されています

これが質問のために完全にされていないことを願って、そしてプログラムで看板を決定することを見ている人に役立ちます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top