Help us understand the problem. What is going on with this article?

mysqlの文字コードを変えたい。

やりたいこと

mysqlにデータ突っ込んだけど、???ばっかりになってしまって何も読めなかった。
文字コードが原因ぽかったので変えてみる。

Version

  • MYSQL
    mysql Ver 14.14 Distrib 5.7.19, for Linux (x86_64) using EditLine wrapper

  • docker
    version: '3'

文字コード確認

mysql> show variables like “chara%”;
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     | 
| character_set_connection | latin1                     | 
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     | 
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
Variable_name 意味
character_set_client クライアントから到達するステートメントの文字コード
character_set_connection クライアントから送信した文字の変換先
character_set_database デフォルトデータベースで使用される文字コード
character_set_filesystem ファイルシステムの文字コード
character_set_results クエリー結果をクライアントに返す際に使用される文字コード
character_set_server サーバの文字コード
character_set_system システムで使用する文字コード ※常にutf8
character_sets_dir 文字コード設定が保存されているフォルダの場所
  • cliant

    • character_set_client
    • character_set_connection
    • character_set_results
  • server

    • character_set_database
    • character_set_server
    • character_set_system

上記6つがそれぞれの文字コードの変更対象。

my.confで文字コード指定

※最初はutf8で指定していたけど、なぜか全く更新されず、utf8mb4を指定したらできた。
公式ではutf8指定して出来る的な事書いてあったけどなんでだろうポイント。

my.conf
# The MySQL  Client configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[mysql]
default-character-set=utf8mb4

[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
character-set-server=utf8mb4

[cliant]
character_set_client=utf8mb4
character_set_connection=utf8mb4
default-character-set=utf8mb4

テーブルを作り直す

mac> docker-compose exec workspace bash
workspace> php artisan migrate:refresh

docker上げ直す

dockerfileを編集しても、設定を毎回読んでいるわけではないのでupしても再読込されない。
dockerのimageを全削除して設定を再度読み込む

mac> docker-compose down —rmi all
mac> docker-compose up -d

できてるかな?

mysql内で確認

mysql> show variables like “chara%”;
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

OK!

docker buildでちょっとハマった

なぜかdockerのbuildをするとき、ImageMagickでコケた。
使う予定もないので削除してclear.
原因がわかったら追記したいけど力尽きた...

###########################################################################
# ImageMagick:
###########################################################################

USER root

ARG INSTALL_IMAGEMAGICK=false

RUN if [ ${INSTALL_IMAGEMAGICK} = true ]; then \
    apt-get install -y libmagickwand-dev imagemagick && \
    pecl install imagick && \
    docker-php-ext-enable imagick \
;fi

原因分からず出来てしまった箇所があるので、そこは今後要チェック。
間違っている所があれば指摘くださいmm

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away