その他

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

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

発生したエラー

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

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

▲ TablePlusでImportしようとしたときのエラー

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ファイルを書き出すために指定していたものでした。

今回、ここで指定したbinaryutf8mb4に変更してやることで、問題なくImportされたため、Dumpファイルを作成する際のコマンドを、予め--default-character-set=utf8mb4といった形に変更してやることで、Importの際にもテキストエディタを使用することなく読み込めるのではないか?と考えています。(未検証)

また、上記試してみる機会があれば、結果を更新します。

-その他
-

© 2020 teckmemo