MYSQLについて質問です。初歩的な質問なのですが半角英字+半角スペースをデータベースに追加すると半角スペース前の文字列しか追加できません。例えばYamada Tarouと追加したいのにYamadaのみ追加となります。追加のSQL分を発行する前に変数をチェックしましたがYmada Tarouと入っています。フィールドはvarchar型です。

回答の条件
  • 1人5回まで
  • 登録:2006/10/12 15:13:23
  • 終了:2006/10/16 09:35:18

ベストアンサー

id:Mook No.4

Mook回答回数1312ベストアンサー獲得回数3912006/10/12 18:23:24

ポイント100pt

的外れでしたら、今回・前回の回答ともポイントは不要です。

提示された SQL の name の部分が varchar(30)で宣言されており、入力データは'Yamada Tarou' となっており、データ挿入は成功しているにもかからず、実行後に内容を確認したときに 'Yamada' となっているということでしょうか。

(登録を行っているのは PHP あたりですか。環境やバージョンなどの情報もあると良いと思います。)


こちらで、簡単なテーブルを作成して実験してみましたが、スペースをはさんでも、文字列は問題なく登録されましたし、また単語の後ろにスペースがあった場合も試してみましたが、削除されることなく全体が登録されました。

(MySQL Version 5.0.22 Query Browser)

一点気になったのですが、文字列の前後はダブルコーテーションですが、シングルコーテーションに変えても、同様でしょうか。Query Browser では、ダブルコーテーションでは、エラーになりました。

PHP でしたら、

$sql = "INSERT INTO tblarchitect (name) VALUES ('$name')";

のような感じで、書けると思います。

id:moks

解決しました。rnameを次のPHPファイルへ継続的に渡しているのですがその過程でスペース以下が省略されていました。チェックしていた変数は渡す前の変数でした。お騒がせしました。色々調べて頂きありがとうございました。

2006/10/16 09:32:41

その他の回答(4件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982006/10/12 15:21:06

ポイント15pt

http://dev.mysql.com/doc/refman/4.1/ja/char.html

VARCHAR 型の値は、必要な文字と、長さを記録するための 1 バイトのみで格納されます。値に埋め込み処理が行われることはありません。値の格納時、後続のスペースは削除されます

仕様なので 最後に 1文字付与したほうがいいでしょう。

セットするときに 1文字付与

取り出したときに 最後の1文字カット としたらいいですね。

id:moks

解決しました。ありがとうございました。

2006/10/16 09:33:48
id:tadashi0805 No.2

tadashi0805回答回数287ベストアンサー獲得回数292006/10/12 15:37:58

ポイント15pt

変数に入っている値をクエリ文字列に加える時に、" "や' 'で変数値を囲みましたでしょうか?

id:moks

解決しました。ありがとうございました。

2006/10/16 09:34:01
id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912006/10/12 15:41:47

ポイント15pt

今回のケースは単語と単語の間にあるスペースなので、基本的には問題ないと思うのですが、varchar のサイズは格納データに対して十分大きなサイズになっているでしょうか。


また格納された結果を、ツール等で直接確認する手段はありませんか?


データは格納できていても、表示部分で値の全体を表示できていないという可能性はないでしょうか。


できれば、insert や表示部の SQL文を提示いただいたほうが、適切なアドバイスができるかと思います。

id:moks

回答ありがとうございます。格納されたデータはMySQL Command Line Clientを使用しテーブルの全データ表示にて確認しました。varcharのサイズは30確保していますので問題ないかと思います。

インサートのSQL文は下記のようにしています。

$sql = "INSERT INTO tblarchitect

(name, rname, posision, zip, address, tel, fax, url, mail, areaid, info, expertiseid1, expertiseid2,expertiseid3, expertiseid4, photofilename, prphotofilename, regdate)

VALUES

(\"$name\", \"$rname\", \"$posision\", \"$zip\", \"$address\", \"$tel\", \"$fax\", \"$url\", \"$mail\", $areaid, \"$info\", $expertiseid1, $expertiseid2, $expertiseid3, $expertiseid4, \"$imagefile1\", \"$imagefile2\", CURDATE())";

2006/10/12 16:27:16
id:Mook No.4

Mook回答回数1312ベストアンサー獲得回数3912006/10/12 18:23:24ここでベストアンサー

ポイント100pt

的外れでしたら、今回・前回の回答ともポイントは不要です。

提示された SQL の name の部分が varchar(30)で宣言されており、入力データは'Yamada Tarou' となっており、データ挿入は成功しているにもかからず、実行後に内容を確認したときに 'Yamada' となっているということでしょうか。

(登録を行っているのは PHP あたりですか。環境やバージョンなどの情報もあると良いと思います。)


こちらで、簡単なテーブルを作成して実験してみましたが、スペースをはさんでも、文字列は問題なく登録されましたし、また単語の後ろにスペースがあった場合も試してみましたが、削除されることなく全体が登録されました。

(MySQL Version 5.0.22 Query Browser)

一点気になったのですが、文字列の前後はダブルコーテーションですが、シングルコーテーションに変えても、同様でしょうか。Query Browser では、ダブルコーテーションでは、エラーになりました。

PHP でしたら、

$sql = "INSERT INTO tblarchitect (name) VALUES ('$name')";

のような感じで、書けると思います。

id:moks

解決しました。rnameを次のPHPファイルへ継続的に渡しているのですがその過程でスペース以下が省略されていました。チェックしていた変数は渡す前の変数でした。お騒がせしました。色々調べて頂きありがとうございました。

2006/10/16 09:32:41
id:ito-yu No.5

ito-yu回答回数323ベストアンサー獲得回数142006/10/15 23:45:25

ポイント15pt

「追加のSQL分を発行する前に変数をチェックしましたがYmada Tarouと入っています。」と書いていますが、SQL文自体を表示してチェックされることをおすすめします。

SQLに入れている変数名を間違えているかもしれませんからね。

「Yamada Tarou」→「Ymada Tarou」とtypoしているようにね。

id:moks

解決しました。仰るとおりSQL文自体を表示して調べるべきでした。

2006/10/16 09:33:29

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません