Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

MySQL SELECT hiển thị kiểu dữ liệu trong cột riêng biệt?

Giải pháp: INFORMATION_SCHEMA.COLUMNS

View hệ thống INFORMATION_SCHEMA.COLUMNS chứa metadata về tất cả cột trong database.

Ví dụ minh họa

Tạo bảng và dữ liệu

mysql> CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(20)
);

mysql> INSERT INTO DemoTable(Name) VALUES('Chris');
mysql> INSERT INTO DemoTable(Name) VALUES('Robert');
mysql> INSERT INTO DemoTable(Name) VALUES('Sam');

Truy vấn kết hợp dữ liệu và kiểu dữ liệu

mysql> SELECT DemoTable.Name, col1.DATA_TYPE 
    -> FROM DemoTable, INFORMATION_SCHEMA.COLUMNS col1 
    -> WHERE col1.TABLE_NAME = 'DemoTable' 
    -> AND col1.COLUMN_NAME = 'Name';

Kết quả

+--------+-----------+
| Name   | DATA_TYPE |
+--------+-----------+
| Chris  | varchar   |
| Robert | varchar   |
| Sam    | varchar   |
+--------+-----------+

Giải thích truy vấn

  • INFORMATION_SCHEMA.COLUMNS: View chứa thông tin cột
  • TABLE_NAME = 'DemoTable': Lọc theo tên bảng
  • COLUMN_NAME = 'Name': Lọc theo tên cột
  • Cross join ngầm giữa bảng dữ liệu và metadata (mỗi dòng dữ liệu ghép với cùng một metadata)

Cách tốt hơn: JOIN tường minh

SELECT d.Name, c.DATA_TYPE, c.CHARACTER_MAXIMUM_LENGTH, c.IS_NULLABLE
FROM DemoTable d
JOIN INFORMATION_SCHEMA.COLUMNS c 
    ON c.TABLE_SCHEMA = DATABASE() 
    AND c.TABLE_NAME = 'DemoTable' 
    AND c.COLUMN_NAME = 'Name';

Các cột hữu ích trong COLUMNS

CộtÝ nghĩa
DATA_TYPEKiểu dữ liệu (int, varchar, datetime...)
CHARACTER_MAXIMUM_LENGTHĐộ dài tối đa (cho string)
NUMERIC_PRECISION / SCALEĐộ chính xác (cho số)
IS_NULLABLEYES/NO cho phép NULL
COLUMN_DEFAULTGiá trị mặc định
COLUMN_KEYPRI, UNI, MUL (khóa)
EXTRAauto_increment, etc.

Lưu ý

Cách này chủ yếu dùng cho công cụ quản trị, debug, hoặc dynamic SQL. Trong ứng dụng bình thường, kiểu dữ liệu đã biết trước qua schema.