Tóm tắt
Truy vấn INFORMATION_SCHEMA.COLUMNS để lấy định nghĩa cột ENUM, sau đó xử lý chuỗi trong PHP để tách các giá trị.
Truy vấn SQL
SELECT COLUMN_TYPE AS AllPossibleEnumValues
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'ten_database'
AND TABLE_NAME = 'ten_bang'
AND COLUMN_NAME = 'ten_cot_enum';
Ví dụ
1. Tạo bảng có cột ENUM
CREATE TABLE EnumDemo (
Id INT,
Color ENUM('RED','GREEN','BLUE','BLACK','ORANGE')
);
2. Kết quả truy vấn
+---------------------------------------------+
| AllPossibleEnumValues |
+---------------------------------------------+
| enum('RED','GREEN','BLUE','BLACK','ORANGE') |
+---------------------------------------------+
Xử lý trong PHP
$result = $mysqli->query("SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='sample' AND TABLE_NAME='EnumDemo' AND COLUMN_NAME='Color'");
$row = $result->fetch_assoc();
$enum_str = $row['COLUMN_TYPE']; // "enum('RED','GREEN','BLUE','BLACK','ORANGE')"
// Tách các giá trị
preg_match_all("/'([^']*)'/", $enum_str, $matches);
$enum_values = $matches[1]; // ['RED','GREEN','BLUE','BLACK','ORANGE']
print_r($enum_values);
Kết quả PHP
Array
(
[0] => RED
[1] => GREEN
[2] => BLUE
[3] => BLACK
[4] => ORANGE
)
Lưu ý
- Cần quyền
SELECTtrênINFORMATION_SCHEMA. - Regex
/'([^']*)'/hoạt động tốt cho ENUM đơn giản; ENUM chứa dấu nháy đơn trong giá trị cần xử lý phức tạp hơn. - MySQL 8.0+ có thể dùng
JSON_TABLEsau khi chuyển đổi, nhưng cách trên tương thích rộng rãi.