原文出處: 溫國兵 歡迎分享原創到伯樂頭條
一 引子
在生產環境中,經常會有這樣的場景:獲得中文數據。那問題就來了,怎么才能匹配出中文字符呢?
本文提供兩種方法。
二 演示
2.1 環境
mysql> SHOW VARIABLES?LIKE?“%version%”;
+————————-+——————————+
| Variable_name | Value |
+————————-+——————————+
| protocol_version | 10 |
| version | 5.1.73 |
| version_comment | mysql Community Server (GPL) |
| version_compile_machine | i386 |
| version_compile_os | apple-darwin10.3.0 |
+————————-+——————————+
5?rows?in?set?(0.00 sec)
2.2 創建測試表和插入測試數據
mysql -S /tmp/mysql_5173.sock -uroot -proot
創建測試表和插入測試數據。
mysql> USE test;
Database?changed
mysql>?CREATE?TABLE?user
-> (name?VARCHAR(20)
-> )?DEFAULT?CHARSET = utf8 ENGINE = INNODB;
Query OK, 0?rows?affected (0.10 sec)
mysql> SHOW?TABLE?STATUS?LIKE?‘user’?G;
*************************** 1. row ***************************
Name:?user
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 2
Avg_row_length: 8192
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment:?NULL
Create_time: 2015-01-16 18:01:36
Update_time:?NULL
Check_time:?NULL
Collation: utf8_general_ci
Checksum:?NULL
Create_options:
Comment:
1 row?in?set?(0.00 sec)
ERROR:
No?query specified
mysql>?INSERT?INTO?user?VALUES(‘robin’);
Query OK, 1 row affected (0.01 sec)
mysql>?INSERT?INTO?user?VALUES(‘溫國兵’);
Query OK, 1 row affected (0.00 sec)
三 實現
3.1 方法一 正則表達式
mysql>?SELECT?*?FROM?user?G;
*************************** 1. row ***************************
name: robin
*************************** 2. row ***************************
name: 溫國兵
2?rows?in?set?(0.00 sec)
mysql>?SELECT?name,
->?CASE?name?REGEXP?“[u0391-uFFE5]”
->?WHEN?1?THEN?“不是中文字符”
->?ELSE?“是中文字符”
->?END?AS?“判斷是否是中文字符”
->?FROM?user;
+———–+—————————–+
|?name?| 判斷是否是中文字符 |
+———–+—————————–+
| robin | 不是中文字符 |
| 溫國兵 | 是中文字符 |
+———–+—————————–+
2?rows?in?set?(0.00 sec)
mysql>?SELECT?name?FROM?user?WHERE?NOT?(name?REGEXP?“[u0391-uFFE5]”);
+———–+
|?name?|
+———–+
| 溫國兵 |
+———–+
1 rowinset(0.00 sec)
3.2 方法二 length() 和 char_length()
mysql>?SELECT?name, length(name), char_length(name)?FROM?user;
+———–+————–+——————-+
|?name?| length(name) | char_length(name) |
+———–+————–+——————-+
| robin | 5 | 5 |
| 溫國兵 | 20 | 9 |
+———–+————–+——————-+
2?rows?in?set?(0.00 sec)
mysql>?SELECT?name?FROM?user?WHERE?length(name) char_length(name);
+———–+
|?name?|
+———–+
| 溫國兵 |
+———–+
1 rowinset(0.00 sec)
?以上就是如何在 MySQL 中判斷中文字符?的內容,更多相關內容請關注PHP中文網(www.php.cn)!?