1
0

More than 5 years have passed since last update.

S3 SELECTの Where like で絵文字を部分一致検索できない

Last updated at Posted at 2019-01-27

起こったこと

絵文字入りの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
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0