¿Cómo obtener el tipo de datos de las columnas de la tabla mysql?

103

Quiero obtener el tipo de datos de columna de una tabla mysql.

Pensé que podría usar la MYSQLFIELDestructura, pero se enumeraron los tipos de campo.

Entonces lo intenté con mysql_real_query()

El error que recibo es query was empty

¿Cómo obtengo el tipo de datos de la columna?

krishnakumar
fuente

Respuestas:

116

Puede utilizar la tabla de columnas de esquema de información :

SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS 
  WHERE table_name = 'tbl_name' AND COLUMN_NAME = 'col_name';
brian-brasil
fuente
9
No olvide: AND INDEX_SCHEMA = 'database_name'
Inshallah
Personalmente probé esto y estaría de acuerdo en que esta respuesta hace lo que pretendía el OP. En una nota al margen un poco extraña sobre cómo "table_name" es en mayúsculas incluso en el manual, ¿no debería ser UPPER? (No es que haga una diferencia)
chutsu
8
También tenga en cuenta si el tipo de datos tiene una longitud establecida, por ejemplo. VARCHAR (50) se puede utilizar SELECT COLUMN_TYPEpara obtener esa información adicional.
chutsu
11
si INDEX_SCHEMA no funciona, intente TABLE_SCHEMA = 'database_name'
senK
2
Esta consulta es inútil cuando se quiere saber el tipo para todas las columnas (quitar AND COLUMN_NAME = 'col_name') a menos que se muestra el nombre de la columna: SELECT COLUMN_NAME, DATA_TYPE FROM etc..
Skippy le Grand Gourou
78

La consulta siguiente devuelve una lista de información sobre cada campo, incluido el tipo de campo MySQL. Aquí hay un ejemplo:

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

Vea esta página de manual .

James Skidmore
fuente
20
Una alternativa es EXPLAIN tablename;
hobodave
Esta respuesta requiere un mayor manejo para obtener el tipo ... La respuesta que dio user83591 es mucho mejor
chutsu
Agregue WHERE FIELD = '<your column name>'si desea información de una sola columna.
Placid
37

La mayoría de las respuestas son duplicadas, podría ser útil agruparlas. Básicamente se han propuesto dos opciones sencillas.

Primera opción

La primera opción tiene 4 alias diferentes, algunos de los cuales son bastante cortos:

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, se puede utilizar un segundo FROM :) db_name FROM table_name.

Esto da 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 opción

La segunda opción es un poco más larga:

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

También es menos hablador:

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

Sin embargo, tiene la ventaja de permitir la selección por columna, usando AND COLUMN_NAME = 'column_name'(o like).

Skippy le Grand Gourou
fuente
20

Para obtener los tipos de datos de todas las columnas:

describe table_name

o solo una sola columna:

describe table_name column_name
Jondinham
fuente
No sabía que podías hacer esto. Me acaba de salvar un montón de vagar por el esquema de información.
Betty Mock
11

Utilice la siguiente consulta de mysql.

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 de la consulta de MySql

Prasant Kumar
fuente
Pero esto le dará solo la longitud máxima. ¿No es mejor usarlo SELECT DATA_TYPE, como proponen otras respuestas?
Fabio dice Reincorporar a Monica
Sí, tiene usted razón. Solo me olvidé de agregarlo. Ahora lo he corregido. Gracias
Prasant Kumar
5

Refiera este enlace

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

Espero que esto pueda ayudarte

sonu thomas
fuente
3

Primero seleccione la base de datos usando y use testDB;luego ejecute

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

Salida:

Obtener columnas de tabla con tipos de datos

UdayKiran Pulipati
fuente
2

Consulta para averiguar todo el tipo de datos de las columnas que se utilizan en cualquier base de datos

SELECT distinct DATA_TYPE FROM INFORMATION_SCHEMA.columns 
WHERE table_schema = '<db_name>' AND column_name like '%';
usuario3419013
fuente
3
¿No es AND column_name like '%'superfluo?
Skippy le Grand Gourou
1

MOSTRAR COLUMNAS DE mytable

Los ejemplos completos independientes a menudo son útiles.

<?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
fuente
1
El OP no etiquetó esta pregunta con la phpetiqueta
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
fuente
El OP no etiquetó esta pregunta con la javaetiqueta.
Rotimi
0

SELECCIONE * FROM INFORMATION_SCHEMA.COLUMNS DONDE TABLE_SCHEMA = 'SCHEMA_NAME' Y COLUMN_KEY = 'PRI'; DONDE COLUMN_KEY = 'PRI';

Tarkeshwar Prasad
fuente