如何在 MySQL 中判斷中文字符?

原文出處: 溫國兵 歡迎分享原創到伯樂頭條

一 引子

在生產環境中,經常會有這樣的場景:獲得中文數據。那問題就來了,怎么才能匹配出中文字符呢?

本文提供兩種方法。

二 演示

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)!?

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享