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

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

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

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

Laravel

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

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

PHP

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

Q&A

0回答

926閲覧

Laravel5.2でmysqlのcharsetをutf8からutf8mb4に変更した場合の影響について【MYSQL】

yuukihayashi

総合スコア147

MySQL

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

Laravel

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

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

PHP

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

0グッド

0クリップ

投稿2020/05/08 13:34

前提・実現したいこと

laravel5.2はデフォルトでmysqlのcharsetがutf8で構成されていますが、
今回、一部のカラムで4バイト文字を使いたくcharsetをutf8mb4に変更しました。
そのままではカラムのみutf8mb4に変更されているのみで、laravelからsqlクエリを発行する場合に、デフォルトのcharsetである「utf8」を変更する必要があります。
なので、config/database.phpのcharsetもutf8mb4に変更し、無事に4バイト文字が登録できるようになりましたが、
この変更によるutf8で設定されている(今回charsetを変更していないもの)テーブル・カラムに対する影響を知りたいです。

疑問点として、Laravelのconfig/database.phpのcharsetをutf8mb4に変更してもutf8で設定されているテーブルの情報は編集・取得できますが、utf8mb4にはutf8に対する互換性?があるのでしょうか?
公式の文献等あれば嬉しいです。

何卒ご回答頂ければ幸いです。よろしくおねがいいたします。

変更したコード

①charset,collationオプションをutf8mb4に変更
config/database.php

php

1 'connections' => [ 2 'mysql' => [ 3 'host' => env('DB_HOST', 'localhost'), 4 'driver' => 'mysql', 5 'port' => env('DB_PORT', '3306'), 6 'database' => env('DB_DATABASE', 'forge'), 7 'username' => env('DB_USERNAME', 'forge'), 8 'password' => env('DB_PASSWORD', ''), 9 'charset' => 'utf8mb4', ※utf8から変更 10 'collation' => 'utf8mb4_unicode_ci',※utf8_unicode_ciから変更 11 'prefix' => '', 12 'strict' => false, 13 'engine' => null, 14 ],

②booksテーブルの特定のカラム(creator)に対しutf8mb4へ変更するマイグレーション作成

php

1<?php 2 3use Illuminate\Database\Schema\Blueprint; 4use Illuminate\Database\Migrations\Migration; 5 6class EditCharsetPhotosTable extends Migration 7{ 8 /** 9 * Run the migrations. 10 * 11 * @return void 12 */ 13 public function up() 14 { 15 DB::unprepared('ALTER TABLE books MODIFY `creator` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci'); 16 } 17 18 /** 19 * Reverse the migrations. 20 * 21 * @return void 22 */ 23 public function down() 24 { 25 DB::unprepared('ALTER TABLE books MODIFY `creator` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci'); 26 } 27}

補足情報(FW/ツールのバージョンなど)

Laravel5.2
php7.3

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

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

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

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

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

m.ts10806

2020/05/08 13:54 編集

「utf8mb4 utf8 違い」とか「utf8mb4 utf8 互換性」で出てきませんか?
yuukihayashi

2020/05/08 14:05

ご回答ありがとうございます。 utf8mb4とutf8の違いを述べている記事は多く見つかりましたが、互換性についての記事があまり見つからず・・・。
m.ts10806

2020/05/08 14:06

データバックアップとっておいてやってみても良いかと思います。 INSERT文で持っておけば、なんとかなることもあります(ならないこともないわけではないですが)
yuukihayashi

2020/05/08 14:20

ご回答ありがとうございます。 一応今回変更してないutf8で設定されてるテーブルに対してinsert等可能なことを確認しているのですが、laravelのconfig/database.phpのcharsetがutf8mb4で設定されてるのになんでできるのかがわからなくてもやもやしてるんですよね。。
m.ts10806

2020/05/08 14:39

いえ、回答ではなく、「質問への追記修正依頼」のコメントです。 試してみた結果を追記してもらいたいのと、もしかしたら具体的なアドバイス無くても自己解決できるんじゃないかと思ってコメントしてます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問