SJISでPHP5+POSTGRESQL8を使うと漢字文字列の配列が問題になる可能性

このQ&Aのポイント
  • SJISでPHP5+POSTGRESQL8を使うと、漢字文字列の配列を扱うときに問題が発生することがあります。
  • 特に、「府」、「宮」、「本」、「マ」、「笠」を含む漢字文字列は問題が生じる可能性があります。
  • バージョンや環境によっては問題が発生しない場合もありますが、問題が生じた場合には対処方法を検討する必要があります。
回答を見る
  • ベストアンサー

SJISでPHP5+POSTGRESQL8

を使うとだめな場合があります。 調べてみると、 漢字文字列の配列を使った場合です。 pg_query("create table tbl(ken text[])"); pg_query("insert into tbl values('{大阪府,宮崎県}'); や pg_query("create table tbl(ken text[])"); pg_query("insert into tbl values('{\"大阪府\",\"宮崎県\"}'); です。 「府」、「宮」のSJIS下位コードが'{'と同じであるのが原因のようです。 他に「本」、「マ」、「笠」がつく漢字もだめです。 「本」の下位コードは'{'と同じで「マ」、「笠」の下位コードは'}'と同じです。 バージョンや環境によってはうまくいくようですが、 今の環境で積極的に対処する方法はあるでしょうか?

  • reiman
  • お礼率73% (794/1076)
  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 単純に「DB及び処理時の文字コードを全てEUCにする」ではだめでしょうか? sjisは、内部処理においては物凄い面倒を引き起こすので。内部処理時にsjisで扱うこととは、激しくお勧めできないのですが。

reiman
質問者

お礼

ありがとうございます。 pg_query("create table tbl(ken text[])"); pg_query("insert into tbl values('{\"大阪府\",\"宮崎県\",\"北海道\"}'); としたときにはデータは {"大阪府","宮崎県",北海道} となります。 下位コードが{,}のときに両側に"がついてしまうのです。 通常はつきません。

関連するQ&A

  • XPにPHP5とPostgreSQL8を入れて

    コマンドラインで create table tbl_ken(i_ken int4,ken text); insert into tbl_ken values(1,'北海道'); ・・・・・・・・・・・・・ ・・・・・・・・・・・・・ insert into tbl_ken values(47,'沖縄'); としテーブルを作っておき <?php $x='北海道'; $con=pg_connect(・・・・・・); $rs=pg_query($con,'select * from ken where ken="'.$x.'" order by i_ken'; ?> とすると文字化けしているようでpg_queryの部分でエラーになります どうしたら文字化けしないようにできるでしょうか?

    • ベストアンサー
    • PHP
  • POSTGRESQLデフォルトのシーケンス値を強制

    以下の(2)(3)のaをデフォルトであるシーケンスの値を強制入力しエラーを回避する方法はありますか? create sequence testseq start 1; create table test(a int not null default nextval('testseq'), b int); --(1)成功 insert into test (b) values(0); --(2)エラー insert into test (a,b) values(null,0); --(3)エラー insert into test values(null,0);

  • 訂正版 次のPHPにアクセス

    するとエラーになります ただしあらかじめgomidbで以下をしてます create table gomibbs(no serial primary key,contents text); grant all on gomibbs to gomiuser; <?php echo "<form method=\"post\" action=\"{$_SERVER['PHP_SELF']}\">"; echo "本文:<input type=\"text\" size=\"80\" name=\"contents\">"; echo "<input type=\"submit\" value=\"送信\">"; echo "</form>"; $con=pg_connect("dbname=gomidb user=gomiuser host=127.0.0.1"); $contents=$_POST['contents']; if($contents) { $contents=pg_escape_string(htmlspecialchars($contents)); pg_query($con,"insert into gomibbs(contents) values('$contents')"); } $rs=pg_query($con,"select * from gomibbs"); while($row=pg_fetch_array($rs)) { print $row['no'].":".$row['contents']."<br>"; } pg_close($con); ?> エラーになります ところが pg_query($con,"insert into gomibbs(contents) values('$contents')"); の所を pg_query($con,"insert into gomibbs(no,contents) values(1,'$contents')"); とすれば一度だけOKです どうすれば良いでしょうか?

    • ベストアンサー
    • PHP
  • PostgreSqlについて

    おはようございます。 質問させてください。 テーブルのカラムにtimestamp型のフィールドがあるとします。 テーブルinsertの時に現在の時間をいれたいのですが、どのような値を入れればいいのでしょうか? test_tbl-------------- ID:INTEGER DATE:TIMESTAMP ---------------------- insert into test_tbl (ID, DATE) values (1, ****); ****の部分にnow, dateとかそんな関数はあるのでしょうか?

  • MySQL初心者

    -mysql CREATE DATABASE testdb; use testdb; CREATE TABLE car_table(id int(10),name varchar(50)); INSERT INTO car_table VALUES (2,'乗用車'); INSERT INTO car_table VALUES (3,'オープンカー'); INSERT INTO car_table VALUES (4,'トラック'); SELECT * FROM car_table; これで間違ってるとは思わないんですが、なぜか ERROR 1049(42000): Unknown database 'testdb・・ とでます。なぜなんでしょうか?全然わかりません。 何かの設定ミスかなにかでしょうか?

    • ベストアンサー
    • MySQL
  • マテリアライズド・ビューの再計算について

    こんにちは ORACLE のマテビューについて困っています。 マテビューを作成して元となるテーブルを削除し再び作成してデーターを投入した後 マテビューを参照するとテーブルを削除する前の情報が表示されてリフレッシュされません どのようにしたら再作成後に投入したデーターをマテビューで表示させる事ができますでしょうか 【検証】 ◆テーブルの作成 CREATE TABLE TEST_TBL (A CHAR(2), B CHAR(5)); ◆レコードを追加 INSERT INTO TEST_TBL VALUES('01','AAA'); INSERT INTO TEST_TBL VALUES('02','BBB'); INSERT INTO TEST_TBL VALUES('03','CCC'); COMMIT; ◆マテビューの作成 CREATE MATERIALIZED VIEW MV_TEST_TBL REFRESH COMPLETE ON COMMIT AS SELECT * FROM TEST_TBL; ◆マテビューの確認 #1 SELECT * FROM MV_TEST_TBL; 3件表示される (正常) ◆レコードの追加 INSERT INTO TEST_TBL VALUES('04','DDD'); COMMIT; ◆マテビューの確認 #2 SELECT * FROM MV_TEST_TBL; 4件表示される (正常) ◆テーブルの削除 DROP TABLE TEST_TBL CASCADE CONSTRAINTS; ◆テーブルの作成 CREATE TABLE TEST_TBL (A CHAR(2), B CHAR(5)); ◆マテビューの確認 #3 SELECT * FROM MV_TEST_TBL; 4件表示される (期待としては 0件であったが) ※疑問1 テーブルのDROP & CREATE は再計算のトリガーに           ならないのか? ◆レコードの追加 INSERT INTO TEST_TBL VALUES('05','DDD'); COMMIT; ◆マテビューの確認 #4 SELECT * FROM MV_TEST_TBL; 4件表示される  ※期待としては1件だけが表示されてほしかったが 使い方としてはマテビューではなくても普通のビューでもいいのでは と思われるかもしれませんが、元となるテーブルのDROP & CREATE が システム的に発生しますがその際にビューの再作成をしたくないので マテビューを選択しました。

  • postgreSQLでint8で設定された項目にデータを挿入したいのですが、教えて下さい。

    例えば、下記のようなテーブルを作成し、 create table testm ( data1 int8, data2 int8, data3 int8 ); 普通全ての項目に値があれば、1行挿入することができますが、 insert into testm values (1, 2, 3); もし、値がないのに、項目に挿入したい場合は、できるのでしょうか? insert into testm values (1, , 3); 教えて下さい。それが出来なかった場合の対処方法も教えて下さい。

  • MySQLから取り出したものを3つに分ける

    MySQLに以下のようなSQLを打ちました。 create table table_list( id int, task varchar(255) ); insert into table_list values(1,'ほげほげ1-1'); insert into table_list values(1,'ほげほげ1-2'); insert into table_list values(2,'ほげほげ2-1); insert into table_list values(2,'ほげほげ2-2'); insert into table_list values(3,'ほげほげ3-1'); そして、空のdiv要素が3つあります。 このデータベースからidの数値別に、div要素へtaskの文字列を入れたいのですが、どうすればいいのでしょうか? SQLで「select * from table_list」をやってからtaskを取り出すのか、3回SQLで「select task from table_list where id=1」のようにするのがよろしいんでしょうか?

    • ベストアンサー
    • PHP
  • 次の掲示板PHPにアクセスすると

    <?php echo "<form method=\"post\" action=\"{$_SERVER['PHP_SELF']}\">"; echo "本文:<input type=\"text\" size=\"80\" name=\"contents\">"; echo "<input type=\"submit\" value=\"送信\">"; echo "</form>"; $con=pg_connect("dbname=gomidb user=gomiuser host=127.0.0.1"); $contents=$_POST['contents']; if ($contents) { $contents=pg_escape_string(htmlspecialchars($contents)); pg_query($con,"insert into gomibbs(contents) values('$contents')"); } $rs=pg_query($con,"select * from gomibbs"); while($row=pg_fetch_array($rs)) { print $row['no'].":".$row['contents']."<br>"; } pg_close($con); ?> エラーになります ところが pg_query($con,"insert into gomibbs(contents) values('$contents')"); の所を pg_query($con,"insert into gomibbs(no,contents) values(1,'$contents')"); とすれば一度だけOKです どうすれば良いでしょうか?

    • ベストアンサー
    • PHP
  • [Warning]が出るのですが、何故かわかりません。

    [Warning]が出るのですが、何故かわかりません。 <html> <body> <?php if($db = sqlite_open('db_ehon')){ $query = "INSERT INTO tbl_ehon (id, title, price) VALUES (1, 'a', 1380)"; $result = sqlite_query($db, $query); $query = "INSERT INTO tbl_ehon (id, title, price) VALUES (2, 'b', 1580)"; $result = sqlite_query($db, $query); $query = "INSERT INTO tbl_ehon (id, title, price) VALUES (3, 'c', 1680)"; $result = sqlite_query($db, $query); $query = "INSERT INTO tbl_ehon (id, title, price) VALUES (4, 'd', 1680)"; $result = sqlite_query($db, $query); print "「db_ehon」を作成しました。"; }else{ die("データを登録できません。"); } sqlite_close($db); ?> </body> </html> ■表示______________ Warning: sqlite_query() [function.sqlite-query]: no such table: tbl_ehon in C:\Apache Group\Apache2\htdocs\test2.php on line 13 Warning: sqlite_query() [function.sqlite-query]: no such table: tbl_ehon in C:\Apache Group\Apache2\htdocs\test2.php on line 16 Warning: sqlite_query() [function.sqlite-query]: no such table: tbl_ehon in C:\Apache Group\Apache2\htdocs\test2.php on line 19 Warning: sqlite_query() [function.sqlite-query]: no such table: tbl_ehon in C:\Apache Group\Apache2\htdocs\test2.php on line 22 「db_ehon」を作成しました。 ”db_ehon”は同じディレクトリに作成されます。 初歩的な事のような気がしますが、分るかたお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう