使用環境
Windows10 home
・Docker 3.8
(docker-compose version 1.29.0)
[Dockerの構成] (docker-compose.yml)
MySQL - 8.0.24
nginx - 1.18-alpine
[PHPフレームワーク]
Laravel - 8.40.0
前提
・Dockerfileを参照してbuidする。
・Laravelでphp artisan db:seedのrealText(日本語)が文字化けし、英語は文字化けしない。
起きている不具合
各ファイル
Dockerfile - mysql
Dockerfile
1 2FROM mysql/mysql-server:8.0 3 4ENV MYSQL_DATABASE=blogs \ 5 MYSQL_USER=foo \ 6 MYSQL_PASSWORD=hoge \ 7 MYSQL_ROOT_PASSWORD=hoge \ 8 TZ=Asia/Tokyo 9 10COPY ./my.cnf /etc/mysql/conf.d/my.cnf 11RUN chmod 644 /etc/mysql/conf.d/my.cnf
my.cnf
my.cnf
1[mysqld] 2# character set / collation 3character_set_server = utf8mb4 4collation_server = utf8mb4_0900_ai_ci 5 6# timezone 7default-time-zone = SYSTEM 8log_timestamps = SYSTEM 9 10# Error Log 11log-error = mysql-error.log 12 13# Slow Query Log 14slow_query_log = 1 15slow_query_log_file = mysql-slow.log 16long_query_time = 1.0 17log_queries_not_using_indexes = 0 18 19# General Log 20general_log = 1 21general_log_file = mysql-general.log 22 23[mysql] 24default-character-set = utf8mb4 25 26[client] 27default-character-set = utf8mb4
Laravel
config\app.php
PHP
1 2~~略~~ 3 'faker_locale' => 'en_US', 4~~略~~ 5↑これを 6 7~~略~~ 8 'faker_locale' => 'ja_JP', 9~~略~~ 10↑としたときに化ける 11
Models\Blog.php
PHP
1<?php 2 3namespace App\Models; 4 5use Illuminate\Database\Eloquent\Factories\HasFactory; 6use Illuminate\Database\Eloquent\Model; 7 8class Blog extends Model 9{ 10 use HasFactory; 11} 12
migrations/2021_05_04_093843_create_blogs_table.php
PHP
1<?php 2 3use Illuminate\Database\Migrations\Migration; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Support\Facades\Schema; 6 7class CreateBlogsTable extends Migration 8{ 9 /** 10 * Run the migrations. 11 * 12 * @return void 13 */ 14 public function up() 15 { 16 if (!Schema::hasTable('blogs')) 17 { 18 Schema::create('blogs', function (Blueprint $table) { 19 $table->increments('id'); 20 $table->string('title',100); 21 $table->text('content'); 22 $table->string('category'); 23 $table->timestamps(); 24 }); 25 } 26 } 27 28 /** 29 * Reverse the migrations. 30 * 31 * @return void 32 */ 33 public function down() 34 { 35 Schema::dropIfExists('blogs'); 36 } 37}
database\factories\BlogFactory.php
PHP
1<?php 2 3namespace Database\Factories; 4 5use App\Models\Blog; 6use Illuminate\Database\Eloquent\Factories\Factory; 7 8class BlogFactory extends Factory 9{ 10 /** 11 * The name of the factory's corresponding model. 12 * 13 * @var string 14 */ 15 protected $model = Blog::class; 16 17 /** 18 * Define the model's default state. 19 * 20 * @return array 21 */ 22 public function definition() 23 { 24 return [ 25 'title'=> $this->faker->word, 26 'content'=> $this->faker->realText, 27 'category'=> $this->faker->word 28 ]; 29 } 30}
DatabaseSeeder.php
PHP
1<?php 2 3namespace Database\Seeders; 4 5use Illuminate\Database\Seeder; 6use Illuminate\Database\Eloquent\Factories\HasFactory; 7 8 9class DatabaseSeeder extends Seeder 10{ 11 /** 12 * Seed the application's database. 13 * 14 * @return void 15 */ 16 public function run() 17 { 18 \App\Models\Blog::factory(10)->create(); 19 } 20} 21
確認
mysql
1mysql> show variables like 'character%'; 2+--------------------------+--------------------------------+ 3| Variable_name | Value | 4+--------------------------+--------------------------------+ 5| character_set_client | latin1 | 6| character_set_connection | latin1 | 7| character_set_database | utf8mb4 | 8| character_set_filesystem | binary | 9| character_set_results | latin1 | 10| character_set_server | utf8mb4 | 11| character_set_system | utf8mb3 | 12| character_sets_dir | /usr/share/mysql-8.0/charsets/ | 13+--------------------------+--------------------------------+ 14
どうやら latin1 となっている。
character_set_system が utf8mb3 というのも気掛かりです。
やってみたこと
・参考にさせていただいた記事
上記の記事を参考に
my.cnfのcollation_serverをutf8mb4_ja_0900_as_cs_ksに変更。
コンテナ、イメージ、ボリュームを破棄し、再ビルドするも変わりなし。
・前述の通りconfig\app.phpを 'faker_locale' => 'en_US' とすれば文字化けしない。
・
何卒宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー