mysqlテーブルの列のデータ型を取得するにはどうすればよいですか?


102

mysqlテーブルの列データ型を取得したい。

私はMYSQLFIELD構造を使用できると思ったが、それはフィールド型を列挙した。

それから私は試してみました mysql_real_query()

私が得ているエラーは query was empty

列のデータ型を取得するにはどうすればよいですか?

回答:


115

information_schema列テーブルを使用できます。

SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS 
  WHERE table_name = 'tbl_name' AND COLUMN_NAME = 'col_name';

9
忘れてはいけない:ANDはindex_schema = 'データベース名'
Inshallah

私はこれを個人的に試してみましたが、この回答がOPの意図したことを実行することに同意します。余談ですが、 "table_name"がマニュアルでどのようにスモールキャップであるかについて少し奇妙です。(違いが
出る

8
また、データ型に長さが設定されているかどうかにも注意してください。VARCHAR(50)を使用するSELECT COLUMN_TYPEと、その追加情報を取得できます。
中通2012年

11
INDEX_SCHEMAが機能しない場合は、TABLE_SCHEMA = 'database_name'を試してください
senK

2
AND COLUMN_NAME = 'col_name'列名を表示しない限り、すべての列のタイプ(削除)を知りたい場合、このクエリは役に立ちませんSELECT COLUMN_NAME, DATA_TYPE FROM etc.
Skippy le Grand Gourou

78

以下のクエリは、MySQLフィールドタイプを含む、各フィールドに関する情報のリストを返します。次に例を示します。

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

このマニュアルページを参照してください


20
別の方法はEXPLAINテーブル名です。
hobodave 2009

この回答では、タイプを取得するためにさらに処理が必要です... user83591の回答ははるかに優れています
chutsu

WHERE FIELD = '<your column name>'単一列の情報が必要な場合は追加します。
プラシッド

37

ほとんどの回答は重複しており、それらをグループ化すると役立つ場合があります。基本的に2つの単純なオプションが提案されています。

最初のオプション

最初のオプションには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    |       |
+------------------+--------------+------+-----+---------+-------+

2番目のオプション

2番目のオプションは少し長くなります。

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

これができるとは知りませんでした。あなたは私に情報スキーマを介して大量の踏みつけを保存しました。
ベティモック

10

以下の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他の回答で提案されているように、を使用した方がいいですか?
Fabioはモニカを2017

はい、そうです。追加するのを忘れました。私は今それを修正しています。ありがとう
Prasant Kumar 2017


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

3
AND column_name like '%'余分ではないですか?
Skippy le Grand Gourou

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 ...
  */
?>

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));
}

OPはこの質問にタグを付けませんでしたjava
Rotimi、

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.