質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

artisan

artisanは、PHP Laravelフレームワークのコマンドの事です。 Artisanコマンドを使う事で、DBのテーブルやバンドル等を追加することができるコマンドです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

3113閲覧

Docker×Laravel8 / faker php artisan db:seed時のrealText(日本語)の文字化けを解消したい

jagaimo300

総合スコア20

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

artisan

artisanは、PHP Laravelフレームワークのコマンドの事です。 Artisanコマンドを使う事で、DBのテーブルやバンドル等を追加することができるコマンドです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/05/04 10:12

編集2021/05/04 17:28

使用環境

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' とすれば文字化けしない。
英語にした場合の結果

何卒宜しくお願い致します。

ucan-lab様のご回答を参考にさせていただき、解決に至りました。ありがとうございました。
修正後

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/05/04 10:36

Windowsのコマンドプロンプトではなく、既存のツールで確認したらどうなってるんでしょう。
jagaimo300

2021/05/04 12:30

docker にphpmyadminのイメージを入れてビルドしたところ、おっしゃるとおり日本語が正しく確認できました。ありがとうございます。 よろしければ高評価させていただきますので回答欄にコメントお願いいたします。
guest

回答1

0

ベストアンサー

ここで同じ問題について回答してます!
同様に設定してもらえれば解決すると思います。

Laravelでphp artisan db:seedのrealText(日本語)が文字化けし、英語は文字化けしない。

英語はマルチバイト文字じゃないので、文字化けは起こりません。

投稿2021/05/04 14:26

ucan-lab

総合スコア888

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jagaimo300

2021/05/04 17:39

初めまして、ucan-labさんの記事を拝見し、実運用予定の自分のブログサイトの制作に挑戦しております。 非常に有益な情報をありがとうございます。 そして、この度問題解決にいたることができました。 ハンズオンを実践してみてコマンドラインの魅力を知り、 出来ればコマンドラインベースで開発を進めたいと思い質問に至った次第でした。 過去記事見つけられず申し訳ございません。 ありがとうございました。 大変恐縮ではございますがGitHubフォローさせていただいてもよろしいでしょうか。
ucan-lab

2021/05/04 21:26

解決できてよかったです!! GitHubはフォローしていただいて構わないですよ!☺️
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問