phpMyAdminで新規DB作成時、utf8mb4_unicode_ciを最初からselectedにしたい

PHP
※当サイトはアフィリエイト広告を掲載しています。

私は普段、開発環境でMySQLのデータベースを作る場合、phpMyAdminで作成しています。簡単で早いですからね。

「新規作成→紹介順序をutf8mb4_unicode_ci選択→作成」でOK!これまで何も疑わずにやってきました。

でも、utf8mb4_unicode_ci選ぶのめんどくない!?ということに気づいてしまいました。これが最初から選択されていればもっと早いはず……ということで考えてみました。

結論

DBの内部文字セットがlatin1になっていたためです。結論だけ知りたい方は、以下をMySQLの設定ファイルに記載すればOKです。

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

すでに[mysqld]があると思いますので、その中のブロックに2行分追記します。

設定ファイルはmy.cnfまたはmy.iniなど、環境により異なります。

最初からutf8になっている前提だったので気づきませんでした(PCが新しいものだったので設定を忘れていたようです。)。

これより先は、私の見当外れの考えから結論に至った流れをメモっておきます。

思考の流れも訓練だと思うので、何かの役に立つかもと思い恥をさらしておきます。また、先ほどの2行の設定の違いにも触れたいと思います。

解決までの試行錯誤の流れ

phpMyAdminの設定

最初はphpMyAdmin側の問題かと思い、設定ファイルであるconfig.inc.phpをいじれば解決だなと気軽に取りかかったのが始まりです。

いろいろと調べてみましたが、以下のような設定が効果がありそうです。

 $cfg['DefaultConnectionCollation'] = 'utf8mb4_unicode_ci';
 $cfg['DefaultCharset'] = 'utf8mb4';
 $cfg['ServerDefaultCollation'] = 'utf8mb4_unicode_ci';

しかし効果は無く、指定は削除しました。

強制的にselectedにする

次に、じゃあselectedにすればいいじゃないと、対症療法的な考えが浮かびました。

表示部分のテンプレートtemplates\server\databases\index.twigをいじれば解決しそうです。

該当ループの部分を以下の様にして、いったんutf8mb4_unicode_ciが表示されるようになりました(真似しないで下さい)。

{% if charsets is not empty %}
  <div class="col-12">
    <select lang="en" dir="ltr" name="db_collation" class="form-select" aria-label="{% trans 'Collation' %}">
      <option value="">{% trans 'Collation' %}</option>
      <option value=""></option>
      {% for charset in charsets %}
        <optgroup label="{{ charset.name }}" title="{{ charset.description }}">
          {% for collation in charset.collations %}
            <option value="{{ collation.name }}" title="{{ collation.description }}"
              {% if collation.name == 'utf8mb4_unicode_ci' %} selected{% endif %}>
              {{- collation.name -}}
            </option>
          {% endfor %}
        </optgroup>
      {% endfor %}
    </select>
  </div>
{% endif %}

ですが今さらですが、できあがったHTMLソースを見るとたしかにutf8mb4_unicode_ciが選択(selected)されているのですが、latin1_swedish_ciselectedされています。

Lara
Lara

あ……MySQL側の問題かも

とここで思いいたりました。対症療法は成功していますが、こうなると気持ち悪いので修正を戻します。

MySQLの設定確認

phpMyAdminから以下のSQLを投げます。

SHOW VARIABLES LIKE 'character_set_%';

latin1……でてますね。


SHOW VARIABLES LIKE 'collation%';

これもlatin1_swedish_ci出てます……。

これでMySQL側の問題であることがほぼ確定しました。

MySQLの設定ファイル修正

ここで冒頭の結論に向かうのですが、まずは以下だけでやってみました。

[mysqld]
character-set-server=utf8mb4

これだけだと以下の様になり、DB制作時のseledctedが、latin1_swedish_ciからutf8mb4_general_ciに変わりました。

あいまい検索など便利な時もあるのでutf8mb4_general_ciもたまに使いますが、結論として冒頭の通り以下としました。

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

これで意図したようになりました!

まとめ

紆余曲折を経て、デフォルトの紹介順序をutf8mb4_unicode_ciに変更できました。

これで、5秒くらい早くDBを作成できるでしょうか!?本ページの結論だけ実施すれば、5分でできることですから、60回DBを作れば元を取れますね!

私は1時間ほどあれやこれや格闘したので、720回DBを作れば元がとれそうです。……ちょっと元を取れないかもです。

まあ試行錯誤の経験&知識分を得たので、良しとしましょう!

コメント

タイトルとURLをコピーしました