Question

J'essaie actuellement de lister toutes les colonnes d'une table spécifique et de déterminer si chaque colonne n'est pas signée ou non.

Ici, un exemple de mon montage de test :

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

Afin de lister toutes les colonnes d'un tableau spécifique, j'ai trouvé deux possibilités :

SHOW FULL COLUMNS
FROM ttypes;

Selon le Documentation, cette requête renvoie ces champs :Champ, Type, Null, Par défaut, Extra et Commentaire.Aucun d'entre eux ne me permet de déterminer si une colonne n'est pas signée ou non.

Après cela, je regarde le information_schema.columns qui est la table de base utilisée par le SHOW COLUMNS requête.

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

Malheureusement, aucun des champs de résultat ne me permet de déterminer si une colonne n'est pas signée ou non.

Était-ce utile?

La solution

Pour autant que je sache, le seul endroit où ces attributs sont stockés est dans COLUMN_TYPE dans INFORMATION_SCHEMA.COLUMNS.

Cela devrait être inclus dans la sortie de SHOW COLUMNS (dans 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)

Malheureusement, vous devrez analyser le contenu de Type et trouve unsigned, ou non unsigned là-dedans - il ne met rien pour les colonnes signées.

Autres conseils

Essayez cette magie :

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'

Sortir

COLUMN_NAME  COLUMN_TYPE       IS_NULLABLE  IS_UNSIGNED
-----------  ----------------  -----------  -----------
id           int(10) unsigned  NO           YES
recordID     varchar(255)      YES          NO

Pour déterminer le type de toutes les variables d'une table, vous pouvez exécuter une requête comme celle-ci :

select COLUMN_NAME,COLUMN_TYPE from information_schema.COLUMNS where TABLE_NAME='ttypes' and COLUMN_TYPE LIKE '%unsigned%' 

Après cela, vous pouvez facilement déterminer le type d'une variable spécifique (par exemple le cinterger) avec une requête comme celle-ci :

select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='ttypes' and COLUMN_TYPE LIKE '%unsigned%' and COLUMN_NAME LIKE 'cinteger'

Le code ci-dessus renverra le nom de la variable recherchée uniquement si elle n'est pas signée.

Enfin, vous pouvez utiliser une boucle MySQL, une procédure ou votre langage de script préféré pour utiliser ce résultat et/ou continuer à rechercher d'autres variables.

Juste au cas où quelqu'un tomberait sur cela pour le pilote MySQL dans .net, en utilisant GetSchema() comme moi, voici comment les informations non signées sont disponibles.

_connection.GetSchema("Columns")

enter image description here

Et puis:

enter image description here

J'espère que cela n'est pas complètement hors de propos pour la question et aide quelqu'un qui cherche à déterminer le signe par programme.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top