Laravelでハマったcharset:utf8mb4

Laravelでハマったcharset:utf8mb4

Laravelでハマったcharset:utf8mb4

最近Laravelでのプログラミングに明け暮れてます。
おかげでブログの更新が疎かになってますが、完成したプログラムはきっと皆さまのお役に立つものであろうと思います。

そのプログラムの中でハマった個所の備忘録です。

そもそもcharsetって何?

10年前くらいから楽天市場とお付き合いのある店舗さんならお分かりだと思います。

charsetとは文字コードの事ですね。

弊社の出店した6年前ではあまり言われなくなっていたそうですが、私は何度かコールセンターで『charset』を力説されました。
「エクセルで作成したデータは『Shift_jis』、楽天市場へのCSV更新は『utf8』で行ってください。データはAccessで作成してください。Excelはダメです。」
今でこそなくなりましたが、10年前の楽天市場ではExcelで更新したデータが上手く表示されないという事案が多発していたそうです。

ネットワーク上の情報は最終的には0と1の羅列です。
これらにルールを作って文字や図を表しているわけですが、charsetとはこの文字のルールの事です。
Excelの標準の文字ルールは『Shift_jis』、でも楽天市場の更新仕様は『utf8』で作成していたから文字化けになったという事です。

utf8mb4 は絵文字も可能にした文字コードの事

スマホが流通し【絵文字】の文化が定着してきました。
そこで、従来の文字コードでは対応しきれないと考え新しいルールを作った。それがutf8mb4です。
そのため絵文字を利用できますが、1文字当たりの容量が今までの倍の4バイトとなりました。

モールでは文字数制限がありますので、扱える文字の量が減ったと認識いただいてOKです。

モール出品アプリを作成している私からするとこの現象は大問題。
なぜなら使える文字数がモールの要件よりも少なくなる可能性があるからです。
システムはモールの仕様に合わせなきゃ使えないですよね。

だから従来のutf8に変更したかったのですが、ここで大ハマりしたわけです。

Laravel の文字コード指定ヶ所は複数ある

ググると出てくる情報で最も多いものは【my.cnf】の書き換えです。

このように『utf8mb4』を『utf8』に書き換えて再起動&マイグレーション実行!

上手くいく方はこれだけで解決するようですが、私はダメでした。

 config/database.php を確認

色々ググってテストした結果、Laravelの config/database.php を変更して解決しました。

こんなところにも設定があったんですね。

マイグレーションの結果も良好。

ツール作成頑張ります。