创建去除字符串中汉字的表失败,报错无法转换UTF8字符至ASCII
问题描述
尝试执行以下SQL语句创建表xx,目的是去掉字符串里的汉字:
create table xx as SELECT REPLACE(CONVERT('汽车检测仪 AUTO' USING ascii), '?', '')
结果出现报错:
Query 1: Cannot convert 'utf8' character 0xE6898B to 'ascii'
解决方案
直接把UTF8汉字转成ASCII肯定会报错,因为汉字不在ASCII字符集的覆盖范围内,转换时会触发字符无法映射的错误。换个思路,用正则表达式直接匹配并移除汉字就行,不用绕字符集转换的弯路。
以MySQL为例,用REGEXP_REPLACE函数匹配Unicode汉字的范围([\u4e00-\u9fa5]),把匹配到的汉字替换成空字符串:
CREATE TABLE xx AS SELECT REGEXP_REPLACE('汽车检测仪 AUTO', '[\u4e00-\u9fa5]', '') AS cleaned_str;
如果是PostgreSQL这类数据库,语法类似,只需加上全局替换的参数:
CREATE TABLE xx AS SELECT REGEXP_REPLACE('汽车检测仪 AUTO', '[\u4e00-\u9fa5]', '', 'g') AS cleaned_str;
这种方法直接针对汉字字符精准匹配移除,既避免了字符集转换的错误,也能准确实现你去除汉字的需求。
内容的提问来源于stack exchange,提问作者user21251408
相关产品推荐
相关产品推荐

