Bagaimana cara mendapatkan tipe data kolom tabel mysql?

103

Saya ingin mendapatkan tipe data kolom dari tabel mysql.

Pikir saya bisa menggunakan MYSQLFIELDstruktur tetapi itu adalah jenis bidang yang disebutkan.

Lalu saya coba dengan mysql_real_query()

Kesalahan yang saya dapatkan adalah query was empty

Bagaimana cara mendapatkan tipe data kolom?

krishnakumar
sumber

Jawaban:

116

Anda dapat menggunakan tabel kolom information_schema :

SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS 
  WHERE table_name = 'tbl_name' AND COLUMN_NAME = 'col_name';
brian-brazil
sumber
9
Jangan lupa: AND INDEX_SCHEMA = 'database_name'
Insya Allah
Saya pribadi mencoba ini dan akan setuju jawaban ini melakukan apa yang dimaksudkan OP. Di samping catatan agak aneh tentang bagaimana "nama_tabel" adalah huruf kecil bahkan di manual, bukankah seharusnya UPPER? (Bukan berarti itu membuat perbedaan)
chutsu
8
Perhatikan juga jika tipe data memiliki panjang yang ditetapkan, mis. VARCHAR (50) dapat digunakan SELECT COLUMN_TYPEuntuk mendapatkan informasi tambahan itu.
chutsu
11
jika INDEX_SCHEMA tidak berfungsi maka coba TABLE_SCHEMA = 'database_name'
senK
2
Query ini tidak berguna bila Anda ingin mengetahui jenis untuk semua kolom (menghapus AND COLUMN_NAME = 'col_name') kecuali jika Anda menampilkan nama kolom: SELECT COLUMN_NAME, DATA_TYPE FROM etc..
Skippy le Grand Gourou
78

Kueri di bawah ini mengembalikan daftar informasi tentang setiap bidang, termasuk jenis bidang MySQL. Berikut ini contohnya:

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

Lihat halaman manual ini .

James Skidmore
sumber
20
Alternatifnya adalah JELASKAN tablename;
Hobodave
Jawaban ini membutuhkan penanganan lebih lanjut untuk mendapatkan jenisnya ... Jawaban yang diberikan oleh pengguna83591 jauh lebih baik
chutsu
Tambahkan WHERE FIELD = '<your column name>'jika Anda menginginkan info satu kolom.
Placid
37

Sebagian besar jawaban merupakan duplikat, mungkin berguna untuk mengelompokkannya. Pada dasarnya dua opsi sederhana telah diusulkan.

Pilihan pertama

Opsi pertama memiliki 4 alias berbeda, beberapa di antaranya cukup pendek:

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: sebagai alternatif db_name.table_name, seseorang dapat menggunakan yang kedua FROM :db_name FROM table_name ).

Ini memberikan sesuatu seperti:

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

Opsi kedua

Opsi kedua sedikit lebih lama:

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

Ini juga kurang banyak bicara:

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

Ini memiliki keuntungan karena memungkinkan pemilihan per kolom, menggunakan AND COLUMN_NAME = 'column_name'(atau like).

Skippy le Grand Gourou
sumber
20

Untuk mendapatkan tipe data dari semua kolom:

describe table_name

atau hanya satu kolom:

describe table_name column_name
jondinham.dll
sumber
Tidak tahu kamu bisa melakukan ini. Anda baru saja menyelamatkan saya dari banyak langkah melalui skema informasi.
Betty Mock
11

Silakan gunakan kueri mysql di bawah ini.

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

Hasil Kueri MySql

Prasant Kumar
sumber
Tetapi ini hanya akan memberikan panjang maksimum. Bukankah lebih baik digunakan SELECT DATA_TYPE, seperti yang diusulkan oleh jawaban lain?
Fabio mengatakan Reinstate Monica
Ya kamu benar. Saya hanya lupa menambahkannya. Saya sekarang memperbaikinya. Terima kasih
Prasant Kumar
5

Lihat tautan ini

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

Semoga ini bisa membantu Anda

sonu thomas
sumber
3

Pertama pilih Database menggunakan use testDB;lalu jalankan

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

Keluaran:

Dapatkan Kolom Tabel dengan Tipe Data

UdayKiran Pulipati
sumber
2

Query untuk mengetahui semua tipe data kolom yang digunakan dalam database manapun

SELECT distinct DATA_TYPE FROM INFORMATION_SCHEMA.columns 
WHERE table_schema = '<db_name>' AND column_name like '%';
pengguna3419013
sumber
3
Bukankah AND column_name like '%'berlebihan?
Skippy le Grand Gourou
1

TUNJUKKAN KOLOM DARI mytable

Contoh lengkap mandiri seringkali berguna.

<?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
sumber
1
OP tidak menandai pertanyaan ini dengan 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
sumber
OP tidak menandai pertanyaan ini dengan javatag.
Rotimi
0

PILIH * DARI INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'SCHEMA_NAME' AND COLUMN_KEY = 'PRI'; DI MANA COLUMN_KEY = 'PRI';

Tarkeshwar Prasad
sumber