MySQL 8.0.32にはUNION ALLをするとWHERE句で日本語が使えなくなるバグが存在します

MySQL 8.0.32にはUNION ALLをするとWHERE句で日本語が使えなくなるバグが存在します

Clock Icon2023.06.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

データアナリティクス事業本部のueharaです。

今回は、MySQL 8.0.32でテーブルをUNION ALLした際に生じるバグを共有したいと思います。

バグの事象

こちらで報告されている通り、MySQL 8.0.32では、UNION ALLをするとWHERE句で検索条件として日本語を指定すると、以下のようなエラーが発生して処理が落ちてしまいます。

Cannot convert string '\xE5\x8C\x97\xE6\xB5\xB7...' from utf8mb4 to binary

したがって、次のような処理をすることが不可能になります。

WITH tmp_table AS (
  SELECT name, data1
  FROM table_a
  UNION ALL
  SELECT name, data1
  FROM table_b
)
SELECT *
FROM tmp_table
WHERE name = "田中太郎" -- ★条件として日本語が使えなくなる

また、これはビューでも同様のことが言えるため、Amazon RDSでMySQL 8.0.32を使用しており、かつAmazon QuickSightで当該RDSのUNION ALLを使用しているビューをソースとしている場合、フィルターで日本語が使えなくなります。(QuickSight上はエラーが発生しているようには見えませんが、検索でヒットしなくなります)

解決策

本事象はMySQL 8.0.33にバージョンアップすることで解決します。

RDSでは2023年6月15日にMySQL 8.0.33がリリースされています。

なお、2023年6月26日時点では、AWSの「Amazon RDS での MySQL のバージョン」ページではMySQL 8.0.32が最新かのように見えていますが、英語版のページに切り替えると8.0.33に対応していることが分かります。

  • 日本語版

  • 英語版

最後に

今回は、MySQL 8.0.32のUNION ALLに関するバグを共有させて頂きました。

参考になりましたら幸いです。

参考文献

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.