73966


# 背景

MySQLで以下のようなテーブルを作成し、日本語でデータを挿入しようとしています。  
実装環境はAWS Cloud9とmysql5.7.33です。

[code]

    CREATE TABLE note (
      id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
      title VARCHAR(100)
    );
    
[/code]

# 問題

以下のようにデータを挿入しようとすると、文字変換のエラーが表示され、解決方法がわかりません。

[code]

    mysql> INSERT INTO note (title) VALUES("Python入門");
    ERROR 1366 (HY000): Incorrect string value: '\xE5\x85\xA5\xE9\x96\x80' for column 'title' at row 1
    mysql> show variables like "chara%";
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8                       |
    | character_set_connection | utf8                       |
    | character_set_database   | latin1                     |
    | character_set_filesystem | binary                     |
    | character_set_results    | utf8                       |
    | character_set_server     | latin1                     |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    8 rows in set (0.00 sec)
    
[/code]

# 試したこと

以下の文字列変換対策コマンドを実行し、mysqlは再起動して、上記の`utf8`が反映されていることを確認しました。

[code]

    $ sed -e "/utf8/d" -e "/client/d" -e "/^\[mysqld_safe\]$/i character-set-server=utf8\n\n[client]\ndefault-character-set=utf8" /etc/my.cnf |sudo tee /etc/my.cnf
    $ sudo service mysqld restart
    
[/code]

# 開発環境

[code]

    $ mysql --version
    mysql  Ver 14.14 Distrib 5.7.33, for Linux (x86_64) using  EditLine wrapper
    
[/code]


CC BY-SA 4.0
2021-02-12T11:22:54.650
73954
2021-07-20T02:09:26.767
2021-07-20T02:09:26.767
3060
question
mysql aws-cloud9
MySQLの文字変換のエラーでデータが挿入できない


`mysql> show variables like "chara%";`の結果に、  
`character_set_database`と`character_set_server`はまだlatin1ですね。  
それらもutf8にしてみたら？


CC BY-SA 4.0
2021-02-12T12:35:47.047
73956
2021-02-12T12:35:47.047
43877
73954
answer


`CREATE TABLE` 時に `CHARSET utf8mb4` を指定すればいいと思います。  
テーブルを作成する毎にいちいち指定するのが面倒な場合は、`CREATE DATABASE` 時に `CHARSET utf8mb4`
を指定しておけばいいです。  
<https://www.slideshare.net/tmtm/mysql-2017> このスライドが参考になるかも知れません。


CC BY-SA 4.0
2021-02-13T06:18:03.923
73966
2021-02-13T06:18:03.923
3249
73954
answer