CUEBiC TEC BLOG

キュービックTECチームの技術ネタを投稿しております。

trocco®️でutf-8の罠にはまったはなし(後編)

どうも! キュービックのテックリードの尾﨑です
前回はトーマスにtrocco®️を紹介してmysqlからスプレッドシートに転送する際に文字化けする事象が起きたのでその解消を試みていました。
今回は実際にCSにご相談させていただきつつ解消までのもようをお届けします。せっかくなので実際の相談する際のテンプレートなども公開しちゃいます

前回のおさらい

前回は事前調査で解消ができなかったためCSにも相談させていただこうということでtrocco®️のSlackコネクトにトーマスを招待したところまででした

実際にご相談させていただいた内容を紹介しつつ、解決までのもようをお届けします

trocco初心者トーマス

ちょうど、問い合わせやハマった時の参考になると思ったので、いつもCSに質問をさせていただく時のテンプレートを置いておきます

不具合時

  • 概要:何に関してか
  • 事象:実際に起きたこと、画像付きであると良い
  • 接続環境や情報など:ワークフローや転送設定URLは必須です
  • 事前調査内容:実際に試したこと
  • 仮説:あれば

何に関しての相談か?

初めまして、株式会社キュービックの東松と申します。 この度はSlackにご招待いただきましてありがとうございます。 どうぞよろしくお願いいたします。 自身の担当するプロダクトの利用状況の分析のダッシュボードを作成するにあたり、弊社尾崎からtrocco®️活用の提案を受けまして、trocco®️のデータ転送設定を試させて頂いていたのですが、転送の際に文字列が文字化けしてしまうという挙動への対策をご相談に伺わせて頂きました。 明日、別スレッドにてtrocco®️側の転送設定や転送元などの情報をまとめさせて頂きますので、原因など分かりましたらご教示いただけますと幸いです。

事象

MySQLの接続時にtrocco®️のスキーマ・データのプレビュー段階で文字化けを起こしております。そのままスプレッドシートにエクスポートした際も文字化けした状態のまま出力されます。(プレビュー時の文字化けを含むキャプチャを添付しております)

文字化けした文字列
・パターン①
元文字列:yarujan_感謝
文字化け:yarujan_æ„Ÿè¬�
・パターン②
元文字列:thx_感謝_thx_あ_ア
文字化け:thx_æ„Ÿè¬�_thx_ã�‚_ã‚¢

接続環境や情報など

trocco®️の転送設定は以下になります

・転送元:MySQL
AWS Aurora:8.0.mysql_aurora.3.02.2
※EC2を踏み台としたMySQL接続
・転送先:Google SpreadSheet
Google Sheet APIよりSpreadSheetへの書き込み

文字化けするデータベースのカラム設定は以下になります

データ型:varchar(32)
文字コード:utf8mb4

事前調査内容

文字化けを起こす文字列はひらがな、カタカナ、漢字の3種類になります。 また、MySQLの文字化けの例としてよくあるUnicodeの絵文字が直接入力されるということはないため確認はしておりません

DB上の文字コード設定も確認しました。踏み台にしているEC2からMySQLに接続し確認しています。 -> 別の文字コードになっていることもなくutf8mb4が設定されているためDBのパラメータは問題がなさそうだと考えております

参考にさせていただいた記事: qiita.com

mysql> show variables like 'character_set%';
+--------------------------+-------------------------------------------------------------------+
| Variable_name            | Value                                                             |
+--------------------------+-------------------------------------------------------------------+
| character_set_client     | utf8mb4                                                           |
| character_set_connection | utf8mb4                                                           |
| character_set_database   | utf8mb4                                                           |
| character_set_filesystem | binary                                                            |
| character_set_results    | utf8mb4                                                           |
| character_set_server     | utf8mb4                                                           |
| character_set_system     | utf8                                                              |
| character_sets_dir       | /rdsdbbin/oscar-8.0.mysql_aurora.3.02.2.0.18301.0/share/charsets/ |
+--------------------------+-------------------------------------------------------------------+
8 rows in set (0.00 sec)

mysql> show variables like '%collation%';
+-------------------------------+--------------------+
| Variable_name                 | Value              |
+-------------------------------+--------------------+
| collation_connection          | utf8mb4_0900_ai_ci |
| collation_database            | utf8mb4_0900_ai_ci |
| collation_server              | utf8mb4_0900_ai_ci |
| default_collation_for_utf8mb4 | utf8mb4_0900_ai_ci |
+-------------------------------+--------------------+
4 rows in set (0.00 sec)

文字数設定が短く欠損している可能性を検討し文字数を拡張しましたが、解消しませんでした。
拡張前:varchar(32)
拡張後:varchar(255)

忘れてはならないこと

はい、転送設定のURLは絶対に連携してください。調査いただく上で必要です

あー、そうでした・・・気をつけます

解決までの間に話していたこと

trocco®️の裏で動いているJDBC接続が何かよからぬことをしているのではないかと思えてきました。

trocco®️本体というより環境依存の問題だったらどうするか決めましょうか。例えばJDBC接続をサポートしている

そうですね。

trocco®️の改修可能なものなら改修待ちで不可ならembulkの更新待ちですね

なるほどー><あと少しなんですけどね

不具合が起きたら止まるんじゃなくて迂回策や代替策を検討しておくのが大事なんじゃないですかね?

そうですね!

スプレッドシートにデイリーで吐き出して、文字化けしている箇所を置換するスクリプトを仕込むとか。作りましょうか?

あっ!いざとなったらlambdaとかで組みます!

原因

原因がわかりました!

おっ!なんだったんですか?

どうやら転送元MySQLでtrocco®️のJDBCドライバーの互換性の問題だったようです

お手柄ですね!今回はtrocco®️の方の問題でしたか

解決策

今回はtrocco®️環境の問題だったのでJDBCドライバーをアップデートいただきました

今回のように原因の切り分けが難しいものはCSに相談しておきつつ自己調査や代替案を検討するのが吉ですね

うっ投げたまま止まっちゃってたので反省です

次回からうまく進めてみてください

はい!かなり使用感はわかったので色々動かしてみたいと思います

ところで無事治りましたか?

バッチリです!

よかったです

まとめ

ポイント

  • troccoを展開しよう
  • troccoで不具合や問題が出たらCSに相談しよう
  • 相談する際に適切な情報を連携しよう
  • 環境依存の場合は代替策も考えよう

今回は同じ開発チームのトーマスにtrocco®️を紹介して、起きたトラブルシューティングのもようをお届けしました。

丁寧にお調べいただいて感謝です。trocco®️を使って今後色々できそうです

今後も事例など紹介していければと思いますのでお楽しみに!