ピックアップ
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|こちらの設定をして、
あとは、
- マイグレーションの再実行
 - サーバー自体の再起動
 
を実施して、
再度確認するとうまく動いたので完了。
おすすめ書籍
コメント一覧
コメントはまだありません。



          
          
          
コメントを残す