Como obter o tipo de dados das colunas da tabela mysql?

103

Eu quero obter o tipo de dados da coluna de uma tabela mysql.

Pensei que poderia usar MYSQLFIELD estrutura, mas eram tipos de campo enumerados.

Então eu tentei com mysql_real_query()

O erro que estou recebendo é query was empty

Como obtenho o tipo de dados da coluna?

Krishnakumar
fonte

Respostas:

116

Você pode usar a tabela de colunas information_schema :

SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS 
  WHERE table_name = 'tbl_name' AND COLUMN_NAME = 'col_name';
brian-brasil
fonte
9
Não se esqueça: AND INDEX_SCHEMA = 'database_name'
Inshallah
Eu pessoalmente tentei fazer isso e concordaria que essa resposta faz o que o OP pretendia. Em uma nota lateral um pouco estranho sobre como "table_name" é versalete mesmo no manual, não deveria estar em MAIÚSCULAS? (Não que isso faça diferença)
chutsu
8
Observe também se o tipo de dados tem um comprimento definido, por exemplo. VARCHAR (50) pode ser usado SELECT COLUMN_TYPEpara obter essas informações extras.
chutsu
11
se INDEX_SCHEMA não funcionar, tente TABLE_SCHEMA = 'database_name'
senK
2
Esta consulta é inútil quando você quer saber o tipo para todas as colunas (removendo AND COLUMN_NAME = 'col_name') a menos que você exibir o nome da coluna: SELECT COLUMN_NAME, DATA_TYPE FROM etc..
Skippy le Grand Gourou
78

A consulta abaixo retorna uma lista de informações sobre cada campo, incluindo o tipo de campo MySQL. Aqui está um exemplo:

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

Veja esta página de manual .

James Skidmore
fonte
20
Uma alternativa é EXPLAIN tablename;
hobodave
Esta resposta requer tratamento adicional para obter o tipo ... A resposta que o usuário83591 deu é muito melhor
chutsu
Adicione WHERE FIELD = '<your column name>'se quiser uma única coluna de informação.
Placid
37

A maioria das respostas são duplicadas, pode ser útil agrupá-las. Basicamente, duas opções simples foram propostas.

Primeira opção

A primeira opção tem 4 aliases diferentes, alguns dos quais são bastante curtos:

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: como alternativa a db_name.table_name, pode-se usar um segundo FROM :db_name FROM table_name ).

Isso dá algo como:

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

Segunda opçao

A segunda opção é um pouco mais longa:

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

Também é menos falador:

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

Tem a vantagem de permitir a seleção por coluna, no entanto, usando AND COLUMN_NAME = 'column_name'(ou like).

Skippy le Grand Gourou
fonte
20

Para obter os tipos de dados de todas as colunas:

describe table_name

ou apenas uma única coluna:

describe table_name column_name
Jondinham
fonte
Não sabia que você poderia fazer isso. Você acabou de me poupar um monte de perambular pelo esquema de informações.
Betty Mock
11

Use a consulta mysql abaixo.

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

Resultado da consulta MySql

Prasant Kumar
fonte
Mas isso fornecerá apenas o comprimento máximo. Não é melhor usar SELECT DATA_TYPE, como proposto por outras respostas?
Fabio diz Restabelecer Monica em
Sim você está certo. Eu apenas esqueci de adicionar. Agora estou corrigido. Obrigado
Prasant Kumar
5

Consulte este link

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

Espero que isso possa te ajudar

sonu thomas
fonte
3

Primeiro selecione o banco de dados usando use testDB;e execute

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

Resultado:

Obtenha colunas de tabela com DataTypes

UdayKiran Pulipati
fonte
2

Consulta para descobrir todos os tipos de dados das colunas sendo usados ​​em qualquer banco de dados

SELECT distinct DATA_TYPE FROM INFORMATION_SCHEMA.columns 
WHERE table_schema = '<db_name>' AND column_name like '%';
user3419013
fonte
3
Não é AND column_name like '%'supérfluo?
Skippy le Grand Gourou
1

MOSTRAR COLUNAS da minha mesa

Exemplos completos independentes são frequentemente úteis.

<?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
fonte
1
O OP não marcou esta questão com a 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
fonte
O OP não marcou esta questão com a javatag.
Rotimi
0

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

Tarkeshwar Prasad
fonte