- ベストアンサー
Sqliteで使えない文字。
Sqlite3にて 列名やデータ内で使えない文字列(記号等の文字コード)を教えてください。 調べてみた情報では 改行や区切り文字などの基本的なことしか見つかりませんでしが 実際に使っていると、半角スペース等が混入している場合 全てではありませんが、データベース内で明らかに存在するのに検索できないなどの場合 があるようです。 一つずつ調べてエスケープ処理をすることは現実的に不可能なので 独自にエスケープ処理等を書かれている方に どのような文字列をエスケープしていますでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「なでしこ」ですか、、、プリペアドステートメント-プレースホルダーにも対応していないのかな? >データベース内で明らかに存在するのに検索できない エスケープ処理よりも、文字コードの問題が大きいような気がします。 SQLiteは、SQL文内の文字列として解釈できれば、基本どんなバイナリーデータもそのまま受け入れてしまうのですけど、検索やソートの時に、sjis やeucでは、バイト列がずれてマッチしたりしてうまくいきません。 SQLite3 なら、utf-8には対応してるので、utf-8でなら概ねうまく検索されます。 「なでしこ」でどの文字コードが使われているのか解りませんが、utf-8で保存し、検索時のデータ指定もutf-8でSQL文を構築、取り出し後、表示用の文字コードに変換という手順が必要です。 エスケープ処理について、phpマニュアルでの、sqlite_ecsape_string() 関数(SQLite2用)の説明によれば、文字列データのくくりは、シングルクオート(')の方を使うようにし、データ内のシングルクオート(')は2重にしてるようです。たしか標準SQL規格準拠の動作。 そのほかのバイナリー文字は、たぶん バックスラッシュ(\ 0x5c) を付加かな。 でも、SQLite3では、プリペアドステートメント推奨となっています。
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10358)
何らかのプログラミング言語を使っていると思いますが、マイナーな言語で無い限りSqlite3用のライブラリがあって、それがそのあたりの面倒を見てくれます。自分でエスケープする処理を書くのは間違いの元なのでだめです。
お礼
回答ありがとうございます。 なでしこと言う言語を使っており、Sqliteの文字エスケープのライブラリが無いのです。
お礼
回答を元に色々調べて試してみましたが なでしこ側の文字コードの問題があるようで、データベース検索処理の部分を別の言語で処理するようにいたしました。 回答ありがとうございました。