S3 SELECTの Where like では絵文字を取得できない
S3 SELECTの Where like では絵文字を取得できない:
絵文字入りのCSVファイルに対し、S3 Selectでクエリを投げてみます。
ん?
Where likeでうまく結果をとれた「❤️」は、UTF-16のコードポイント上で U+2764 と U+FE0F (異体字セレクタ) ️で構成された文字に対し、「��」は U+1F980 のサロゲートペア文字です。
同じくサロゲートペア文字である「��」「��」なども、Where likeで取得することができませんでした。
一方で、非サロゲートペア文字+異体字セレクタで構成された「♣️」などはちゃんとで取得できました。
AWS側のバグなのでしょうか・・・。
絵文字がそのまま使えない以上、別のフォーマットで保存するほか無さそうです。
私の場合は、URLエンコードをかけた形式で保存することで対応しました。
起こったこと
絵文字入りのCSVファイルに対し、S3 Selectでクエリを投げてみます。アップロードしたCSV
v_name,oshimark 周防パトラ,��❤️ 蒼月エリ,���� 島村シャルロット,♣️❄️ 西園寺メアリ,���� 堰代ミコ,����
SQL
select * from S3Object s where s.v_name = '周防パトラ' -- -> 周防パトラ,��❤️ select * from S3Object s where s.v_name like '%パ%' -- -> 周防パトラ,��❤️ select * from S3Object s where s.oshimark = '��❤️' -- -> 周防パトラ,��❤️ select * from S3Object s where s.oshimark like '%❤️%' -- -> 周防パトラ,��❤️ select * from S3Object s where s.oshimark like '%��%' -- -> 結果がありません
サロゲートペア文字が原因(っぽい)
Where likeでうまく結果をとれた「❤️」は、UTF-16のコードポイント上で U+2764 と U+FE0F (異体字セレクタ) ️で構成された文字に対し、「��」は U+1F980 のサロゲートペア文字です。同じくサロゲートペア文字である「��」「��」なども、Where likeで取得することができませんでした。
一方で、非サロゲートペア文字+異体字セレクタで構成された「♣️」などはちゃんとで取得できました。
AWS側のバグなのでしょうか・・・。
対策
絵文字がそのまま使えない以上、別のフォーマットで保存するほか無さそうです。私の場合は、URLエンコードをかけた形式で保存することで対応しました。
v_name,oshimark 周防パトラ,%F0%9F%A6%80%E2%9D%A4%EF%B8%8F 蒼月エリ,%F0%9F%A5%80%F0%9F%92%8E 島村シャルロット,%E2%99%A3%EF%B8%8F%E2%9D%84%EF%B8%8F 西園寺メアリ,%F0%9F%8D%BC%F0%9F%94%AE 堰代ミコ,%F0%9F%94%B1%F0%9F%8D%8F
コメント
コメントを投稿