ママのスキンケアのお悩みにおすすめアイテム

PHP5、MySQL5を使用しています。最近始めたばかりで参考書を購入して勉強しています。
購入した参考書には「PHPとMySQLの連携」という章があり読んでいくと、MySQL(コマンドライン)に日本語が表示されていました。
この本はMyAdminなどを使っていないので、PHPでフォームを作成してそれで日本語をMySQLに送信しているのだと思いやってみたのですが、データが入りません。英数字なら入るのですが、日本語になると入ってくれません。
設定が悪いのでしょうかそれとも私の書き方がいけないのでしょうか。

$ins = "INSERT INTO name VALUES('あじあ')";
$mq = mysql_query($ins);
このように書いたのですができませんでした。すみませんが、よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

#2です。


エラー出力はどうなっていますか?
echo mysql_error();
> カラム型はVARCHARにしてあります。
カラム長は大丈夫ですよね?マルチバイト文字ですので注意して下さい。

> クライアントの文字コードというと、METAタグで設定しているやつですか??
METAタグで指定するのは出力したときのブラウザに対してです。
PHPの文字コードは、
1. PHPファイルの文字コード(エディタで指定)
2. PHPの内部文字コード(php.ini等の環境設定の他、mb_internal_encoding()で指定可能)
3. いま扱っている文字コード(ファイル内で書いている場合は1.で指定したエンコード、DBから引っ張ってきたり、フォームで送信された場合はそこで指定された文字コード)
4. HTMLを出力するときの文字コード(先ほどのMETAタグ等で指定するものです)
等があります。いっぽう、MySQLでは、
1. サーバの基本文字コード(サーバの設定)
2. 記録する(されている)文字のエンコード(実際に記録しているデータのエンコード、必ずしも1と一致している訳ではありません)
3. クライアントの文字コード(PHPから取り扱う場合は1.のファイルの文字コードや2.の内部文字コードを指定します)
等があります。
うまく行っている場合はどうってことありませんが、うまく行かない場合はこれらの文字コードを意識しないといけません。
mb_inernal_encoding()、mb_detect_encoding()、mb_convert_encodign()等で指定したり検出したりしてみてください。
    • good
    • 0

> $ins = "INSERT INTO name VALUES('あじあ')";


> $mq = mysql_query($ins);
クエリはこれで大丈夫だと思います。
mysql_errorでエラーを確認してみて下さい。
echo mysql_error();

ところでnameのカラムの型は何になっていますか?int型等、テキストが入らない型になっている可能性が高いですが。
また、環境によってはMySQL5では接続時にクライアントの文字コードをセットする必要があるかもしれません。
mysql_query("SET NAMES sjis");//SJISの場合
のようなクエリをまず発行しなければならない可能性もあります。

参考まで。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

カラム型はVARCHARにしてあります。クライアントの文字コードというと、METAタグで設定しているやつですか??
初歩的で申し訳ありません。

お礼日時:2007/11/27 23:12

MySQL の Default Char Set が sjis になっているか、と


insert into name (カラム名) value(' .... ');
だったように思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
SHOW VARIABLES LIKE 'CHAR%'で調べたところ、sjisになっていました。Sjisではだめなのでしょうか?

お礼日時:2007/11/27 23:10

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qテーブルに日本語が登録できない

xampp1.6.6をインストールし、mysqlを使ってデータベースの勉強をしているのですが、
コマンドプロントからtableにデータを登録すると日本語のみ綺麗に弾かれます。

例えば

insert into test(sample1,sample2,sample3) values('test1','テスト','test3');

とすると「1 warnings」と表示され、テストのとこのみ空欄になります。

php、mysql共に文字コードをutf8にしたのですが、これが原因でしょうか?

解決方法よろしくお願いします。

Aベストアンサー

まず、Ano.2さんのおっしゃられるとおりWindowsのコマ
ンドプロンプトは「SJIS」しか対応していません。

1.Mysqlにログイン
2.データベース選択
3.「SHOW VARIABLES LIKE 'char%';」コマンドを入力
 ※ここで「character_set_filesystem」以外「UTF8」
  出ない場合、設定不足が考えられます。
  ・character_set_databaseがlatin1などのばあい・・・
   =>UTF8環境でデータベースを作成していますか?
4.「set names cp932;」を入力
5.「Insert into~」を実行

