命令行 MySQL 中的 Unicode 转义序列

4

简短版本:

在命令行mysql中,有哪种转义序列可以用来搜索Unicode字符?

详细版本:

我正在寻找一种方式,在mysql命令行中搜索包含Unicode序列U+200B的列记录。我无法确定要使用哪种转义字符。我尝试过 \u200B 和 x200B 以及​​​,最后找到了一个建议使用_utf8语法的博客。这会在命令行上产生该字符:

select _utf8 x'200B';

现在我卡在了尝试在“LIKE”查询中使其工作。

这会生成字符,但是%似乎在放置在LIKE部分时失去了它们的特殊含义:

select _utf8 x'0025200B0025';

我也尝试了concat,但它也没有起作用:
select concat('%', _utf8 x'200B', '%');

更多背景信息:

我有一些数据中包含零宽空格字符(ZWSP),Unicode码点为U+200B。这通常是从使用ZWSP的网站上复制粘贴造成的。对于大多数Unicode字符,我可以将字符粘贴到终端中(或使用键码创建它),但由于这个字符是不可见的,所以有点棘手。我可以创建一个生成“%%”序列的文件,并将其复制/粘贴到终端中,这样就可以工作了,但它会使我的命令历史记录和终端输出混乱。我认为在MySQL中应该有一种简单的方法来解决这个问题,但到目前为止我还没有想出来。

提前感谢,

-Paul Burney

2个回答

5
select _utf8 x'0025200B0025';

这不是UTF-8,而是UTF-16/UCS-2。如果你的MySQL支持UCS-2,你可以尝试使用SELECT _ucs2 0x0025200B0025

否则,在UTF-8中编码字符U+200B的字节序列为0xE2、0x80、0x8B:

select 0xE2808B;

太好了!这可以在命令行中使用LIKE查询和CONCAT来运作,例如:SELECT * FROM t WHERE field_name LIKE CONCAT('%',0xE2808B,'%');我非常感谢你的帮助! - Paul Burney

2
如果是Linux系统,请按住Ctrl + Shift + U,然后释放U键并输入200B。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接