

Symfony DoctrineのDBAL接続設定を書く
この記事は、構成と文章の整理に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バイトまで扱えるので、これらの文字も問題なく保存できる。