※上記環境はMySQL5.0.45上で確認しました。
※但し、MySQL5.x系とWindowsのコマンドプロンプトはあ
 まり整合性が取れていないらしく、PHPやPhpMyAdmin等
 で確認すると正常に格納されているデータでも、コマン
 ドプロンプト上では表示がおかしくなるケースがあり
 ます。
 私の場合、5.0.51環境では日本語が「半角記号、カナ」
 等に文字化け、5.0.45では、ファイルからアップロード
 した場合、日本語部分を表示させたりすると他部分の表
 示が欠損する場合がありました。

 XAMPP1.6.6ですと、MySQLは5.0.51だと思いますが、ご
 参考までに。

参考URL:http://oshiete1.goo.ne.jp/qa3786052.html

まず、Ano.2さんのおっしゃられるとおりWindowsのコマ
ンドプロンプトは「SJIS」しか対応していません。

1.Mysqlにログイン
2.データベース選択
3.「SHOW VARIABLES LIKE 'char%';」コマンドを入力
 ※ここで「character_set_filesystem」以外「UTF8」
  出ない場合、設定不足が考えられます。
  ・character_set_databaseがlatin1などのばあい・・・
   =>UTF8環境でデータベースを作成していますか?
4.「set names cp932;」を入力
5.「Insert into~」を実行

※上記環境はMySQL5.0.45上...続きを読む

QMySQL 日本語表示 日本語入力できない 

MySQL超初心者です。
XAMPPをインストールしてMySQLの勉強を始めたばかりです。

コマンドプロンプトで日本語入力ができません。
「基礎からのMySQL」という本の内容にそって進んでおり、文字コードの設定
character-set-server = sjis
#collation-server = latin1_general-ci
skip-character-set-client-handshake
もやりましたが、日本語が全く入力できません。

そもそもインストールやセットアップの段階で、画面に表示される日本語が文字化けして読めない状態でした。(ブラウザで日本語のウェブサイトを閲覧する際にもよく文字化けがおこります。グーグルクロームを使っています。)海外で購入したパソコン(eMachines, Windows XP)であることが問題なのでしょうか?何か設定が必要なのでしょうか?

コントロールパネルから言語の設定にて、日本語でキーボード入力できるようにしたので(Microsoft IME)、日常メールをするときなどの日本語入力の問題はありません。

以上よろしくお願いいたします。

MySQL超初心者です。
XAMPPをインストールしてMySQLの勉強を始めたばかりです。

コマンドプロンプトで日本語入力ができません。
「基礎からのMySQL」という本の内容にそって進んでおり、文字コードの設定
character-set-server = sjis
#collation-server = latin1_general-ci
skip-character-set-client-handshake
もやりましたが、日本語が全く入力できません。

