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
スポンサーリンク







