PHP+MariaDBでDB連携(文字コード)

文字コードについては、すべてUTF8で統一で良いと思うので、OS側もDB側もPHP側もそのように設定する。

 

OSの設定

Linuxの場合

 「.bashrc」や「.bash_profile」などで、export LANG=ja_JP.utf8

 

Windowsの場合

 mysqlコマンドを実行する際のコマンドプロンプトのコードページをutf8にする。

 chcp 65001 [Enter]

 

MariaDBの設定

・my.ini (xampp\mysql\bin\my.ini) ※linuxでは、my.cnf

 [client]
 default-charcter-set=utf8
 [mysqld]
 init-connect=\'SET NAMES utf8\'
 collation_server=utf8_unicode_ci
 character_set_server=utf8
 skip-character-set-client-handshake
 character_sets-dir="F:/Program/xampp/mysql/share/charsets"

 

・DB作成

 DBをUTF8で作成すれば、その中に作るテーブルも自動的にUTF8になる。
 CREATE DATABASE db名 CHARACTER SET utf8;

 

PHPの設定

php.ini

 default_charset="UTF-8"

 

・DBアクセス時

 $mysqli->set_charset("utf8");

 

・HTML (PHPで生成するレスポンスHTML)

 <?php
 header('Content-Type: text/html; charset=UTF-8');
 ?>

 

予めDBに次のよう1レコード入れておき、

MariaDB [db002]> select * from tbl;
+----+-----------+
| id | name  |
+----+-----------+
| 6  | 日本語 |
+----+-----------+
1 row in set (0.00 sec)

MariaDB [db002]>


 次のようなPHPソースで、DBから取得した文字に、"だよ" を足して応答する。

<html>
<body>
<?php
$mysqli = new mysqli("localhost", "user001", "pass001", "db002");
$mysqli->set_charset("utf-8");
$result = $mysqli->query("SELECT name FROM tbl");
$loop=true;

echo "<html><body>\n";

while ($loop) {
 $row = $result->fetch_assoc();
 if ($row == Null) {
  break;
 } else {
  echo 'name=' . htmlentities($row['name']) . 'だよ<br>';
 }
}
$result->free();
$mysqli->close();

echo "</body></html>";
?>
</body>
</html>

 

  

---------------------------------------
 ■ITとことんのトップページ
  ┗■PHPのトップページ
    ┗■本ページ