Bạn có thể muốn sử dụng đối chiếu phân biệt chữ hoa chữ thường . Tôi tin rằng mặc định là không phân biệt chữ hoa chữ thường. Ví dụ:
CREATE TABLE my_table (
id int,
name varchar(50)
) CHARACTER SET latin1 COLLATE latin1_general_cs;
INSERT INTO my_table VALUES (1, 'SomeThing');
INSERT INTO my_table VALUES (2, 'something');
INSERT INTO my_table VALUES (3, 'SOMETHING');
INSERT INTO my_table VALUES (4, 'SOME4THING');
Sau đó:
SELECT * FROM my_table WHERE name REGEXP '^[A-Z]+$';
+------+-----------+
| id | name |
+------+-----------+
| 3 | SOMETHING |
+------+-----------+
1 row in set (0.00 sec)
Nếu bạn không muốn sử dụng đối chiếu phân biệt chữ hoa chữ thường cho toàn bộ bảng, bạn cũng có thể sử dụng COLLATE
mệnh đề như @kchau được đề xuất trong câu trả lời khác
.
Hãy thử với một bảng sử dụng đối chiếu không phân biệt chữ hoa chữ thường:
CREATE TABLE my_table (
id int,
name varchar(50)
) CHARACTER SET latin1 COLLATE latin1_general_ci;
INSERT INTO my_table VALUES (1, 'SomeThing');
INSERT INTO my_table VALUES (2, 'something');
INSERT INTO my_table VALUES (3, 'SOMETHING');
INSERT INTO my_table VALUES (4, 'SOME4THING');
Điều này sẽ không hoạt động tốt:
SELECT * FROM my_table WHERE name REGEXP '^[A-Z]+$';
+------+-----------+
| id | name |
+------+-----------+
| 1 | SomeThing |
| 2 | something |
| 3 | SOMETHING |
+------+-----------+
3 rows in set (0.00 sec)
Nhưng chúng ta có thể sử dụng COLLATE
mệnh đề đối chiếu trường tên với đối chiếu phân biệt chữ hoa chữ thường:
SELECT * FROM my_table WHERE (name COLLATE latin1_general_cs) REGEXP '^[A-Z]+$';
+------+-----------+
| id | name |
+------+-----------+
| 3 | SOMETHING |
+------+-----------+
1 row in set (0.00 sec)