Docker公式イメージのmysqlの文字コードを変更する方法
はじめに
Dockerを使ってrailsでSNSアプリを作成していたところ、日本語をmysqlデータベースに保存しようとするとエラーがでてしまいました。原因を模索していると、mysqlの文字コードがデフォルトでlatin1になっていたためでした。
latin1は日本語未対応みたいですね。
参考:Latin-1のアスキーコード表
mysqlの文字コードを日本語対応のutf8mb4に変更する
DockerHubからmysql公式イメージのDescriptionによると、
引用元:DockerHub mysqlについてのDescription
Configuration without a cnf file
Many configuration options can be passed as flags to mysqld. This will give you the flexibility to customize the container without needing a cnf file. For example, if you want to change the default encoding and collation for all tables to use UTF-8 (utf8mb4) just run the following:$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
本来mysqlの文字コードを設定する場合、mysqlを設定するcnfファイルを編集する必要があるが、cnfファイルの編集をせず、上記のようにコマンドを実行することでmysqlの文字コードをカスタマイズできるようですね。
mysqlの文字コード設定方法
docker-compose.ymlファイルを以下のように編集しました。
version: '3'
services:
db:
image: mysql:5.7
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
environment:
MYSQL_DATABASE: with_exo_development
MYSQL_ROOT_PASSWORD: dbpass
MYSQL_USER: dbuser
MYSQL_PASSWORD: dbpass
ports:
- "3306:3306"
web:
build:
context: .
dockerfile: Dockerfile
command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
tty: true
stdin_open: true
depends_on:
- db
ports:
- "3000:3000"
volumes:
- .:/app
dbのcommand部分を追記しました。
最後に
今回、文字コードをutf8ではなくutf8mb4にした理由は、絵文字もデータベースに保存できるようにするためです。
Author And Source
この問題について(Docker公式イメージのmysqlの文字コードを変更する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/yusei_boxing/items/524cf3504c7c0fc95ca0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .