MySQLで文字化けを防ぐ方法
MySQLで文字化けを防ぐには、SQLの実行前に次のSQLを実行します。
SET NAMES utf8
[参考記事] SET NAMESで文字セットを変更することは推奨されません
CakePHPでは、app/config/database.phpのDB接続設定に
'encoding'=>'文字コード'
を追加します。
これを追加することで、DB接続直後にSET NAMESが実行されます。
具体的には次のようになります。
class DATABASE_CONFIG { var $default = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'user', 'password' => 'password', 'database' => 'dbname', 'port' => '3306', 'prefix' => '', 'encoding' => 'utf8' ); }
この設定をすることで
/cake/libs/model/datasources/dbo/dbo_mysql.php
で、次のようにSET NAMESが実行されます。
/** * Connects to the database using options in the given configuration array. * * @return boolean True if the database could be connected, else false */ function connect() { $config = $this->config; $this->connected = false; if (!$config['persistent']) { $this->connection = mysql_connect($config['host'] . ':' . $config['port'], $config['login'], $config['password'], true); $config['connect'] = 'mysql_connect'; } else { $this->connection = mysql_pconnect($config['host'] . ':' . $config['port'], $config['login'], $config['password']); } if (mysql_select_db($config['database'], $this->connection)) { $this->connected = true; } if (!empty($config['encoding'])) { $this->setEncoding($config['encoding']); } $this->_useAlias = (bool)version_compare(mysql_get_server_info($this->connection), "4.1", ">="); return $this->connected; }
/** * Sets the database encoding * * @param string $enc Database encoding */ function setEncoding($enc) { return $this->_execute('SET NAMES ' . $enc) != false; }
関連記事
- 複数カラムのユニーク制約バリデーション
- 標準のValidatorを拡張してカスタマイズする方法
- テンプレート(template)側でログイン情報を取得する方法
- フォームの必須エラーメッセージをHTML5標準にする方法、カスタマイズする方法
- 標準のHelperを拡張してカスタマイズする方法 CakePHP2
- 国際化i18n(多言語化)
- URLをハイフン区切りからアンダーバー区切りやキャメルケースにする方法
- CakePHP5系の入手方法・インストール方法
- CakePHP4系の入手方法・インストール方法
- CakePHP3系の入手方法・インストール方法
- CakePHP2系の入手方法・インストール方法
- CakePHP1系(CakePHP1.3)をPHP7・PHP8以降に対応させる方法
- CakePHP1系(CakePHP1.3)の入手方法・インストール方法
- Composerコマンドでウクライナへのメッセージが表示されたことがあります
- Composerをインストールする方法と使い方
- コーディング規約のチェックを行う・整形する標準ツール(PHP CodeSniffer)の使い方
- Seedの実行順(外部キー制約などを先に実行させる方法) Foreign key violation
- PostgreSQLでERROR: duplicate key value violates unique constraint "hoge_pkey" DETAIL: Key (id)=(10) already exists.と出る場合
- PostgreSQLで自動採番をするシーケンス(sequence)とは【AUTO INCREMENT】
- Apacheで所有権や書き込み権限があるにも関わらずPermissions deniedが出る場合
- CakePHPのバージョンごとのシステム要件
- 1つのフィールドにバリデーションエラーを1つだけ表示させる方法
- PHP Strict Standards: Non-static method と出る場合の対処法
- CakePHPでカラムを比較してSELECTする方法
- [CakePHPのバグ]キャッシュ処理でunlinkエラーが発生する
- 『id』以外のプライマリキーのカラム名を使用する方法
- [CakePHPのバグ]キャッシュ処理でunserializeエラーが発生する
- プライマリキーIDを連番数字ではなく推測しにくい文字列にする方法
- 複数のデータベースを切り替える方法(別データベースを使用する)
- action名にlistは使えない listを使う方法
- ログイン認証処理をする方法
- CakePHP、Symfony、Zend Frameworkの比較
- CakePHPのDB接続情報設定
- ファイル読み込みPATHを設定
- デバッグレベルを設定
- セキュリティレベルの設定
- キャッシュを有効にする
- CakePHPのエラーテンプレートの一覧
- データベーステーブルを参照しないページを作る
- TOPページはIndexControllerではない Cannot redeclare config()
- ディレクトリ構成
- CakePHP
スポンサーリンク