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?

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

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 .


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).


20

Untuk mendapatkan tipe data dari semua kolom:

describe table_name

atau hanya satu kolom:

describe table_name column_name

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


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


3

Pertama pilih Database menggunakan use testDB;lalu jalankan

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

Keluaran:

Dapatkan Kolom Tabel dengan Tipe Data


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

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

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.