RailsのMySQLへのレコード追加で「ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value」が発生した件
RailsのデータベースでMySQLを使用して、
通常通り処理を行う中で、
「ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value」
というエラーが発生した。
あれ、何か変更したかな?
と考えながら色々とデータを確認したら、
😆
などの絵文字が入っていたので、
そちらが登録するときに、
エラーが発生していた。
今回のエラー内容と、
対応した内容をメモ。
前提
MySQLの文字コードについては、
MySQLに接続して、
以下のコマンドで状況を確認
SHOW VARIABLES LIKE 'chara%';
確認してみると、
「utf8mb4」
でマルチバイト文字対応している。
mysql> SHOW VARIABLES LIKE 'chara%';
+--------------------------+----------------------------+
| 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 | utf8mb3 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
エラー内容
エラーは先ほども説明したが、
対象テーブルへのインサートのタイミングで、
以下のようなエラーが発生していた。
ActiveRecord::StatementInvalid
(Mysql2::Error: Incorrect string value: '\xF0\x9F\x8C\xBF'
for column 'column_name' at row 1):
対応内容
この事象の調整方法としては、
- charactor codeを「utf8mb4」に変更する
ということで対応できた。
自分の環境では、
データベースに対しては、
「utf8mb4」
となっているので、
Railsの環境周り、マイグレーションでの作成時に、
「utf8」になっているので、
以下の調整を実施。
修正ファイル
vi config/database.yml
修正内容
default: &default
adapter: mysql2
encoding: utf8mb4
collation: utf8mb4_polish_ci
上記に加えて、
テーブル作成時のcharactor codeの設定も調整
class LazadaGroups ...
def change
create_table ...CHARSET=utf8mb4", force: :cascade do |t|
こちらの設定をして、
あとは、
- マイグレーションの再実行
- サーバー自体の再起動
を実施して、
再度確認するとうまく動いたので完了。
スキルを使って、就職/転職/副業する時のサイト
プログラミングのスキルなどを、自分なりに高めた上で、
自分のスキルをアピールして就職や転職を行い、年収をあげるか、
副業という形で、年収にプラスアルファの稼ぎを増やすことはできます。
まずはできる範囲で取り組むことで、
少しずつ、経験値も増え、自分のスキルが収入につながるのでおすすめです。