Help us understand the problem. What is going on with this article?

SQL Dumpからインポートしようとしたら、Cannot create a JSON value... というエラーが出たので対応した

SQL Dumpからインポートしようとしたら、Cannot create a JSON value… というエラーが出てしまいました。
テーブルにJSONカラムを追加してから発生するようになったようなので、しばらく気づかず...厄介ですね。。

発生したエラー

Error
Cannot create a JSON value from a string with CHARACTER SET 'binary'.

私は、TablePlusというGUIクライアントを使用しておりましたため、以下のような画面とともにメッセージが表示されました。
もし、他のGUIクライアントやコマンドにて実行されたユーザーでも同じようなエラーが出るものと思います。
43b1a358da7aa561b6b9ea373e2b3d52.png

SQL Dumpに使用したコマンド

参考までに、SQL Dumpを行った際に実行していたコマンドも載せておきます。
<HOST><USER><PASSWORD><DATABASE>には、それぞれ適切な値を設定してあります。

mysqldump --host=<HOST> --user=<USER> --password=<PASSWORD> --single-transaction <DATABASE> --default-character-set=binary > <DATABASE>.sql

解決策

上記に記載した方法で取得したDumpファイルだと、文字コードの設定がbinaryとなっていることが原因のようです。
こちらを、無理やり?テキストエディタ等でutf8mb4に変更してやると、上手くいきました。

- /*!40101 SET NAMES binary */;
+ /*!40101 SET NAMES utf8mb4 */;

※ 恐らくファイルの先頭あたり(私の場合は10行目)に、一箇所のみあるようです。

まとめ

コマンドに付与したオプション(--default-character-set=binary)は、
SQL Dumpを作成する際に、絵文字を含めた状態でDumpファイルを書き出すために指定していたものでした。

もっと最適な方法などあればコメント欄にて教えていただけますと幸いです。

kenkubomi
Web系が得意なエンジニアです。フロントエンドはまだまだ勉強中。 ネイティブアプリも作ってみたくて、個人で「鳥取なにたべ!」アプリを配信しています。 投稿されている内容はあくまで私自身の見解であり、所属団体・企業を代表するものではありません。
https://www.wantedly.com/projects/448223
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away