2012-05-19 21 views
13

Attualmente sto cercando di elencare tutte le colonne di una tabella specifica e determinare se ogni colonna non è firmata o meno.Come determinare se una colonna non è firmata?

Qui, un esempio del mio dispositivo di prova:

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

Per elencare tutte le colonne di una tabella specifica, ho trovato due possibilità:

SHOW FULL COLUMNS 
FROM ttypes; 

Secondo il documentation, questo query restituisce questi campi: Field, Type, Null, Default, Extra & Comment. Nessuno di questi mi consente di determinare se una colonna non è firmata o meno.

Dopodiché, guardo allo information_schema.columns che è la tabella di base utilizzata dalla query SHOW COLUMNS.

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

Sfortunatamente, nessuno dei campi risultato mi consente di determinare se una colonna non è firmata o meno.

+0

Quale versione di MySQL stai usando? – Simon

risposta

7

Per quanto posso dire, l'unico posto in cui sono memorizzati questi attributi è in COLUMN_TYPE in INFORMATION_SCHEMA.COLUMNS.

che dovrebbero essere inclusi nel uscita dal SHOW COLUMNS (entro 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) 

Purtroppo dovreste analizzare il contenuto di Type e trovare unsigned, o no unsigned in là - esso doesn' t mettere tutto dentro per le colonne firmate.

+0

Grazie per la tua risposta rapida. – egeloen

4

Per determinare tipo per tutte le variabili di una tabella è possibile eseguire una query come questa:

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

Dopo che il vostro può facilmente determinare il tipo di una variabile specifica (ad esempio, la cinterger) con una query come questa :

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

Il codice sopra riportato restituirà il nome della variabile cercato solo se non è firmato.

Finalmente è possibile utilizzare un ciclo mysql, una procedura o il proprio linguaggio di scripting preferito per utilizzare questo risultato e/o continuare a cercare altre variabili.

3

Prova questa magia:

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' 

uscita

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