そもそもインストールやセットアップの段階で、画面に表示される日本語が文字化けして読めない状態でした。(ブラウザで日本語のウェブサイト...続きを読む

Aベストアンサー

これはMySQLじゃなくコマンドプロンプト(cmd.exe)の問題では?

CONIME.EXE

を検索して自分に合ったサイトを見てください。

それとも単に

Alt + 半角/全角漢字

で日本語FPを起動していないだけどか。。。。

Q日本語のテーブル名、カラム名の定義について

以前、IBMのオフコンでシステム開発を行っていた時期があります。 転職して今はネットワークエンジニアとしての仕事に就いておりますが、必要に迫られて、社内の部門システムの開発を始めようと考えております。

そこで、社内の販売管理の SQL Server のテーブル名、カラム名を確認してみると全て日本語で定義されております。 確固たる根拠はないのですが、どうしても違和感を覚えてしまいます。

今回の開発目的は、部門内のこまごました業務のシステム化で、顧客管理、グループ間の作業依頼や履歴管理等で、Visual Studio .NET 2003 + SQL Server 2000 を使って私一人で開発を行う予定です。 Windows フォーム、Web フォーム(ASP.NET)も利用予定です。

さて、前置きが長くなってしまいましたが、以前は、外資系の会社にいて日本語利用不可のシステム(データベース)でしたので、何も考える必要がなかったのですが、今回の開発を始めるに当たって SQL Server のテーブル名、カラム名の定義を日本語を行った場合の利点、欠点、考慮点等があれば教えて頂きたくて質問しました。

販売されている業務アプリやグループウェアの SQL Server のテーブルやカラム定義を見ても日本語は今まで見かけたことがないのですが、プロの開発者としてのご意見が伺えれば幸いです。

以前、IBMのオフコンでシステム開発を行っていた時期があります。 転職して今はネットワークエンジニアとしての仕事に就いておりますが、必要に迫られて、社内の部門システムの開発を始めようと考えております。

そこで、社内の販売管理の SQL Server のテーブル名、カラム名を確認してみると全て日本語で定義されております。 確固たる根拠はないのですが、どうしても違和感を覚えてしまいます。

今回の開発目的は、部門内のこまごました業務のシステム化で、顧客管理、グループ間の作業依頼や履歴管理等で...続きを読む

Aベストアンサー

日本語を使うメリット?
漢字を使えばビジュアル的に見て分かりやすい?という人もいます。漢字の方が短いTEXT長で多くのことを伝えられる。
他の人にメンテナンスを頼む場合、初めて見たテーブル構成でも理解しやすい。

私の意見としては
DB名・TABLE名・項目名にあまり漢字は使わないほうです。
個人のデータベースなら良いとしても企業内のシステムで使うようなものであればDBの設計資料などをきちんと作るのが当然で設計資料等にこの項目はこの内容ですとちゃんと書かれているし書かれているべきだから。
項目名等を漢字にするメリットってあまり無いと思います。
この項目は何?となったら設計資料見れば済みますから。
設計資料を見ることを許していないフロントエンドを使う一般のユーザーにはバックエンドのDBの構成等が分からなくても関係ないですし。
SQLで日本語使うのめんどくさいのもありますけどネ。

Qlike句を使って日本語を検索する場合

初心者です。よろしくお願いします。

like '%日本語%'

のように検索をすると、拾える言葉と拾えない言葉があります。

たとえば、カタカナの「レ」など漢字の場合は「表」や「詐」などの言葉を検索しても拾えません。

対処法などありましたら是非、教えてください。
よろしくお願いします。

Aベストアンサー

同じ問題に直面して困っていたのですが,
私の環境では
 LIKE BINARY '%日本語%'
のようにすると上手くいきました.

下記URLも参考になると思います.

参考URL:http://www.mysql.gr.jp/mysqlml/mysql/msg/7140

Qリンクをクリックした時にformからPOST送信したい。

HTML、PHP、JavaScript等でサイトを作っているのですが・・・。

【実現出来ている例】
<form name="form1" method="post" action="Next.php" onSubmit="return InputCheck()">
 <input type="submit" value="送信">
</form>
 submitボタンを一つ置いて、それがクリックされた場合に
formの内容をPOSTで送信する。

【実現したい例】
<form name="form1 method="post">
 <a href="Next.php" onClick="???">???</a>
</form>
 formの中のリンクをクリックされた場合に、formの内容を
POSTで送信したいのですが、その実現方法がわかりません。
GETで送るという手もあり得ますが、今回はどうしてもPOST
したいのですが。

Aベストアンサー

<form name="form1" method="post" action="Next.php">
<a href="#" onClick="document.form1.submit();">???</a>
</form>

onclick内の対象がform1としてあてているので、
アンカータグは別にform内に記述しなくても大丈夫です

form内にhidden等でnameとvalueを持ったパラメータがあればそれも送られます

アンカータグから動的にvalueを変更したい場合は、
document.form1.hogename.value = 'hoge';
等をsubmit()の前に行えば可能です

ただしform内に
<input type="hidden" name="hogename" value="">
を記述する等、変更先パラメータの元を用意する必要がありますのでご注意下さい

Q起動しているサービスを確認するコマンド

初歩的な質問で恐縮ですが、ご教示いただけますと幸いです。

起動しているサービスを確認するために以下の2つのコマンドを打ってみるのですが、結果(出て来るサービス名)が違います。
このコマンドの違いについてご教示いただけますでしょうか。

(1)service --status-all
(2)chkconfig --list

Aベストアンサー

(1)service --status-all

サービスの現在のステータスを調べるコマンド

(2)chkconfig --list

OSのブート時に自動起動するサービスを調べるコマンド

違いが出るのは、
・ブート後に手動あるいは他のコマンドから起動したサービス
・ブート後に手動あるいは他のコマンドから、あるいはエラーで停止したサービス
・ブート後に実行はされるがすぐに停止して常駐しないサービス (ntpdate とか)

あるいは、(1)ではサービス名が表示されない物もあるので、どのサービスがどんなステータス出力をするのか知っておく必要もありますね。(service network statusとか)

Qページ間で変数を保持したい

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

今回はhtml間での値渡しについてお聞きしたいです。

現在ある二つのページA,Bを作成していまして、お互いにリンクが張ってあります。
AからBに行く時、Aの中にあるフォームの内容をBに表示したく外部jsファイルでグローバル変数に保持したりなどやってみましたがだめでした。

そもそもこのようなことをjavascriptのみでできるのでしょうか?
また可能ならばどのようにすればよいでしょうか?
ご教授お願いします。

Aベストアンサー

<form action="fB.html" method="get">
とした場合の例ですが、

以下のコードを参考にしてみてください。
------------------------------------------------------------
fA.html
------------------------------------------------------------
<html>
<head>
</head>
<body>
<form action="fB.html" method="get">
<input type="text" name="t" value="textA"></input>
<input type="hidden" name="h" value="hiddenA">
<input type="submit">
</form>
</body>
</html>
------------------------------------------------------------
fB.html
------------------------------------------------------------
<html>
<head>
<script type="text/javascript">
<!--
function init() {
var arr=Array();

var ss = "";
var querys=location.search;
if(querys) {
var q = querys.replace(/^\?/,'').split('&');
for(i=0 ; i<q.length ; i++){
var pair=q[i].split('=');
// arr[pair[0]]=pair[1];
ss += pair[0] + " = " + pair[1] + "\n";
}
}
alert(ss);
}

window.onload= init;

//--></script>
</head>
<body>
</body>
</html>

<form action="fB.html" method="get">
とした場合の例ですが、

以下のコードを参考にしてみてください。
------------------------------------------------------------
fA.html
------------------------------------------------------------
<html>
<head>
</head>
<body>
<form action="fB.html" method="get">
<input type="text" name="t" value="textA"></input>
<input type="hidden" name="h" value="hiddenA">
<input type="submit">
</form>
</b...続きを読む

QjavaでDBから取得したデータのJSP表示

JAVAでDBから取得し
ArrayList shikakuCdList = shikakuCd_Data();
request.setAttribute("shikakuCdList", shikakuCdList);

JSPでコンボボックスに表示しようと思います
<% ArrayList bumonlist = (ArrayList)request.getAttribute("bumonCdList");%>


<% for ( int i = 0; i < bumonlist.size(); i++ ){%>
<option value=" (1)ここの記述方法も  "></option>
<% }%>

という記述にしていますが、うまく動きません。
よろしくお願いします。

Aベストアンサー

><% for ( int i = 0; i < bumonlist.size(); i++ ){%>
><option value=" (1)ここの記述方法も  "></option>
><% }%>
この部分ですが、

もし、shikakuCd_Data()の返すArrayListの中身が
JavaBean(下記はTestBean)であれば、

<% for ( int i = 0; i < bumonlist.size(); i++ ){%>
<% TestBean test = (TestBean)bumonlist.get(i); %>
<option value="<%= test.ゲッター %>"></option>
<% }%>

もしくは、useBeanアクションをつかい、
coreライブラリのforEachタグを使って出力する方法もあります。
こちらの方法がお勧めですが。

Q2つの項目が重複するレコードを抽出する方法はありますか?

MySQL4.1で既存データに対し複合キーを新しく設定したいのですが、

ALTER TABLE `test` ADD PRIMARY KEY (`a`,`b`)

としても重複データが存在する為、作成できませんでした。

10万件あるテーブルから重複するレコードを手動で削除したいのですが、aとbが重複しているレコードだけ抽出するSQL文はありますでしょうか?

Aベストアンサー

select * from `test`
where (a,b) in(
select a,b from `test`
group by a,b
having count(*)>1)

Q日付型カラムへのデータINSERT

お世話になります。ひとつご教授ください。

オラクル10g, ojdbc14でjdk1.4.2から接続です。

INSERT命令を使ってテーブルにレコードを追加する際に、DATE型のカラムに対して

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27 12:00:00', ...);

を実行するとエラーORA-01861が出ます。そこで

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27', ...);

このように記述して再度実行すると通ります。

このようなとき、時間の部分まで設定した値をカラムに格納したいときはどうしたらよろしいでしょうか?

よろしくお願いします。

Aベストアンサー

ごめんなさい。
説明と文例が違ってしまいました。
正しくはこちらです。

INSERT TABLE_A (DATE1, ...) VALUES (to_date('2006-4-27 12:00:00','yyyy/mm/dd hh24:mi:ss'), ...);
というように、to_date関数を使うのが一般的かと思います。


人気Q&Aランキング