電子書籍の厳選無料作品が豊富!

問題となりそうなSQL文はこれです。

INSERT INTO TEST(ID,TITLE,ARTIST) SELECT * FROM ( SELECT 'id001' AS ID, 'タイトル1' AS title, 'アーティスト1' AS ARTIST FROM Dummytbl UNION ALL
 SELECT 'id002' AS ID, 'タイトル2' AS title, 'アーティスト2' AS ARTIST FROM Dummytbl UNION ALL
 SELECT 'id003' AS ID, 'タイトル3' AS title, 'アーティスト3' AS ARTIST FROM Dummytbl UNION ALL
・・・(繰り返し)
FROM Dummytbl(ダミー用のテーブル) ) AS insertDummy

シングルクォーテーションで囲まれた部分はPHPでtrimを行っており、実際の表示をしてみても何もありません。

ですが、ACCESS(.mdb)にPHPから以上のSQL文を発行してデータの新規作成すると、
なぜか末尾に多くの空白が入ります。
PHPは"eucJP-win"を内部エンコードに指定してあるので、
SQL文を"SJIS-win"にエンコード変換(mb_convert_encoding)してから、発行します。

他PHPプログラムの場合このSQL文は変化もなく、空白が入ることもなく
とても良く動いています。
しかし、今回、問題になっているプログラム上だけデータがおかしくなってしまっています。

他プログラムと違う場所はテーブルTESTはPHPプログラム内部から、
SQL文によって作成されるということです。あとはほとんどコピペですので、
違いはないと思います。

CREATE TABLE TEST
(
ID CHAR(25) ,
title CHAR(50) ,
artist CHAR(50)
)

私に見落としがあることは確かなのですが、
見つけられません。

どなたか、原因になり得ることをご教示下さい。

A 回答 (1件)

テーブル作成時の各項目のデータ型が原因だと思います。



char型だと「テーブル作成時に指定した桁数」分のデータが格納されます。

今回のようにinsertしたデータの桁数分だけを格納するなら varchar にしてください。
    • good
    • 0
この回答へのお礼

ありがとう御座います。そのとおりでした。
今は.mdbに合わせtext型に変更しています。
char型だと桁数分必ず確保してしまう、
またそのような場合はvarchar型でも有効的な使用が出来るということで、
とても勉強になりました。
text型より一般的なようですのでvarchar型で試します。
また機会があればよろしくお願いします。

お礼日時:2008/08/12 14:12

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