Wie erhalte ich den Datentyp der MySQL-Tabellenspalten?


102

Ich möchte den Spaltendatentyp einer MySQL-Tabelle erhalten.

Ich dachte, ich könnte MYSQLFIELDStruktur verwenden, aber es wurden Feldtypen aufgezählt.

Dann habe ich es mit versucht mysql_real_query()

Der Fehler, den ich bekomme, ist query was empty

Wie erhalte ich den Spaltendatentyp?

Antworten:


115

Sie können die Spaltentabelle information_schema verwenden :

SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS 
  WHERE table_name = 'tbl_name' AND COLUMN_NAME = 'col_name';

9
Vergessen Sie nicht: AND INDEX_SCHEMA = 'Datenbankname'
— Inshallah

Ich persönlich habe dies versucht und würde zustimmen, dass diese Antwort das tut, was das OP beabsichtigt hat. Nebenbei bemerkt, ein bisschen komisch, wie "table_name" auch im Handbuch Small Caps sind, sollte es nicht UPPER sein? (Nicht, dass es einen Unterschied macht)
— Chutsu

8
Beachten Sie auch, ob der Datentyp eine festgelegte Länge hat, z. VARCHAR (50) kann man verwenden SELECT COLUMN_TYPE, um diese zusätzlichen Informationen zu erhalten.
— Chutsu

11
Wenn INDEX_SCHEMA nicht funktioniert, versuchen Sie es mit TABLE_SCHEMA = 'Datenbankname'
— senK

2
Diese Abfrage ist nutzlos, wenn Sie den Typ für alle Spalten wissen möchten (Entfernen AND COLUMN_NAME = 'col_name'), es sei denn, Sie zeigen den Spaltennamen an : SELECT COLUMN_NAME, DATA_TYPE FROM etc..
— Skippy le Grand Gourou

78

Die folgende Abfrage gibt eine Liste mit Informationen zu jedem Feld zurück, einschließlich des MySQL-Feldtyps. Hier ist ein Beispiel:

SHOW FIELDS FROM tablename
/* returns "Field", "Type", "Null", "Key", "Default", "Extras" */

Siehe diese Handbuchseite .


20
Eine Alternative ist EXPLAIN tablename;
— Hobodave

Diese Antwort erfordert weitere Behandlung, um den Typ zu erhalten ... Die Antwort, die user83591 gegeben hat, ist viel besser
— Chutsu

Fügen WHERE FIELD = '<your column name>'Sie hinzu, wenn Sie eine einzelne Spalteninformation wünschen.
— Placid

37

Die meisten Antworten sind Duplikate. Es kann nützlich sein, sie zu gruppieren. Grundsätzlich wurden zwei einfache Optionen vorgeschlagen.

Erste Wahl

Die erste Option hat 4 verschiedene Aliase, von denen einige ziemlich kurz sind:

EXPLAIN db_name.table_name;
DESCRIBE db_name.table_name;
SHOW FIELDS FROM db_name.table_name;
SHOW COLUMNS FROM db_name.table_name;

(NB: Alternativ db_name.table_namekann man eine Sekunde verwenden FROM :) db_name FROM table_name.

Dies gibt so etwas wie:

+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| product_id       | int(11)      | NO   | PRI | NULL    |       |
| name             | varchar(255) | NO   | MUL | NULL    |       |
| description      | text         | NO   |     | NULL    |       |
| meta_title       | varchar(255) | NO   |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+

Zweite Option

Die zweite Option ist etwas länger:

SELECT
  COLUMN_NAME, DATA_TYPE 
FROM
  INFORMATION_SCHEMA.COLUMNS 
WHERE
  TABLE_SCHEMA = 'db_name'
AND
  TABLE_NAME = 'table_name';

Es ist auch weniger gesprächig:

+------------------+-----------+
| column_name      | DATA_TYPE |
+------------------+-----------+
| product_id       | int       |
| name             | varchar   |
| description      | text      |
| meta_title       | varchar   |
+------------------+-----------+

