4

短縮版:

コマンドラインmysqlでUnicode文字を検索するために使用できるエスケープシーケンスの種類は?

長いバージョン:

コマンドラインからmysqlでUnicodeシーケンスU + 200Bを含むレコードを列で検索する方法を探しています。どの種類のエスケープを使用するかわかりません。\u200B とx200Bを試してみましたが、_utf8 構文を提案する 1 つのブログをついに見つけました。これにより、コマンドラインで次の文字が生成されます。

select _utf8 x'200B';

今、私は「LIKE」クエリでそれを機能させようとして立ち往生しています。

これにより文字が生成されますが、 % は LIKE 部分に配置すると特別な意味を失うようです:

select _utf8 x'0025200B0025';

私も連結を試みましたが、どちらもうまくいきませんでした:

select concat('%', _utf8 x'200B', '%');

より多くの背景:

幅ゼロの空白文字 (zwsp) を含むデータ、Unicode ポイント U+200B があります。これは通常、出力に zwsp を使用する Web サイトからのコピー/貼り付けが原因です。ほとんどの Unicode 文字では、文字を端末に貼り付ける (またはキーコードで作成する) だけで済みますが、これは目に見えないため、少しやりがいがあります。「%%」シーケンスを生成するファイルを作成し、それを端末にコピーして貼り付けることができます。これは機能しますが、コマンド履歴と端末出力がおかしいままになります。MySQL でこれを行う簡単な方法があると思いますが、これまでのところ不十分です。

前もって感謝します、

-ポール・バーニー

4

2 に答える 2

5
select _utf8 x'0025200B0025';

それは UTF-8 ではなく、UTF-16/UCS-2 です。SELECT _ucs2 0x0025200B0025MySQL のコピーで UCS-2 がサポートされているかどうかを確認できる場合があります。

それ以外の場合、UTF-8 で文字 U+200B をエンコードするバイト シーケンスは、0xE2、0x80、0x8B になります。

select 0xE2808B;
于 2011-03-28T20:07:37.837 に答える
2

Linux の場合は、Ctrl + Shift + U を押したまま U を離して 200B と入力します。

于 2011-03-28T18:47:55.663 に答える