Come ottenere il tipo di dati delle colonne della tabella mysql?


104

Voglio ottenere il tipo di dati della colonna di una tabella mysql.

Pensavo di poter usare la MYSQLFIELDstruttura, ma sono stati enumerati i tipi di campo.

Poi ho provato con mysql_real_query()

L'errore che ricevo è query was empty

Come ottengo il tipo di dati della colonna?

Risposte:


116

È possibile utilizzare la tabella delle colonne information_schema :

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

9
Non dimenticare: AND INDEX_SCHEMA = 'database_name'
Inshallah

Ho provato personalmente questo e sarei d'accordo che questa risposta fa ciò che l'OP intendeva. Una nota a margine un po 'strana su come "table_name" è in maiuscolo anche nel manuale, non dovrebbe essere MAIUSCOLO? (Non che faccia differenza)
chutsu

8
Notare inoltre se il tipo di dati ha una lunghezza impostata, ad es. VARCHAR (50) si può usare SELECT COLUMN_TYPEper ottenere quelle informazioni extra.
chutsu

11
se INDEX_SCHEMA non funziona, prova TABLE_SCHEMA = 'database_name'
senK

2
Questa query è inutile quando si vuole conoscere il tipo per tutte le colonne (rimuovendo AND COLUMN_NAME = 'col_name') a meno che non si visualizza il nome della colonna: SELECT COLUMN_NAME, DATA_TYPE FROM etc..
Skippy le Grand Gourou

78

La query seguente restituisce un elenco di informazioni su ogni campo, incluso il tipo di campo MySQL. Ecco un esempio:

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

Vedi questa pagina di manuale .


20
Un'alternativa è EXPLAIN tablename;
hobodave

Questa risposta richiede un'ulteriore gestione per ottenere il tipo ... La risposta fornita da user83591 è molto meglio
chutsu

Aggiungi WHERE FIELD = '<your column name>'se vuoi informazioni su una singola colonna.
Placido

37

La maggior parte delle risposte sono duplicati, potrebbe essere utile raggrupparle. Fondamentalmente sono state proposte due semplici opzioni.

Prima opzione

La prima opzione ha 4 diversi alias, alcuni dei quali sono piuttosto brevi:

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: in alternativa a db_name.table_name, si può usare un secondo FROM :) db_name FROM table_name.

Questo dà qualcosa come:

+------------------+--------------+------+-----+---------+-------+
| 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    |       |
+------------------+--------------+------+-----+---------+-------+

Seconda opzione

La seconda opzione è un po 'più lunga:

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

È anche meno loquace:

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

Ha il vantaggio di consentire la selezione per colonna, tuttavia, utilizzando AND COLUMN_NAME = 'column_name'(o like).


20

Per ottenere i tipi di dati di tutte le colonne:

describe table_name

o solo una singola colonna:

describe table_name column_name

Non sapevo che potessi farlo. Mi hai appena risparmiato un sacco di calcare lo schema delle informazioni.
Betty Mock

11

Si prega di utilizzare la query mysql di seguito.

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>' 

Risultato query MySql


Ma questo darà solo la lunghezza massima. Non è meglio usare SELECT DATA_TYPE, come proposto da altre risposte?
Fabio dice Reinstate Monica

Si hai ragione. Ho solo dimenticato di aggiungerlo. Ora l'ho corretto. Grazie
Prasant Kumar

5

Fare riferimento a questo collegamento

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

Spero che questo possa aiutarti


3

Selezionare prima il database utilizzando use testDB;quindi eseguire

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

Produzione:

Ottieni colonne di tabella con DataTypes


2

Query per scoprire tutti i tipi di dati delle colonne utilizzate in qualsiasi database

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

3
Non è AND column_name like '%'superfluo?
Skippy le Grand Gourou

1

MOSTRA LE COLONNE DA mytable

Esempi completi autonomi sono spesso utili.

<?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
L'OP non ha contrassegnato questa domanda con il 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));
}

L'OP non ha contrassegnato questa domanda con il javatag.
Rotimi

0

SELEZIONA * DA INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'SCHEMA_NAME' E COLUMN_KEY = 'PRI'; WHERE COLUMN_KEY = 'PRI';

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.