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.