Wie kann festgestellt werden, ob eine Spalte ohne Vorzeichen ist?
-
11-12-2019 - |
Frage
Ich versuche derzeit, alle Spalten einer bestimmten Tabelle aufzulisten und festzustellen, ob jede Spalte ohne Vorzeichen ist oder nicht.
Hier ein Beispiel meiner Testvorrichtung:
CREATE TABLE ttypes
(
cbiginteger BIGINT UNSIGNED,
cinteger INT UNSIGNED,
csmallinteger SMALLINT UNSIGNED
) ENGINE = InnoDB;
Um alle Spalten einer bestimmten Tabelle aufzulisten, habe ich zwei Möglichkeiten gefunden:
SHOW FULL COLUMNS
FROM ttypes;
Nach dem Dokumentation, diese Abfrage gibt diese Felder zurück:Feld, Typ, Null, Standard, Extra & Kommentar.Mit keinem von ihnen kann ich feststellen, ob eine Spalte ohne Vorzeichen ist oder nicht.
Danach schaue ich mir die an information_schema.columns
welches ist die Basistabelle, die von der SHOW COLUMNS
Abfrage.
SELECT ...
FROM information_schema.columns
WHERE table_name = 'ttypes';
Leider kann ich in keinem der Ergebnisfelder feststellen, ob eine Spalte ohne Vorzeichen ist oder nicht.
Lösung
Soweit ich das beurteilen kann, sind diese Attribute nur dort gespeichert COLUMN_TYPE
in INFORMATION_SCHEMA.COLUMNS
.
Das sollte in der Ausgabe von enthalten sein SHOW COLUMNS
(innerhalb 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)
Leider müssten Sie den Inhalt von analysieren Type
und finde unsigned
, oder nicht unsigned
da drin - es enthält nichts für signierte Spalten.
Andere Tipps
Versuchen Sie diese Magie: generasacodicetagpre.
Ausgang generasacodicetagpre.
Um den Typ für alle Variablen in einer Tabelle zu ermitteln, können Sie eine solche Abfrage ausführen: generasacodicetagpre.
danach kann Ihr Typ einfach für eine bestimmte Variable (z. B. das Cinterger) mit einem solchen Abfrage festlegen: generasacodicetagpre.
Der obige Code gibt den Namen der Variablen zurück, die nur gesucht wird, wenn es nicht signiert ist.
endlich Ihre können Sie ein MySQL-Loop, ein Verfahren oder Ihre bevorzugte Skriptsprache verwenden, um dieses Ergebnis zu verwenden und / oder weitere Variablen durchsuchen.
Nur für den Fall, dass jemand das für den MySQL-Treiber in .NET stolpert, verwenden Sie mit GetsChema () wie ich, wie die nicht signierten Info verfügbar sind. generasacodicetagpre.
und dann:
Ich hoffe, dies ist nicht völlig außerhalb des Ortes für die Frage, und hilft jemandem, das programmgesteuerte Bestimmung des Zeichens zu ermitteln.