Как получить тип данных столбцов таблицы mysql?

106

Я хочу получить тип данных столбца таблицы mysql.

Думал, что могу использовать MYSQLFIELDструктуру, но это были перечисленные типы полей.

Затем я попробовал с mysql_real_query()

Ошибка, которую я получаю, query was empty

Как мне получить тип данных столбца?

кришнакумар
источник

Ответы:

120

Вы можете использовать таблицу столбцов information_schema :

SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS 
  WHERE table_name = 'tbl_name' AND COLUMN_NAME = 'col_name';
Брайан-Бразилия
источник
9
Не забывайте: AND INDEX_SCHEMA = 'database_name'
Иншаллах,
Я лично пробовал это и согласен, что этот ответ действительно делает то, для чего предназначен OP. С другой стороны, немного странно, что "table_name" - это маленькие заглавные буквы даже в руководстве, не должно ли оно быть UPPER? (Не то чтобы это имеет значение)
chutsu
8
Также обратите внимание, имеет ли тип данных заданную длину, например. VARCHAR (50) можно использовать SELECT COLUMN_TYPEдля получения этой дополнительной информации.
chutsu
11
если INDEX_SCHEMA не работает, попробуйте TABLE_SCHEMA = 'database_name'
senK
2
Этот запрос не имеет смысла , если вы хотите знать тип для всех столбцов (удаление AND COLUMN_NAME = 'col_name') , если не отображать имя столбца: SELECT COLUMN_NAME, DATA_TYPE FROM etc..
Скиппи ле Гран Гуру
78

Запрос ниже возвращает список информации о каждом поле, включая тип поля MySQL. Вот пример:

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

См. Эту страницу руководства .

Джеймс Скидмор
источник
20
Альтернативой является EXPLAIN tablename;
hobodave
1
Этот ответ требует дальнейшей обработки, чтобы получить тип ... Ответ user83591 намного лучше
chutsu
Добавьте, WHERE FIELD = '<your column name>'если вам нужна информация в одном столбце.
Placid
38

Большинство ответов дублируются, может быть полезно сгруппировать их. В основном было предложено два простых варианта.

Первый вариант

Первый вариант имеет 4 разных псевдонима, некоторые из которых довольно короткие:

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: в качестве альтернативы db_name.table_nameможно использовать второй FROM :) db_name FROM table_name.

Это дает что-то вроде:

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

Второй вариант

Второй вариант немного длиннее:

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

Также он менее разговорчив:

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

Тем не менее, он имеет то преимущество, что позволяет выбирать для каждого столбца с помощью AND COLUMN_NAME = 'column_name'(или like).

Скиппи-ле-Гран-Гуру
источник
20

Чтобы получить типы данных всех столбцов:

describe table_name

или только один столбец:

describe table_name column_name
Jondinham
источник
Не знал, что ты сможешь это сделать. Вы только что избавили меня от необходимости копаться в информационной схеме.
Бетти Мок
11

Пожалуйста, используйте приведенный ниже запрос 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>' 

Результат запроса MySql

Прасант Кумар
источник
Но это даст только максимальную длину. Не лучше ли использовать SELECT DATA_TYPE, как предлагают другие ответы?
Фабио говорит: "Восстановите Монику"
Да ты прав. Просто забыл добавить. Я это сейчас поправил. Спасибо
Prasant Kumar
5

Обратитесь по этой ссылке

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

Надеюсь, это поможет тебе

Сону Томас
источник
3

Сначала выберите базу данных с помощью, use testDB;затем выполните

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

Вывод:

Получить столбцы таблицы с типами данных

УдайКиран Пулипати
источник
2

Запрос, чтобы узнать все типы данных столбцов, используемых в любой базе данных

SELECT distinct DATA_TYPE FROM INFORMATION_SCHEMA.columns 
WHERE table_schema = '<db_name>' AND column_name like '%';
user3419013
источник
3
Не AND column_name like '%'лишнее?
Скиппи ле Гран Гуру
1

ПОКАЗАТЬ КОЛОННЫ ИЗ mytable

Часто полезны автономные полные примеры.

<?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
источник
1
OP не помечать этот вопрос с phpтегом
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
источник
ОП не пометил этот вопрос javaтегом.
Rotimi
0

ВЫБРАТЬ * ИЗ INFORMATION_SCHEMA.COLUMNS, ГДЕ TABLE_SCHEMA = 'SCHEMA_NAME' И COLUMN_KEY = 'PRI'; ГДЕ COLUMN_KEY = 'PRI';

Таркешвар Прасад
источник