Jak uzyskać typ danych kolumn tabeli mysql?

104

Chcę uzyskać typ danych kolumny tabeli mysql.

Pomyślałem, że mogę użyć MYSQLFIELDstruktury, ale były to wyliczone typy pól.

Potem spróbowałem z mysql_real_query()

Błąd, który otrzymuję to query was empty

Jak uzyskać typ danych kolumny?

krishnakumar
źródło

Odpowiedzi:

116

Możesz użyć tabeli kolumn information_schema :

SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS 
  WHERE table_name = 'tbl_name' AND COLUMN_NAME = 'col_name';
brian-brazil
źródło
9
Nie zapomnij: AND INDEX_SCHEMA = 'database_name'
Inshallah
Osobiście tego próbowałem i zgadzam się, że ta odpowiedź robi to, co zamierzał PO. Na marginesie trochę dziwne, jak „nazwa_tabeli” to kapitaliki nawet w instrukcji, czy nie powinno to być WIELKIE? (Nie żeby to miało znaczenie)
chutsu
8
Zwróć również uwagę, czy typ danych ma określoną długość, np. VARCHAR (50), którego można użyć, SELECT COLUMN_TYPEaby uzyskać dodatkowe informacje.
chutsu
11
jeśli INDEX_SCHEMA nie działa, spróbuj TABLE_SCHEMA = 'database_name'
senK
2
To zapytanie jest bezużyteczny, jeśli chcesz poznać typ dla wszystkich kolumn (usunięto AND COLUMN_NAME = 'col_name'), chyba że wyświetla nazwę kolumny: SELECT COLUMN_NAME, DATA_TYPE FROM etc..
Skippy le Grand Gourou,
78

Poniższe zapytanie zwraca listę informacji o każdym polu, w tym typ pola MySQL. Oto przykład:

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

Zobacz tę stronę podręcznika .

James Skidmore
źródło
20
Alternatywą jest EXPLAIN nazwa tabeli;
hobodave
Ta odpowiedź wymaga dalszej obsługi, aby uzyskać typ ... Odpowiedź udzielona przez użytkownika83591 jest znacznie lepsza
chutsu
Dodaj, WHERE FIELD = '<your column name>'jeśli chcesz uzyskać informacje o jednej kolumnie.
Placid
37

Większość odpowiedzi to duplikaty, przydatne może być ich pogrupowanie. Zasadniczo zaproponowano dwie proste opcje.

Pierwsza opcja

Pierwsza opcja ma 4 różne aliasy, z których niektóre są dość krótkie:

EXPLAIN db_name.table_name;
DESCRIBE db_name.table_name;
SHOW FIELDS FROM db_name.table_name;
SHOW COLUMNS FROM db_name.table_name;

(Uwaga: alternatywnie db_name.table_namemożna użyć drugiego FROM :db_name FROM table_name ).

To daje coś takiego:

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

Druga opcja

Druga opcja jest nieco dłuższa:

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

Jest też mniej rozmowny:

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

Ma jednak tę zaletę, że umożliwia wybór według kolumny za pomocą AND COLUMN_NAME = 'column_name'(lub like).

Skippy le Grand Gourou
źródło
20

Aby uzyskać typy danych we wszystkich kolumnach:

describe table_name

lub tylko pojedyncza kolumna:

describe table_name column_name
jondinham
źródło
Nie wiedziałem, że możesz to zrobić. Właśnie zaoszczędziłeś mi grzebania w schemacie informacyjnym.
Betty Mock
11

Użyj poniższego zapytania 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>' 

Wynik zapytania MySql

Prasant Kumar
źródło
Ale to da tylko maksymalną długość. Czy nie lepiej jest użyć SELECT DATA_TYPE, jak proponują inne odpowiedzi?
Fabio mówi „Przywróć Monikę”
Tak masz rację. Po prostu zapomniałem go dodać. Teraz to poprawiłem. Dzięki
Prasant Kumar
5

Skorzystaj z tego łącza

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

Mam nadzieję, że to może ci pomóc

sonu thomas
źródło
3

Najpierw wybierz bazę danych za pomocą, use testDB;a następnie wykonaj

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

Wynik:

Pobierz kolumny tabeli za pomocą DataTypes

UdayKiran Pulipati
źródło
2

Zapytanie, aby znaleźć wszystkie typy danych kolumn używanych w dowolnej bazie danych

SELECT distinct DATA_TYPE FROM INFORMATION_SCHEMA.columns 
WHERE table_schema = '<db_name>' AND column_name like '%';
user3419013
źródło
3
Czy nie jest AND column_name like '%'zbyteczne?
Skippy le Grand Gourou,
1

POKAŻ KOLUMNY Z Mytable

Samodzielne, kompletne przykłady są często przydatne.

<?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
źródło
1
OP nie oznaczył tego pytania phptagiem
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
źródło
OP nie oznaczył tego pytania javatagiem.
Rotimi
0

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

Tarkeshwar Prasad
źródło