Docker MySQLで日本語を入力してEnterを押下しても反映されない（応急対応編）

:::note info
この記事は[miriwoお一人様 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/miriwo)の6日目の記事です
:::

# 概要

- Dockerコンテナで起動したMySQLのサーバーにてとあるカラムに日本語をinsertしようとしてターミナルで日本語入力後、Enterを押下したが入力できなかった。
- ひとまず今は応急対応として問題解決を優先する。別記事で恒久対応（Dockerコンテナ初回構築時の設定）などを記載するつもり。

# 解消までの経緯

- MySQLの設定の文字コードがおかしくなってないか確認した。読み込ませているmy.cnfは下記の様に記載されている。問題無さそう

    ```my.cnf
    [mysqld]
    character-set-server=utf8mb4
    
    [client]
    default-character-set=utf8mb4
    ```

- Dockerコンテナのlocaleがおかしくなってないか確認する。

    ```shell
    # locale
    LANG=
    LANGUAGE=
    LC_CTYPE="POSIX"
    LC_NUMERIC="POSIX"
    LC_TIME="POSIX"
    LC_COLLATE="POSIX"
    LC_MONETARY="POSIX"
    LC_MESSAGES="POSIX"
    LC_PAPER="POSIX"
    LC_NAME="POSIX"
    LC_ADDRESS="POSIX"
    LC_TELEPHONE="POSIX"
    LC_MEASUREMENT="POSIX"
    LC_IDENTIFICATION="POSIX"
    LC_ALL=
    ```

- LANGとLC_ALLが空になっている。これはあまりよろしく無さそう。ひとまず下記を実行して設定してみる。

    ```shell
    export LC_ALL="ja_JP.UTF-8"
    export LANG="ja_JP.UTF-8"
    ```

- １つ目を実行した時に下記のエラーが出た。どうやら指定したlocaleである`ja_JP.UTF-8`が存在しない模様である。

    ```
    # export LC_ALL=ja_JP.UTF-8
    bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8): No such file or directory
    ```

- 現在設定可能なlocaleを出力してみたら確かに`ja_JP.UTF-8`がなかった。

    ```
    # locale -a
    C
    C.UTF-8
    POSIX
    ```

- 下記の方法を参考にlocaleを追加と設定を行ったした。
    - [Debian/Ubuntuのロケールを日本語にする方法 Debianの場合](https://qiita.com/valzer0/items/db7639d8231bf5121297#debin%E3%81%AE%E5%A0%B4%E5%90%88)

- 日本語locale追加後は下記コマンドを実行してLC_ALLの設定を実施した。

    ```shell
    update-locale LC_ALL="ja_JP.UTF-8"
    ```

- もう一度Dockerコンテナのlocale情報を出力してみる

    ```
    # locale
    LANG=
    LANGUAGE=
    LC_CTYPE="ja_JP.UTF-8"
    LC_NUMERIC="ja_JP.UTF-8"
    LC_TIME="ja_JP.UTF-8"
    LC_COLLATE="ja_JP.UTF-8"
    LC_MONETARY="ja_JP.UTF-8"
    LC_MESSAGES="ja_JP.UTF-8"
    LC_PAPER="ja_JP.UTF-8"
    LC_NAME="ja_JP.UTF-8"
    LC_ADDRESS="ja_JP.UTF-8"
    LC_TELEPHONE="ja_JP.UTF-8"
    LC_MEASUREMENT="ja_JP.UTF-8"
    LC_IDENTIFICATION="ja_JP.UTF-8"
    LC_ALL=ja_JP.UTF-8
    ```

- 全体的にja_JP.UTF-8が設定されている模様である。
- 試してみたけどまだ解消しない。
- 下記を実行して再度LANGとLC_ALLを設定してみる。

    ```shell
    update-locale LC_ALL="ja_JP.UTF-8"
    export LC_ALL="ja_JP.UTF-8"
    export LANG="ja_JP.UTF-8"
    export LANGUAGE="ja_JP.UTF-8" 
    ```

- もう一度Dockerコンテナのlocale情報を出力してみる

    ```
    # locale
    LANG=ja_JP.UTF-8
    LANGUAGE=ja_JP.UTF-8
    LC_CTYPE="ja_JP.UTF-8"
    LC_NUMERIC="ja_JP.UTF-8"
    LC_TIME="ja_JP.UTF-8"
    LC_COLLATE="ja_JP.UTF-8"
    LC_MONETARY="ja_JP.UTF-8"
    LC_MESSAGES="ja_JP.UTF-8"
    LC_PAPER="ja_JP.UTF-8"
    LC_NAME="ja_JP.UTF-8"
    LC_ADDRESS="ja_JP.UTF-8"
    LC_TELEPHONE="ja_JP.UTF-8"
    LC_MEASUREMENT="ja_JP.UTF-8"
    LC_IDENTIFICATION="ja_JP.UTF-8"
    LC_ALL=ja_JP.UTF-8
    ```

- 解決した。日本語を入力する事ができた。

![export_LC_ALL_ja_JP_UTF-8_•_Untitled-1_—_project.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/8cfbbbec-263c-70ab-ea55-0ca62c3fc19b.png)


# 参考文献

https://motomotosukiyaki.com/cant-input-japanese-in-mysql

https://qiita.com/aosho235/items/58e2e7acd5c2ee3641ff

https://dev.mysql.com/doc/refman/8.0/ja/charset-unicode-utf8mb4.html