Mysql टेबल कॉलम डेटा प्रकार कैसे प्राप्त करें?


103

मैं एक mysql तालिका के कॉलम डेटा प्रकार प्राप्त करना चाहता हूं।

मैंने सोचा कि मैं MYSQLFIELDसंरचना का उपयोग कर सकता हूं लेकिन यह क्षेत्र प्रकारों की गणना की गई थी।

फिर मैंने कोशिश की mysql_real_query()

जो त्रुटि मुझे मिल रही है query was empty

मैं कॉलम डेटा प्रकार कैसे प्राप्त करूं?

जवाबों:


116

आप info_schema कॉलम तालिका का उपयोग कर सकते हैं :

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

9
यह न भूलें: और INDEX_SCHEMA = 'Database_Name'
इंशाअल्लाह

मैंने व्यक्तिगत रूप से यह कोशिश की और इस बात से सहमत होगा कि ओपी का इरादा क्या है। एक तरफ ध्यान दें कि मैनुअल में भी "table_name" कैसे छोटे कैप हैं, यह थोड़ा अजीब है, क्या यह UPPER नहीं होना चाहिए? (ऐसा नहीं है कि इससे कोई फर्क पड़ता है)
चाटु

8
यह भी ध्यान दें कि डेटा प्रकार की एक निर्धारित लंबाई है, उदाहरण के लिए। VARCHAR (50) SELECT COLUMN_TYPEउस अतिरिक्त जानकारी को प्राप्त करने के लिए उपयोग कर सकता है।
चाटु

11
यदि INDEX_SCHEMA काम नहीं करता है तो TABLE_SCHEMA = 'database_name'
आज़माएं

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
एक वैकल्पिक उदाहरण टैबलेन है;
होबोडेव

इस उत्तर को टाइप करने के लिए आगे की हैंडलिंग की आवश्यकता होती है ... उत्तर user83591 ने जो दिया वह बहुत बेहतर है
chutsu

WHERE FIELD = '<your column name>'यदि आप एक एकल स्तंभ जानकारी चाहते हैं तो जोड़ें ।
प्लेसीड

37

अधिकांश उत्तर डुप्लिकेट हैं, यह उनके समूह के लिए उपयोगी हो सकता है। मूल रूप से दो सरल विकल्प प्रस्तावित किए गए हैं।

पहला विकल्प

पहले विकल्प में 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;

(ध्यान दें: एक विकल्प के रूप में 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

नहीं पता था कि आप ऐसा कर सकते हैं। आपने मुझे सूचना स्कीमा के माध्यम से ट्रम्पिंग का एक गुच्छा बचाया।
बेटी मॉक

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, जैसा कि अन्य उत्तरों द्वारा प्रस्तावित है?
फैबियो का कहना है कि

हाँ आप सही है। मैं इसे जोड़ना भूल गया। मैं अब इसे ठीक कर रहा हूं। धन्यवाद
प्रशांत कुमार



2

किसी भी डेटाबेस में उपयोग किए जा रहे कॉलम के सभी डेटाटाइप का पता लगाने की क्वेरी

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

3
क्या शानदार नहीं है AND column_name like '%'?
स्किप्पी ले ग्रैंड गौरू

1

मेरी पसंद से कम रंग

आत्म निहित पूर्ण उदाहरण अक्सर उपयोगी होते हैं।

<?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
ओ पी के साथ इस सवाल टैग नहीं किया है 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));
}

ओपी ने इस सवाल को टैग नहीं किया java
रोटिमी

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.