如何在 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 row in
set
(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 row in
set
(0.00 sec)
- POJ 2492 A Bug's Life
- 【Scrapy】走进成熟的爬虫框架
- Codeforces 777C Alyona and Spreadsheet
- HDU 1039 Easier Done Than Said?
- Codeforces 777A Shell Game
- Codeforces 777B Game of Credit Cards
- [Jenkins 新插件] 兼容阿里开发手册 (P3C) 的火线插件安装使用教程
- Codeforces 591B Rebranding
- 零基础学贪心算法
- WebSocket协议深入探究
- 全渠道客服中心聊天机器人实战
- Selenium+python自动化21-TXT数据参数化
- 1283 最小周长
- AtCoder Regular Contest 069 D
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解