Comment obtenir le type de données des colonnes de la table mysql?

104

Je veux obtenir le type de données de colonne d'une table mysql.

Je pensais pouvoir utiliser la MYSQLFIELDstructure, mais il s'agissait de types de champs énumérés.

Puis j'ai essayé avec mysql_real_query()

L'erreur que j'obtiens est query was empty

Comment obtenir le type de données de la colonne?

Krishnakumar
la source

Réponses:

116

Vous pouvez utiliser la table des colonnes information_schema :

SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS 
  WHERE table_name = 'tbl_name' AND COLUMN_NAME = 'col_name';
brian-brésil
la source
9
N'oubliez pas: AND INDEX_SCHEMA = 'database_name'
Inshallah
J'ai personnellement essayé cela et je suis d'accord que cette réponse fait ce que le PO avait l'intention de faire. Sur une note un peu bizarre sur la façon dont "table_name" est en petites majuscules même dans le manuel, ne devrait-il pas être UPPER? (Pas que ça fasse une différence)
chutsu
8
Notez également si le type de données a une longueur définie, par exemple. On peut utiliser VARCHAR (50) SELECT COLUMN_TYPEpour obtenir ces informations supplémentaires.
chutsu
11
si INDEX_SCHEMA ne fonctionne pas, essayez TABLE_SCHEMA = 'database_name'
senK
2
Cette requête est inutile lorsque vous voulez connaître le type pour toutes les colonnes (suppression AND COLUMN_NAME = 'col_name') à moins d'afficher le nom de la colonne: SELECT COLUMN_NAME, DATA_TYPE FROM etc..
Skippy le Grand Gourou
78

La requête ci-dessous renvoie une liste d'informations sur chaque champ, y compris le type de champ MySQL. Voici un exemple:

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

Consultez cette page de manuel .

James Skidmore
la source
20
Une alternative est EXPLAIN nomtable;
hobodave le
Cette réponse nécessite une manipulation plus approfondie pour obtenir le type ... La réponse de l'utilisateur83591 est bien meilleure
chutsu
Ajoutez WHERE FIELD = '<your column name>'si vous voulez une seule information de colonne.
Placid le
37

La plupart des réponses sont des doublons, il peut être utile de les regrouper. Fondamentalement, deux options simples ont été proposées.

Première option

La première option a 4 alias différents, dont certains sont assez courts:

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: comme alternative à db_name.table_name, on peut utiliser un second FROM :db_name FROM table_name .

Cela donne quelque chose comme:

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

Deuxième option

La deuxième option est un peu plus longue:

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

C'est aussi moins bavard:

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

Il a cependant l'avantage de permettre la sélection par colonne, en utilisant AND COLUMN_NAME = 'column_name'(ou like).

Skippy le Grand Gourou
la source
20

Pour obtenir les types de données de toutes les colonnes:

describe table_name

ou juste une seule colonne:

describe table_name column_name
Jondinham
la source
Je ne savais pas que tu pouvais faire ça. Vous venez de m'éviter un tas de trampings dans le schéma d'information.
Betty Mock
11

Veuillez utiliser la requête mysql ci-dessous.

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

Résultat de la requête MySql

Prasant Kumar
la source
Mais cela ne donnera que la longueur maximale. N'est-il pas préférable d'utiliser SELECT DATA_TYPE, comme proposé par d'autres réponses?
Fabio dit réintégrer Monica le
Oui, tu as raison. J'ai juste oublié de l'ajouter. Je suis maintenant corrigé. Thanks
Prasant Kumar
5

Référez ce lien

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

J'espère que cela peut vous aider

sonu thomas
la source
3

Sélectionnez d'abord la base de données en utilisant use testDB;puis exécutez

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

Production:

Obtenir des colonnes de table avec des types de données

UdayKiran Pulipati
la source
2

Requête pour connaître tous les types de données des colonnes utilisées dans n'importe quelle base de données

SELECT distinct DATA_TYPE FROM INFORMATION_SCHEMA.columns 
WHERE table_schema = '<db_name>' AND column_name like '%';
user3419013
la source
3
N'est pas AND column_name like '%' superflu?
Skippy le Grand Gourou
1

AFFICHER LES COLONNES DE mytable

Des exemples complets autonomes sont souvent utiles.

<?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
la source
1
L'OP n'a pas tagué cette question avec le 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
la source
L'OP n'a pas marqué cette question avec l' javaétiquette.
Rotimi
0

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

Tarkeshwar Prasad
la source