Mysql tablo sütunları veri türü nasıl alınır?


105

Bir mysql tablosunun sütun veri türünü almak istiyorum.

MYSQLFIELDYapıyı kullanabileceğimi düşündüm ama alan türleri numaralandı.

Sonra denedim mysql_real_query()

Aldığım hata query was empty

Sütun veri türünü nasıl elde ederim?

Yanıtlar:


118

Information_schema sütun tablosunu kullanabilirsiniz :

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

9
Unutmayın: VE INDEX_SCHEMA = 'database_name'
İnşallah

Bunu şahsen denedim ve bu cevabın OP'nin amaçladığı şeyi yaptığına katılıyorum. Bir yandan, "tablo_adı" nın kılavuzda bile küçük büyük harf olduğu konusunda biraz garip, UPPER olmamalı mı? (Fark yarattığından değil)
chutsu

8
Veri türünün belirli bir uzunluğa sahip olup olmadığına da dikkat edin, örn. VARCHAR (50) SELECT COLUMN_TYPEbu ekstra bilgiyi almak için kullanılabilir .
chutsu

11
INDEX_SCHEMA çalışmazsa, TABLE_SCHEMA = 'database_name'
senK

2
Eğer (çıkarmadan tüm sütunlar için türünü bilmek istediğinizde bu sorgu işe yaramaz AND COLUMN_NAME = 'col_name'sütun adını görüntülemek sürece): SELECT COLUMN_NAME, DATA_TYPE FROM etc..
Skippy le Grand Gourou

78

Aşağıdaki sorgu, MySQL alan türü dahil olmak üzere her alanla ilgili bilgilerin bir listesini döndürür. İşte bir örnek:

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

Bu kılavuz sayfasına bakın .


20
Alternatif olarak EXPLAIN tablename;
hobodave

Bu cevap, türü elde etmek için daha fazla işlem gerektirir ... user83591'in verdiği cevap çok daha iyi
chutsu

WHERE FIELD = '<your column name>'Tek bir sütun bilgisi istiyorsanız ekleyin .
Placid

37

Cevapların çoğu aynıdır, onları gruplamak faydalı olabilir. Temel olarak iki basit seçenek önerilmiştir.

İlk seçenek

İlk seçenek, bazıları oldukça kısa olan 4 farklı takma ada sahiptir:

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

(Not: alternatif olarak db_name.table_name, tek bir ikinci bir kullanabilir FROM : db_name FROM table_name).

Bu şöyle bir şey verir:

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

İkinci seçenek

İkinci seçenek biraz daha uzun:

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

Aynı zamanda daha az konuşkan:

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

AND COLUMN_NAME = 'column_name'(Veya like) kullanarak sütun başına seçime izin verme avantajına sahiptir .


20

Tüm sütunların veri türlerini almak için:

describe table_name

veya sadece tek bir sütun:

describe table_name column_name

Bunu yapabileceğini bilmiyordum. Az önce beni bilgi şemasını dolaşmaktan kurtardın.
Betty Mock

11

Lütfen aşağıdaki mysql sorgusunu kullanın.

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 Sorgu Sonucu


Ancak bu yalnızca maksimum uzunluğu verecektir. SELECT DATA_TYPEDiğer cevapların önerdiği gibi kullanmak daha iyi değil mi?
Fabio "Reinstate Monica" diyor

Evet haklısın. Sadece eklemeyi unuttum. Şimdi düzelttim. Teşekkürler
Prasant Kumar

5

Bu bağlantıya bakın

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

Umarım bu sana yardımcı olabilir


3

Önce kullanarak Veritabanını seçin ve use testDB;ardından çalıştırın

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

Çıktı:

DataTypes ile Tablo Sütunlarını Alın


2

Herhangi bir veritabanında kullanılan tüm veri türlerini öğrenmek için sorgulama yapın

SELECT distinct DATA_TYPE FROM INFORMATION_SCHEMA.columns 
WHERE table_schema = '<db_name>' AND column_name like '%';

3
AND column_name like '%'Gereksiz değil mi?
Skippy le Grand Gourou

1

Mytable'DAN SÜTUNLARI GÖSTER

Bağımsız tam örnekler genellikle faydalıdır.

<?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 bu soruyu phpetiketlemedi
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 bu soruyu javaetiketiyle etiketlemedi.
Rotimi

0

INFORMATION_SCHEMA.COLUMNS'DEN SEÇİN * TABLE_SCHEMA = 'SCHEMA_NAME' VE COLUMN_KEY = 'PRI'; WHERE COLUMN_KEY = 'PRI';

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.