Để liệt kê tất cả cột có kiểu dữ liệu cụ thể (ví dụ: TEXT, VARCHAR, INT, JSON) trong database hiện tại, truy vấn view INFORMATION_SCHEMA.COLUMNS với điều kiện DATA_TYPE = 'ten_kieu'.
Truy vấn: Tìm tất cả cột kiểu TEXT
mysql> SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'text'
AND TABLE_SCHEMA = DATABASE();
Kết quả mẫu (rút gọn từ output thực tế)
+---------------------------------------------+--------------------------------+
| TABLE_NAME | COLUMN_NAME |
+---------------------------------------------+--------------------------------+
| COLUMNS | COLUMN_DEFAULT |
| COLUMNS | COLUMN_COMMENT |
| FILES | FILE_NAME |
| PARTITIONS | PARTITION_DESCRIPTION |
| PARTITIONS | PARTITION_COMMENT |
| ROUTINES | ROUTINE_COMMENT |
| replication_group_member_stats | LAST_CONFLICT_FREE_TRANSACTION |
| password_history | Password |
| component | component_urn |
| innodb_buffer_stats_by_schema | object_schema |
| ... (nhiều bảng hệ thống và bảng người dùng) ... |
| DemoTable | CustomerAllProductPrice |
| DemoTable | Title |
| textdemo | name |
| texttabledemo | Address |
| searchtextdemo | BookName |
| ... | ... |
+---------------------------------------------+--------------------------------+
240 rows in set (0.28 sec)
Giải thích
DATA_TYPE: Tên kiểu dữ liệu chuẩn hóa (không bao gồm độ dài, unsigned, zerofill). Ví dụ:varchar,text,int,datetime,json.COLUMN_TYPE: Kiểu đầy đủ với tham số (ví dụ:varchar(200),int(11) unsigned). Dùng cột này nếu cần lọc chính xác độ dài.TABLE_SCHEMA = DATABASE(): Chỉ xem database hiện tại. Bỏ đi để xem toàn server.
Các DATA_TYPE phổ biến trong MySQL
| Nhóm | DATA_TYPE values |
|---|---|
| Số nguyên | tinyint, smallint, mediumint, int, bigint |
| Số thực | decimal, float, double |
| Chuỗi cố định | char, binary |
| Chuỗi khả biến | varchar, varbinary |
| Blob/Text | tinyblob, blob, mediumblob, longblob, tinytext, text, mediumtext, longtext |
| Ngày/Giờ | date, time, datetime, timestamp, year |
| Khác | enum, set, json, geometry |
Ứng dụng thực tế
- Audit schema: Tìm cột dùng
TEXTthay vìVARCHAR(hoặc ngược lại) không phù hợp. - Migration: Chuẩn bị script ALTER TABLE cho các cột kiểu cũ (ví dụ:
TINYTEXT->VARCHAR(255)). - Tìm cột
JSONđể kiểm tra index (MySQL 8.0+ hỗ trợ Functional Index trên JSON). - Sinh code: Lọc cột theo kiểu để map sang kiểu dữ liệu ngôn ngữ lập trình (Java, Go, C#...).