Ist es möglich, den Feldtyp aus einer MySQL- Abfrage abzurufen , genauso wie Sie ihn mit dem SHOW COLUMNS
Befehl aus einer Tabelle abrufen können? Wie aus einer abgeleiteten Tabelle,
SELECT x -- presumedMetaFn(x) -- returns "int"
FROM (
SELECT 1 AS x
UNION SELECT 2
) AS t;
Gibt es angesichts der obigen Abfrage eine Funktion oder etwas, mit dem ich den Typ x ermitteln kann? PostgreSQL stellt dies mit den Systeminformationsfunktionen zur Verfügungpg_typeof
SELECT x, pg_typeof(x)
FROM ( VALUES (1),(2) ) AS t(x);
x | pg_typeof
---+-----------
1 | integer
2 | integer
(2 rows)
Ich suche nicht nach Metadaten in einer Tabelle, sondern nach dem Ergebnis der Abfrage. Unter psql
PostgreSQL 11+ ist dies auch möglich, indem \gdesc
die Abfrage ausgeführt wird.
Antworten:
In MySQL können Sie diese Informationen abrufen, indem Sie eine temporäre Tabelle erstellen und dann
DESCRIBE
diese temporäre Tabelle verwenden:Wir können nicht nur
DESCRIBE
die ursprüngliche Tabelle verwenden, da die Spalte, deren Typ wir kennen möchten, eine berechnete Spalte ist und nicht direkt aus einer Tabelle gezogen wird. Ebenso können wir nichtDESCRIBE
direkt für die Abfrage verwenden, daDESCRIBE
nur für Tabellen verwendet werden kann. Das Erstellen einer temporären Tabelle löst beide Probleme.quelle
Es gibt keine vergleichbare Möglichkeit, eine Abfrage an MySQL zu übergeben und eine Ergebnismenge mit den Namen und Attributen der Spalten zurückzugeben, die Ihre Abfrage bei ihrer Ausführung zurückgibt.
Die Bibliothek, mit der Sie auf MySQL zugreifen, verfügt jedoch wahrscheinlich über einen solchen Mechanismus, den Ihr Code verwenden könnte ... da MySQL diese Informationen auf der Leitung bei jeder ausgeführten Abfrage an Clients zurückgibt.
Beispielsweise gibt die DBD :: mysql- Bibliothek in Perl Arrays mit Spaltennamen und Datentypen zurück.
Ein ausgeführtes Anweisungshandle gibt ein Array der Spaltennamen in @ {$ sth -> {NAME}} und ein Array der Spaltendatentypen in @ {$ sth -> {mysql_type_name}} zurück. Diese werden von Funktionen der MySQL C-API bereitgestellt, die (soweit ich weiß) derselbe zugrunde liegende Code ist, der von vielen verschiedenen Sprachen für ihre MySQL-Bibliotheken verwendet wird. Daher würde ich erwarten, dass ähnliche Strukturen in anderen verfügbar gemacht werden Umgebungen.
quelle
Ich glaube, dass diese Daten über die C-API verfügbar und in C API Prepared Statement Type Codes dokumentiert sind, aber dass der Server nicht in der Lage ist, sie dem Endbenutzer bereitzustellen.
Für eine Tabelle der SQL - Typen, und dem entsprechenden
buffer_type
Wert siehe nachstehende Tabelle.Die einzige Lösung ist zu
CREATE TEMPORARY TABLE AS SELECT (CTAS) ... DESCRIBE
quelle
Beim Lesen geht es darum, Details zu den Spalten in einer Ergebnismenge abzurufen, im Gegensatz zu den Spalten von Datenbanktabellen.
Wenn Sie PHP verwenden, gibt es integrierte Funktionen für den Zugriff auf Datenbanken mit MYSQLI und PDO, mit denen Sie detaillierte Informationen (Datentyp usw.) zu den Spalten in einem Abfrageergebnis erhalten können (im Gegensatz zu den Spalten der ursprünglichen Tabellen). .
Einzelheiten zu diesen Methoden finden Sie in der PHP-Dokumentation:
quelle