MySQLを使っていて、テーブルに行をinsertしようとしたらエラーになりました。
ERROR 1366 (HY000): Incorrect string value: ‘\xE3\x81\xBE\xE3\x81\x90…’ for column ‘name’ at row 1
使っている環境
ubuntu 20.04 LTS
MySQL ver 8.0.30
MySQLの文字コードの問題のようです。「SHOW VARIABLES LIKE 'chara%';」で確認すると、こうなってます。
character_set_database が latin1 になっているからエラーになっているようです。
ここを変えるために /etc/mysql/mysql.conf.d/mysqld.cnf に「character-set-server=utf8mb4」を追記してみたのですが、変わらない。どうやら既存テーブルがあると、その設定のままらしいです。
なので、いったん既存のテーブルを全部削除(drop)しました。
それから以下のコマンドを実行します。
ALTER DATABASE データベース名 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
こんな具合です。
mysql> ALTER DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; Query OK, 1 row affected (0.04 sec)
もう一度、MySQLの文字コードを確認します。
character_set_database が utf8mb4 になりました。
テーブルをcreateしなおして、エラーとなったinsert文を実行すると行の挿入ができました。