- 締切済み
phpmyadmin の文字コード
現在xammpを利用して製作を進めています。 データベースに日本語を打ち込んだ際???と表示がされており原因を探ったところphpmyadmin の文字コードの問題だと行き着きました。 で、『サーバー接続照合順序』を utf8 に設定しようとしたのですが、なぜか強制的に utf8mb4 に変更されてしまいます。 表示は???のままです。 SET character_set_client = utf8; SET character_set_results = utf8; SET character_set_connection = utf8; をsqlに打ち込んでもやはりmb4になってしまいます。 なぜでしょうか?どのように対応したらいいですか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- agunuz
- ベストアンサー率65% (288/438)
列のcharsetがutf8mb4_general_ciであっても、utf8のクライアントからキチンと挿入できますし文字化けしたりはしません(そういう仕様です)。 (例) // テーブル定義 CREATE TABLE IF NOT EXISTS testtb ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(256) CHARACTER SET utf8mb4 NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB; // phpスクリプト <?php try { $pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', ''); $stmt = $pdo->prepare('insert into testtb (name) values (?)'); $stmt->execute(array('テスト1')); $stmt->execute(array('その2')); $stmt->execute(array('参番目')); // 以下同様に日本語の name を追加していく $stmt = $pdo->query('select * from testtb order by id'); while ($row = $stmt->fetch()) { printf('%s:%s<br>', $row['id'], $row['name']); } } catch (PDOException $e) { die($e->getMessage()); } 上記phpスクリプトでの表示はもちろん、phpMyAdminでもちゃんと確認出来ます。当然、スクリプトの文字セットをSJISにしてもEUC-JPにしても、charsetとしてcp932やujisを指定すれば何も問題ありません。 #逆に指定する文字セットを誤れば(実際の文字セットと #異なっていれば)確実に化けます。 接続しているクライアントの文字セットは何でしょうか?またその文字セットはちゃんとサーバに通知していますか?PDOならDSNで、MySQLiならmysqli_set_charsetで通知しているハズです。
- yambejp
- ベストアンサー率51% (3827/7415)
config.inc.phpに、以下を追記してみては? $cfg['DefaultConnectionCollation'] = 'utf8_general_ci'; $cfg['DefaultCharset'] = 'utf-8';
お礼
general_ciにはなるのですが やはりutf8mb4_general_ciになってしまいます。