2013-05-15 36 views
5

Tôi muốn kiểm tra, nếu chuỗi chỉ chấp nhận các chữ in hoa. Tôi biết rằng RLIKE/REGEXP không phân biệt chữ hoa chữ thường trong MySQL. Vì vậy, tôi đã cố gắng để sử dụng lớp :upper: nhân vật:Cách kiểm tra chữ hoa trong MySQL?

SELECT 'z' REGEXP '^[[:upper:]]+$'; 

này cho đúng, mặc dù z là trong trường hợp thấp hơn, ... tại sao?

Trả lời

4

thay đổi đối chiếu trường hợp nhạy cảm, ví dụ:

CHARACTER SET latin1 COLLATE latin1_general_cs 

sau đó thử truy vấn này,

SELECT 'z' REGEXP '^[A-Z]+$' 
+0

+1 có cùng ý tưởng nhưng không biết mẹo với ký tự latin1 – Stephan

+0

Vì vậy, nhưng tại sao lớp nhân vật không hoạt động? Bởi vì tôi đang sử dụng sai collation? tại sao thêm ': upper:' khi 'A-Z' thực hiện tương tự, và': upper: 'giống với': lower: 'khi collation là' * _ci'? Tôi nghĩ '* _ci' cho dafault, nhưng khi sử dụng': upper: 'nó tìm chữ hoa. Trong mô tả của [: character_class:] trên http://dev.mysql.com/doc/refman/5.0/en/regexp.html Nó nói rằng tôi nên xem các trang hướng dẫn của 'ctype (3)'. Tôi đã thử 'help ctype',' man ctype', ... không có gì làm việc –

+0

Tôi đã thử: 'SELECT 'z' RLIKE '^ [AZ] $' COLLATE 'utf8_general_cs';', đã cho tôi một lỗi: 'ERROR 1273 (HY000): Trùng khớp không xác định: 'utf8_general_cs''. Lệnh 'SELECT 'z' RLIKE '^ [A-Z] $' COLLATE 'utf8_general_ci';' hoạt động tốt. Vì vậy, làm thế nào tôi có thể cài đặt các trường hợp nhạy cảm collation? –

13

REGEXP is not case sensitive, except when used with binary strings.

http://dev.mysql.com/doc/refman/5.7/en/regexp.html

Vì vậy, với ý nghĩ đó, chỉ cần làm một cái gì đó như thế này:

SELECT * FROM `users` WHERE `email` REGEXP BINARY '[A-Z]'; 

Sử dụng ví dụ trên, bạn sẽ nhận được danh sách các email có chứa một hoặc nhiều chữ hoa.

2

Đối với tôi, tác phẩm này và không sử dụng regexp. Về cơ bản nó so sánh các lĩnh vực với chính nó uppercased bởi mysql chính nó.

-- will detect all names that are not in uppercase 
SELECT 
    name, UPPER(name) 
FROM table 
WHERE 
    BINARY name <> BINARY UPPER(name) 
; 
+0

Đó là một giải pháp gọn gàng đẹp, cảm ơn. –

Các vấn đề liên quan