Làm cách nào để lấy kiểu dữ liệu cột trong bảng mysql?


102

Tôi muốn lấy kiểu dữ liệu cột của bảng mysql.

Tôi nghĩ rằng tôi có thể sử dụng MYSQLFIELDcấu trúc nhưng đó là các loại trường được liệt kê.

Sau đó, tôi đã thử với mysql_real_query()

Lỗi mà tôi đang gặp phải là query was empty

Làm cách nào để lấy kiểu dữ liệu cột?

Câu trả lời:


115

Bạn có thể sử dụng bảng cột information_schema :

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

9
Đừng quên: AND INDEX_SCHEMA = 'database_name'
Inshallah

Cá nhân tôi đã thử điều này và sẽ đồng ý rằng câu trả lời này thực hiện những gì OP dự định. Có một lưu ý là hơi kỳ lạ về cách "table_name" được viết hoa nhỏ ngay cả trong sách hướng dẫn, nó không phải là LÊN? (Không phải là nó làm cho một sự khác biệt)
chutsu

8
Cũng cần lưu ý nếu kiểu dữ liệu có độ dài được đặt, ví dụ: VARCHAR (50) người ta có thể sử dụng SELECT COLUMN_TYPEđể lấy thêm thông tin đó.
chutsu

11
nếu INDEX_SCHEMA không hoạt động thì hãy thử TABLE_SCHEMA = 'database_name'
senK

2
Truy vấn này là vô ích khi bạn muốn biết loại cho tất cả các cột (loại bỏ AND COLUMN_NAME = 'col_name'), trừ khi bạn hiển thị tên cột: SELECT COLUMN_NAME, DATA_TYPE FROM etc..
Skippy le Grand Gourou

78

Truy vấn bên dưới trả về danh sách thông tin về từng trường, bao gồm cả loại trường MySQL. Đây là một ví dụ:

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

Xem trang hướng dẫn này .


20
Một thay thế là EXPLAIN tên bảng;
hobodave 31-07-09

Câu trả lời này đòi hỏi phải xử lý hơn nữa để có được những loại ... Câu trả lời user83591 cho là tốt hơn nhiều
chutsu

Thêm WHERE FIELD = '<your column name>'nếu bạn muốn một thông tin cột duy nhất.
Kẻ sọc

37

Hầu hết các câu trả lời là trùng lặp, có thể hữu ích nếu nhóm chúng. Về cơ bản, hai phương án đơn giản đã được đề xuất.

Lựa chọn đầu tiên

Tùy chọn đầu tiên có 4 bí danh khác nhau, một số bí danh khá ngắn:

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: như một thay thế cho db_name.table_name, người ta có thể sử dụng một thứ hai FROM : db_name FROM table_name).

Điều này mang lại một cái gì đó như:

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

Sự lựa chọn thứ hai

Tùy chọn thứ hai dài hơn một chút:

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

Nó cũng ít nói hơn:

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

Tuy nhiên, nó có lợi thế là cho phép lựa chọn trên mỗi cột bằng cách sử dụng AND COLUMN_NAME = 'column_name'(hoặc like).


20

Để nhận các kiểu dữ liệu của tất cả các cột:

describe table_name

hoặc chỉ một cột duy nhất:

describe table_name column_name

Không biết bạn có thể làm điều này. Bạn vừa giúp tôi lưu lại một đống thông qua lược đồ thông tin.
Betty Mock

10

Vui lòng sử dụng truy vấn mysql dưới đây.

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

Kết quả truy vấn MySql


Nhưng điều này sẽ chỉ cung cấp độ dài tối đa. Nó không phải là tốt hơn để sử dụng SELECT DATA_TYPE, như được đề xuất bởi các câu trả lời khác?
Fabio nói Hãy phục hồi Monica vào

Vâng, bạn đúng. Tôi chỉ quên thêm nó. Bây giờ tôi đã sửa chữa nó. Cảm ơn
Prasant Kumar

5

Tham khảo liên kết này

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

Hy vọng điều này có thể giúp bạn


3

Đầu tiên chọn Cơ sở dữ liệu bằng cách sử dụng use testDB;sau đó thực thi

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

Đầu ra:

Nhận các cột bảng với DataTypes


2

Truy vấn để tìm ra tất cả kiểu dữ liệu của các cột đang được sử dụng trong bất kỳ cơ sở dữ liệu nào

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

3
Không AND column_name like '%'thừa sao?
Skippy le Grand Gourou

1

HIỂN THỊ CÁC CỘT TỪ bảng của tôi

Các ví dụ hoàn chỉnh riêng thường hữu ích.

<?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 đã không gắn thẻ câu hỏi này bằng phpthẻ
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 đã không gắn thẻ câu hỏi này với javathẻ.
Rotimi

0

CHỌN * TỪ INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'SCHEMA_NAME' AND COLUMN_KEY = 'PRI'; WHERE COLUMN_KEY = 'PRI';

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.