人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: moks
●カテゴリ:コンピュータ
✍キーワード:MySQL SQL データベース フィールド 変数
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● きゃづみぃ
●15ポイント

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

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

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

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

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

◎質問者からの返答

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


2 ● tadashi0805
●15ポイント

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

◎質問者からの返答

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


3 ● Mook
●15ポイント

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


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


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


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

◎質問者からの返答

回答ありがとうございます。格納されたデータは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())";


4 ● Mook
●100ポイント ベストアンサー

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

提示された 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')";

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

◎質問者からの返答

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


5 ● ito-yu
●15ポイント

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

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

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

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