Es hat jedoch den Vorteil, dass die Auswahl pro Spalte mit AND COLUMN_NAME = 'column_name'(oder like) möglich ist.


20

So erhalten Sie Datentypen aller Spalten:

describe table_name

oder nur eine einzelne Spalte:

describe table_name column_name

Ich wusste nicht, dass du das kannst. Sie haben mir gerade ein paar Schritte durch das Informationsschema erspart.
— Betty Mock

10

Bitte benutzen Sie die folgende MySQL-Abfrage.

SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH 
FROM information_schema.columns 
WHERE table_schema = '<DATABASE NAME>' 
AND table_name = '<TABLE NAME>' 
AND COLUMN_NAME = '<COLOMN NAME>' 

MySQL-Abfrageergebnis


Dies ergibt jedoch nur die maximale Länge. Ist es nicht besser zu verwenden SELECT DATA_TYPE, wie in anderen Antworten vorgeschlagen?
— Fabio sagt Reinstate Monica

Ja, du hast recht. Ich habe nur vergessen, es hinzuzufügen. Ich bin jetzt korrigiert. Vielen Dank
— Prasant Kumar

5

Verweisen Sie auf diesen Link

mysql> SHOW COLUMNS FROM mytable FROM mydb;
mysql> SHOW COLUMNS FROM mydb.mytable;

Hoffe das kann dir helfen


3

Wählen Sie zuerst die Datenbank mit aus use testDB;und führen Sie sie dann aus

desc `testDB`.`images`;
-- or
SHOW FIELDS FROM images;

Ausgabe:

Abrufen von Tabellenspalten mit DataTypes


2

Abfrage, um alle Datentypen der Spalten herauszufinden, die in einer Datenbank verwendet werden

SELECT distinct DATA_TYPE FROM INFORMATION_SCHEMA.columns 
WHERE table_schema = '<db_name>' AND column_name like '%';

3
Ist das nicht AND column_name like '%'überflüssig?
— Skippy le Grand Gourou

1

SHOW COLUMNS FROM mytable

In sich geschlossene vollständige Beispiele sind oft nützlich.

<?php
  // The server where your database is hosted                 localhost
  // The name of your database                                mydatabase
  // The user name of the database user                       databaseuser
  // The password of the database user                        thesecretpassword
  // Most web pages are in utf-8 so should be the database    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
  try
  {
    $pdo = new PDO("mysql:host=localhost;dbname=mydatabase", "databaseuser", "thesecretpassword", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));  
  }
    catch(PDOException $e)
  {
    die('Could not connect: ' . $e->getMessage());
  }

  $sql   = "SHOW COLUMNS FROM mytable";
  $query = $pdo->prepare($sql);
  $query->execute();

  $err = $query->errorInfo();
  $bug = $err[2];

  if ($bug != "") { echo "<p>$bug</p>"; }

  while ($row = $query->fetch(PDO::FETCH_ASSOC))
  {
    echo "<pre>" . print_r($row, true) . "</pre>";
  }

  /* OUTPUT SAMPLE  
  Array
  (
      [Field] => page_id
      [Type] => char(40)
      [Null] => NO
      [Key] => 
      [Default] => 
      [Extra] => 
  )

  Array
  (  
      [Field] => last_name
      [Type] => char(50)
      More ...
  */
?>

1
Das OP hat diese Frage nicht mit dem phpTag
— Rotimi

1
ResultSet rs = Sstatement.executeQuery("SELECT * FROM Table Name");

ResultSetMetaData rsMetaData = rs.getMetaData();

int numberOfColumns = rsMetaData.getColumnCount();
System.out.println("resultSet MetaData column Count=" + numberOfColumns);

for (int i = 1; i <= numberOfColumns; i++) {
 System.out.println("column number " + i);

  System.out.println(rsMetaData.getColumnTypeName(i));
}

Das OP hat diese Frage nicht mit dem javaTag versehen.
— Rotimi

0

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'SCHEMA_NAME' AND COLUMN_KEY = 'PRI'; WHERE COLUMN_KEY = 'PRI';

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.