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; }
関連記事
- 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
- MySQL
- MySQLでdatetime型(日時)を日付で抽出するSQLの速度比較
- 日付と時刻型(データ型)のまとめ
- WordPressのインストール
- Symfony PropelでのMySQLの設定方法
- Ruby on Railsのマイグレーションの型とMySQLの型の対応表
- Got a packet bigger than 'max_allowed_packet' bytes
- OpenPNE3のサーバ移行の方法
- MySQLサーバに接続できるかどうかを確認する
- MySQLのログファイル ログの種類と保存先
- DB設計を見直してEC-CUBEを高速化する
- MySQLでクエリーをログに記録する方法
スポンサーリンク