mysql查询中文字符_Mysql去除中文字符&判断字段是否有中文字符

背景:用户表中的name存的是用户名字的拼音和中文。

需求:名字去除掉所有的中文字符。

解决方案:

通过CONVERT(name USING ASCII)把中文转换为?,然后再进行替换。

##把所有中文字符替换为空字符串

UPDATE staff SET name = REPLACE(CONVERT(name USING ASCII),'?','');

##查询中文字符的转换过程

select name '原数据',CONVERT(name USING ASCII) '转换后', REPLACE(CONVERT(name USING ASCII),'?','') '结果'from staff;

b2c83a0e7230

转换的过程.png

引申问题:怎么判断字段包含中文字符

方法1:查询CONVERT(name USING ASCII)转换为后有?的数据。

select id,name from staff where locate('?',CONVERT(name USING ASCII));

##或者

select id,name from staff where position('?'in CONVERT(name USING ASCII));

方法2:通过正则表达式查询,'[^ -~]'或'e[4-9][0-9a-f]{4}'或者'^(..)*(E[4-9])'表示含中文。

SELECT name,

CASE name REGEXP '[^ -~]'

WHEN 1 THEN "包含中文字符"

ELSE "不包含中文字符"

END AS "判断是否是中文字符"

FROM staff;

#或

SELECT name,

CASE hex(name) REGEXP 'e[4-9][0-9a-f]{4}'

WHEN 1 THEN "包含中文字符"

ELSE "不包含中文字符"

END AS "判断是否是中文字符"

FROM staff;

#或

SELECT name,

CASE hex(name) REGEXP '^(..)*(E[4-9])'

WHEN 1 THEN "包含中文字符"

ELSE "不包含中文字符"

END AS "判断是否是中文字符"

FROM staff;

方法3:通过length()和char_length()返回值不同进行查询。

##当字符集为UTF-8,并且字符为中文时,length()和char_length()两个方法返回的结果不相同。

SELECT name FROM staff WHERE length(name) <> char_length(name);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值