🐥

utf8とutf8mb4のちがい

2022/01/01に公開

結論

utf8は文字を1〜3バイトで表現する。
utf8mb4は文字を1〜4バイトで表現する。

例えば、一部の絵文字(✊とか)は4バイトなので、 utf8にするとDBへの保存時にエラー起きるらしい。
逆にutf8mb4にしておけば✊のような4バイト文字も保存できます。

Laravelのマイグレーションファイルにおいては以下のように書いて指定できる

    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
	    
	    # ここ!
            $table->string('name', 100)->collate('utf8mb4_general_ci');
	    
            $table->string('email', 100)->unique()->comment('メールアドレス');
            $table->string('password')->comment('パスワード');
            $table->timestamps();
        });
    }

参考
https://www.playfulit.net/articles/2018/09/13/UZwV7yw2pqhYCpiXdwZdWKEo/
https://penpen-dev.com/blog/mysql-utf8-utf8mb4/
https://qiita.com/mizuki_engineer/items/e3947782c00015613924
https://qiita.com/kazu56/items/6af85ffcf8d3954455ad

Discussion