我想檢查一下,如果一個字符串只包含大寫字母。我知道在MySQL中RLIKE/REGEXP不區分大小寫。所以我試圖用:upper:
字符類:如何檢查MySQL中的大寫字母?
SELECT 'z' REGEXP '^[[:upper:]]+$';
這讓真正的,雖然z是在較低的情況下,爲什麼?
我想檢查一下,如果一個字符串只包含大寫字母。我知道在MySQL中RLIKE/REGEXP不區分大小寫。所以我試圖用:upper:
字符類:如何檢查MySQL中的大寫字母?
SELECT 'z' REGEXP '^[[:upper:]]+$';
這讓真正的,雖然z是在較低的情況下,爲什麼?
更改爲區分大小寫的排序規則,例如。
CHARACTER SET latin1 COLLATE latin1_general_cs
然後嘗試此查詢,
SELECT 'z' REGEXP '^[A-Z]+$'
考慮到這一點REGEXP is not case sensitive, except when used with binary strings.
於是,在做這樣的事情:
SELECT * FROM `users` WHERE `email` REGEXP BINARY '[A-Z]';
使用上面的示例,您將看到包含一個或多個大寫字母的電子郵件列表。
對我來說這個作品並沒有使用正則表達式。它基本上將該字段與mysql本身的大寫字母進行比較。
-- will detect all names that are not in uppercase
SELECT
name, UPPER(name)
FROM table
WHERE
BINARY name <> BINARY UPPER(name)
;
這是一個不錯的解決方案,謝謝。 –
+1有同樣的想法,但不知道用LATIN1字符集招那麼 – Stephan
,但爲什麼字符類不行?因爲我使用錯誤的排序規則?爲什麼在'A-Z'確實加了':upper:',當:collation是'* _ci'時,':upper:'和':lower:'是一樣的?我以爲'* _ci'給出了默認值,但是在使用':upper:'時它會查找大寫字母。在http://dev.mysql.com/doc/refman/5.0/en/regexp.html中對[:character_class:]的描述它說我應該查看'ctype(3)'的手冊頁。我嘗試了'help ctype','man ctype',...沒有任何工作 –
我試過了:'SELECT'z'RLIKE'^ [AZ] $'COLLATE'utf8_general_cs';',這給了我一個錯誤:'錯誤1273 (HY000):未知整理:'utf8_general_cs''。命令'SELECT'z'RLIKE'^ [A-Z] $'COLLATE'utf8_general_ci';'正常工作。那麼我如何安裝區分大小寫的排序規則? –