Symfony DoctrineのDBAL接続設定を書く

  • Symfony
  • Doctrine
  • MySQL
  • PHP

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

Symfonyでdoctrine/dbalのMySQL接続設定を書くときのメモ。config/packages/doctrine.yaml の doctrine.dbal 以下に書く。

doctrine:
dbal:
driver: pdo_mysql
host: 127.0.0.1
dbname: database_name
port: 3306
user: user_name
password: password
charset: utf8mb4
default_table_options:
collate: utf8mb4_general_ci
row_format: Dynamic

接続設定の各項目

  • driver: 使用するドライバ。MySQLに接続する場合は pdo_mysql。
  • host: 接続先のホスト。ローカルなら 127.0.0.1、環境によってはDBサーバーのホスト名やDocker Composeのサービス名になる。
  • port: 接続先のポート。MySQLのデフォルトは 3306。
  • dbname: 接続するデータベース名。
  • user / password: 接続に使うDBユーザーとパスワード。パスワードは平文で書かず、env変数経由(%env(DATABASE_URL)%など)にするのが普通。
  • charset: 接続時の文字コード。utf8mb4 を指定しておく。

default_table_options

default_table_options はDoctrineがテーブルを作成する際(マイグレーションやスキーマ生成時)のデフォルトオプション。

  • collate: charset に合わせて utf8mb4_general_ci (もしくは utf8mb4_unicode_ci) を指定。
  • row_format: Dynamic はInnoDB + utf8mb4の組み合わせなら特に問題ない。

ここで指定した値は、あくまでDoctrine経由でテーブルを作る場合のデフォルト。既存DBのDB・テーブル・カラムのcharsetが実際にutf8mb4になっているかは別途確認が必要。

補足: charsetのutf8とutf8mb4

MySQLの utf8 は実質3バイトまでしか扱えないエイリアスで、絵文字や一部の漢字(サロゲートペア文字)は保存できない。utf8mb4 は4バイトまで扱えるので、これらの文字も問題なく保存できる。