列が符号なしのかどうかを判断する方法?
-
11-12-2019 - |
質問
現在、特定のテーブルのすべての列をリストして、各列が符号なしまたはそうでないかどうかを判断します。
ここでは、私のテストフィクスチャの例:
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_TYPE
のINFORMATION_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)
.
残念ながら、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ループ、プロシージャまたはお気に入りのスクリプト言語を使用することができます。
所属していません StackOverflow