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?

krishnakumar
quelle

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';
Brian-Brasilien
quelle
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 .

James Skidmore
quelle
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.

Skippy le Grand Gourou
quelle
20

So erhalten Sie Datentypen aller Spalten:

describe table_name

oder nur eine einzelne Spalte:

describe table_name column_name
Jondinham
quelle
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

Prasant Kumar
quelle
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

sonu thomas
quelle
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

UdayKiran Pulipati
quelle
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 '%';
user3419013
quelle
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 ...
  */
?>
nbauers
quelle
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));
}
SRK
quelle
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';

Tarkeshwar Prasad
quelle