みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHPから、MySQL内に日本語名のテーブルを作成する事ができません。

PHPから、MySQL内に日本語名のテーブルを作成する事ができません。

いつも、お世話になっております。

小生、現在、WindowsXPSP3上で、Apache2.2.15とMySQL5.1.46とPHP5.2.13を使用し、PHPを勉強している、PHP初心者です。

今回質問させて頂きたいのは、PHPからMySQL内にデータベースを作成後、日本語名でテーブルを作成したいのですが、なぜか作成できません。

PHPのソースは以下の様になっています。

-----mysql.php-----
<?php
//MySQLに接続
$sql = mysql_connect('localhost', 'root', 'root');
if(!$sql){
print("MySQLに接続失敗" . "<br>\n");
mysql_close($sql);
die();
}
else{
print("MySQLに接続成功" . "<br>\n");
}

//DB作成
$create_db = 'CREATE DATABASE HUMAN';
if(mysql_query($create_db, $sql)){
print("DB作成成功" . "<br>\n");
}
else{
print("DB作成失敗" . "<br>\n");
mysql_close($sql);
die();
}

//DB選択
if(!(mysql_select_db("HUMAN"))){
print("DB選択失敗" . "<br>\n");
mysql_close($sql);
die();
}

//文字コードをutfに設定
mysql_query("set names utf-8");

//テーブル作成
$create_table = "CREATE TABLE 人間
(名前 VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
年齢 INT NOT NULL,
身長 VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
体重 VARCHAR(50) CHARACTER SET utf8 COLLATE uft8_general_ci NOT NULL,
職種 VARCHAR(50) CHARACTER SET utf8 COLLATE uft8_general_ci NOT NULL,
ENGINE = MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;";
if(mysql_query($create_table, $sql)){
printf("テーブル作成成功" . "<br>\n");
}
else{
print("テーブル作成失敗" . "<br>\n");
mysql_close($sql);
die();
}

//テーブルのデータを取得、表示
$select = "SELECT * FROM 人間";
if($result = mysql_query($select, $sql)){
print("データ取得成功" . "<br>\n");
}
else{
print("データ取得失敗" . "<br>\n");
mysql_close($sql);
die();
}

while($getdata = mysql_fetch_assoc($result)){
foreach($getdata as $output){
print($output . "<br>\n");
}
}

//MySQLにCOMMIT文送信
$commit = "COMMIT;";
if(mysql_query($commit, $sql)){
print("コミット成功" . "<br>\n");
}
else{
print("コミット失敗" . "<br>\n");
mysql_close($sql);
die();
}

//MySQLの接続終了
mysql_close($sql);
?>

以上です。
お忙しい中、申し訳ございませんが、先輩方ご教示宜しくお願い致します。

投稿日時 - 2010-04-29 02:56:50

QNo.5858743

すぐに回答ほしいです

質問者が選んだベストアンサー

ズバリ模範解答ではありませんが、私の試してみた限りです。
mysql_query("set names utf-8");を
mysql_query("set names utf8");に修正。

日本語部分をバッククォートで囲む。
ENGINE= の前でかっこが閉じていない。&カンマでつながっている。

$create_table = "CREATE TABLE `名前15` (
`名前` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`年齢` INT NOT NULL,
`身長` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`体重` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`職種` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
) ENGINE = MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;";

これで作成出来ました。
ただ、個人的にはトラブルの元なので日本語は使いたくないです。
(コマンドラインで作ったらテーブルが削除できなくなっちゃいました)

投稿日時 - 2010-04-29 17:14:27

補足

お礼を書き忘れたので、ここでお礼したいです。

本当にありがとうございました。

投稿日時 - 2010-04-29 19:04:38

お礼

kt_yukaさん、ご回答頂き誠にありがとうございます。

ご教示頂いた通り、コードを訂正し直し、memphisさんにご教示頂いた方法でphp.iniを書き直し、apacheを再起動しphpソースを実行してみたところ、見事に日本語のテーブルを作成する事が出来ました!!

ご教示頂き、心より感謝申し上げます!

投稿日時 - 2010-04-29 19:03:44

ANo.2

このQ&Aは役に立ちましたか?

13人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

デフォルトのキャラクタセットをutf8にしましたか?
my.ini を確認して下さい。

投稿日時 - 2010-04-29 07:07:07

補足

お礼を書き忘れたので、ここでお礼したいです。

本当にありがとうございました。

投稿日時 - 2010-04-29 19:05:04

お礼

memphisさん、ご回答頂き誠に感謝申し上げます。

memphisさんのご教示頂いた通り、php.iniを書き直しapacheを再起動し、コードを書き直してみたところ、見事、日本語のテーブルを作成する事ができました!

ご教示頂き、心から感謝申し上げます。

投稿日時 - 2010-04-29 19:00:33

あなたにオススメの質問