プログラミング

【MySQL】INSERT INTOで「Incorrect string value」エラーが表示された時の解決方法

筆者
筆者
MySQLでテーブルにデータを挿入(INSERT INTO)しようとしたら「Incorrect string value」エラーが表示されました。その解決方法を書きます。

動作確認した環境は以下です。

  • Ubuntu 18.04.3
  • XAMPP for Linux 7.3.9

DBの文字コードの確認

MySQLモニタを起動して現在の文字コード設定を確認します。

DBの文字コードを確認します。

僕の場合は以下のように表示されました。

Variable_nameValue
character_set_clientutf8
character_set_connectionutf8
character_set_databaselatin1
character_set_filesystembinary
character_set_resultsutf8
character_set_serverlatin1
character_set_systemutf8
character_sets_dir/opt/lampp/share/charsets/

この中で以下項目の値を「utf8mb4」に変更します。

  • character_set_client
  • character_set_connection
  • character_set_results
  • character_set_server

DBの文字コードの変更

MySQLモニタを終了します。

my.cnf(またはmy.ini)の設定を変更します。変更にはroot権限が必要です。my.cnfをviエディタで開きます。

[mysqld]character-set-server=utf8mb4
[client]default-character-set=utf8mb4
を追加(または変更)して保存(:wq)します。

XAMPPウィンドウからMySQLを再起動して設定を有効化します。

再度、MySQLモニタを起動します。

DBの文字コードを確認します。

設定変更後は以下のように表示されました。対象の項目の値が変更されました。

Variable_nameValue
character_set_clientutf8mb4
character_set_connectionutf8mb4
character_set_databaseutf8mb4
character_set_filesystembinary
character_set_resultsutf8mb4
character_set_serverutf8mb4
character_set_systemutf8
character_sets_dir/opt/lampp/share/charsets/

エンコーディング設定

既存のテーブルのエンコーディングを修正します。文字コードをutf8mb4、照合順序をutf8mb4_general_ci(アルファベットの大文字小文字は区別しない。他は全て区別)に変更します。

今後新たに作成するDBのデフォルトエンコーディングの設定方法は以下です。

今後新たに作成するテーブルのデフォルトエンコーディングの設定方法は以下です。

エンコード(エンコーディング)とは

データを別の形式に変換すること。符号化ともいう。通常は、人間が理解できる文字や音声、映像といったアナログ情報をコンピューターが認識できるデジタル情報に変換することを指す。音声や動画データの圧縮、データの暗号化などもエンコードにあたる。動画や音声では、再生に使う機器が対応している形式に変換する作業もエンコードと呼び、これらの変換に使うソフトウェアや機能はエンコーダーという。またエンコードされた情報を、人間が見たり、聞いたりできる情報に戻すことをデコードという。Webページや電子メールの文字化けは、エンコードとデコードの方式が異なる際に生じる。この場合、Webブラウザーやメールソフトのエンコードの設定で文字コードを変更すれば読めることがある。
出典:ASCII.jpデジタル用語辞典ASCII.jp

筆者
筆者
以上、MySQLモニタを起動してテーブルにデータを挿入(INSERT INTO)しようとしたら「Incorrect string value」エラーが表示され際の解決方法でした。