Domanda

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

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 Documentazione , questa query ritornaQuesti campi: campo, tipo, null, default, extra e commento.Nessuno di loro mi consente di determinare se una colonna non è firmata o meno.

Dopo di ciò, guardo il 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 di risultato mi consente di determinare se una colonna non è firmata o meno.

È stato utile?

Soluzione

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

che dovrebbe essere incluso nell'output da SHOW COLUMNS (all'interno di 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 dovresti analizzare il contenuto di Type e trovare unsigned, o non unsigned in là - non mette nulla in colonne firmate.

Altri suggerimenti

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'
.

output

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

Per determinare il tipo per tutte le variabili in 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 tuo può determinare facilmente il tipo per una variabile specifica (ad esempio il 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 cercata solo se non è firmata.

Alla fine la tua può utilizzare un loop mySQL, una procedura o il tuo linguaggio di scripting preferito per utilizzare questo risultato e / o continuare a cercare altre variabili.

Nel caso in cui qualcuno inciampa su questo per il driver MySQL in .NET, usando Gestchema () come me, ecco come è disponibile le informazioni senza firma.

_connection.GetSchema("Columns")
.

 Inserire l'immagine Descrizione qui

E poi:

 Inserire l'immagine Descrizione qui

Spero che questo non sia completamente fuori luogo per la domanda e aiuta qualcuno a cercare a livello programmatico determinando il segno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top