前提・実現したいこと
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
あなたの回答
tips
プレビュー