Mysql 日本語フィールド名 問題点回避方法。

Mysql 日本語フィールド名 がある場合 問題点回避方法。

環境 windows
PHP 5
Mysql 5.1.37

PHP5からMYSQLへSQL問い合わせしたときに、日本語周り(文字化け)を
経験した。

問題点を整理できた?様子なので覚書。
(問題が確認された環境は、Windowsにインストールした Mysql5.1サーバー。)
Mysqlのデータベース文字コードは、過去の流れからShift-JIS。
PHP5は文字コード::UTF8。

まず、はじめに今回問題点となった。Mysql のデータベース フィールド名に日本語を
使うことは、不必要な作業(悩み)をつくります。
本来データベース名、テーブル名、フィールド名は英数字であるべきです。
(自分は実行している。)
過去の設定を流用せざるを得ない場合(よくある)に参考になればです。

解決方法—-

mysqlの設定

my.ini
[mysql]
default-character-set=sjis
[mysqld]
default-character-set=sjis
skip-character-set-client-handshake

skip-character-set-client-handshake の設定を明記するのが重要。
MYSQLは4.1以降から、クライアントとの通信部分の文字コードも
自動変換しますが、このオプションで文字コードの自動変換機能を無効にします。
>MySQL 4.0 と同じになります。

参考::
http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ#content_1_55


PHPにて
PHPファイルは UTF8
mysql_query(‘set names UTF8’);
をおこなう。


ソース

<?php

$con = mysql_connect(“mysqlサーバー” , “useri” , “パス”) or
die (‘DB Connection Error= ‘. mysql_error());
mysql_query(‘set names utf8’);
mysql_select_db(“database”, $con) or die (‘DB Connection Error= ‘.
mysql_error());

$sql = “SELECT 日本語フィールド from table WHERE 日本語フィールド = ‘条件'”;

$result = mysql_query($sql,$con);
if ( $result == $FALSE ) { die(“Search Result: 0 items”); }
$num = mysql_num_rows($result);

print “”;
for ($i=0; $i<$num; $i++) {
$r = mysql_fetch_row($result);
print “$r[0]$r[1]$r[2]”;
}
print “”;
?>


もしくは

ソース
<?php
$mysqlconnect = mysql_connect(“mysqlserver”,”user”,”pass”);
mysql_select_db(“database”,$mysqlconnect);
mysql_query(‘set names sjis’);

$sql = “select * from table WHERE 日本語フィールド = ‘条件'”;

$sqlraw=mysql_query($sql,$mysqlconnect);
while ($row = mysql_fetch_object($sqlraw)) {
echo $row->日本語フィールド;

}

//メモリー開放
mysql_free_result($sqlraw);

print “”;
print “Done”;
?>

この記事を書いた人

大東 信仁

カンパチが好きです。

プロフィールはこちら

10月14日開催 参加者募集中
(画像をタップ→詳細へ)

ミッションナビゲート モニター
(画像をタップ→詳細へ)

広告