5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

sqliteを語るスレ

1 :名無しさん@お腹いっぱい。:03/06/30 16:01 ID:3hdiLYQO
とりあえず立てときますた

参考:http://www.sqlite.org

263 :NAME IS NULL:04/12/22 14:34:23 ID:???
そもそも、ファイルオープン時にファイル名まで
わざわざIntPtrにしてマーシャリングかけてるのが訳分からん。

sqlite3.cs 76 行目
private static extern int sqlite3_open(IntPtr filename, out IntPtr db);

private static extern int sqlite3_open(string filename, out IntPtr db);

sqlite3.cs 578 行目
int res = sqlite3_open(m.GetSQLiteStr(),out DB);

int res = sqlite3_open(filename,out DB);

でいいような気もする。

264 :NAME IS NULL:04/12/22 15:56:24 ID:TQsgyPh1
お前らってすごいですね。
ちょっぴり感動しました。

私は、カレントディレクトリを変更してファイル名のみで開くようにして逃げました。

何か出来ることあったらやります。
出来ることは少ないので、あんまし役に立てそうに無いですが・・・・

265 :258:04/12/23 15:21:34 ID:???
>>263
同じようにsqlite2のほうもokでした…
涙で画面が見えません(つд`)


266 :262:04/12/24 09:18:51 ID:DruLsR8d
>>263 なるほどです。
そこを変えるなら、エンコーディングには手をつけなくてすむし、
その修正が正しいと思います。
そもそも、ファイル名の文字コードとデータの文字コードが
同じにできるとは限らないでしょうから。
ということで、ひとまずデバッグ完了にしてもいいでしょうね。
ご苦労さまでした。

それにしても、SQLite3 対応バージョンになったら、どうして
わざわざファイル名までマーシャリングしているのか、という謎ですが、
ソースを眺めていると、SQLite3 の UTF-16 サポートに対応しかけて
途中で止まっているように見えます。
sqlite3_open16() を使おうとしたものの、ASCII コードと互換性がないから
このやり方ではまずいと思いなおして、やめにした痕跡(日本では困った残骸)
かな、と思いました。

267 :NAME IS NULL:04/12/24 09:49:25 ID:j+9u7lDN
えっと、おまえらちょっと教えてください。
2歳児程度の知能でわかるように。
今日始めてSQLってものに興味持った。
で、WindowsXP+SQLiteって環境で何かやってみたいなと。
オレはいきなり困ったんだよ。
createなんちゃら、とかでデータベースのファイル作るんだろ?
その作業はいったいどこでどうすればいいのか、と。
試しにコマンドプロンプトから
sqlite hoge
ってやってみた。
当然パスなんか通ってないし何も起きない。
なぁ、助けろお願いします。


268 :263:04/12/24 11:02:26 ID:???
>>266
あっちではASCIIが標準っぽいから、UTF使わん時は
とりあえずASCIIにしとけやって感じだったんでしょうなぁ。
何にしても、ファイルオープンはOS依存部分なんで、
現状、下手にファイル名はエンコーディング変換すべきじゃないかなと。

それにしても、どの言語使ってても文字コード関係の問題は
プログラマ苦しめてくれるわ _| ̄|○

>>267
sqlite c:\hoge.db で create table したら、 hoge.db が出来てる。
あとはSQL92本とSQLite公式ドキュメント読んで気合で。

269 :NAME IS NULL:04/12/24 14:52:32 ID:j+9u7lDN
>>268
さんくす。
ただ、書き忘れてたことがあって。
よー考えたらPHPにSQLiteのモジュール組み込んだだけなような。

非常に感謝した。


270 :NAME IS NULL:04/12/27 12:27:32 ID:UKRyD7qw
ADO.NET Data Provider for SQLite (Version 0.20)
日本語処理デバッグの追加メモ

= 問題 =
デフォルトのオプション設定 Version=2;UTF8Encoding=False で
日本語データを処理できない。
つまり、SQLite2 が Shift-JIS コードの日本語データを処理できない。
(SQLite.exe で入力した日本語データを読めないぞ、とか、
以前から使っていたデータベースを読めないぞ、となる。)

= 解決方法 =
sqlite2.cs 55, 457, 461行目と Util.cs 178行目の
Encoding.ASCII を
Encoding.Default に変更する。
Encoding.GetEncoding("Shift-JIS") として文字コードを明示してもよい。
これで SQLite2 で Shift-JIS を扱えるようになる。

注) Version 0.18 までは、この問題は起こらない。
SQLite2 で UTF8 を使うときには、もともと問題でない。
SQLite3 は UTF8 がデフォルトで、UTF8Encoding=False は無視されるので、
SQLite3 にも無関係。

271 :NAME IS NULL:04/12/27 13:25:39 ID:???
Defaultはともかく、Shift-JIS決め撃ちはよろしくないな。
Winのコードは、正確にはShift-JISじゃないし。
まぁ、何にしてもUTF-8使おうぜ。

272 :270:04/12/27 14:10:38 ID:bP0BeZGo
確かに。これからは UTF-8 を使うのが推奨。

273 :NAME IS NULL:04/12/30 17:41:45 ID:FzyFXvYT
C# で SQLite 使うに
SQLite Query Analyzer (SQLiteQA) は実用にもなるけど、
ソースも参考になりますです。
http://www.monkeyshinez.net/SQLiteQA/

274 :NAME IS NULL:04/12/30 22:09:30 ID:???
unicodeなんて糞
今までどおりeucかsjisでええわ

275 :NAME IS NULL:04/12/31 19:03:34 ID:???
> までどおりeucかsjisでええわ
m9(^Д^)プギャー
こういう奴が、MS932と純Shift-JISの区別もつかずに
DBに文字放りこんでるんだろうな。

276 :NAME IS NULL:05/01/01 00:20:55 ID:???
UTF8 って MS932 の文字も含まれているの?

277 :NAME IS NULL:05/01/01 04:48:25 ID:???
>>275
しつれいだがどういう繋がりが?

278 :NAME IS NULL:05/01/01 10:34:56 ID:???
>>277
文字コードの話が出ると必ずこういうのが沸いてくるのはもう仕方ない。
普通にスルーしとけ。

279 :NAME IS NULL:05/01/01 11:28:51 ID:???
Perl DBD::SQlite で使ってみてるんですが、LIKE 構文でちょっとはまってます。

WHERE string LIKE '%キーワード%' みたいにして文字列中間一致検索してるんですが、
キーワードに % や _ を指定してしまうと全てにマッチしてしまうので困ってます。

じゃあ % や _ はエスケープして LIKE '%\%%' みたいにしたらどうかと思ったらダメだし、
LIKE '%|%%' ESCAPE '|' みたいにエスケープ文字指定しようとすると Syntax Error になるようです。

何か良い解決策はないでしょうか?

280 :NAME IS NULL:05/01/01 14:12:43 ID:???
>>276
含んでいると言われれば、含んでいると思う。
ただ、重複符号やWAVE DASH変換とかの問題もあるけど。
IANA の登録名がWindows-31Jなので、MS932よりこちらの名称の方が妥当かも。
窓べったりの開発ならShift_JIS、クロス開発なら、UTF-8が安全牌かな・・・

個人的に、SQLiteのウリは可搬性だと思うので、UTF-8使うのがよさげだと思った。


281 :NAME IS NULL:05/01/01 20:47:45 ID:???
>279
phpでは\エスケープで動いたが。なぜ動かなかったスクリプトを書かない?

$_ = '%_\\';
print "$_ => ";
$_ =~ s/([%_\\])/\\\1/sg;
$_ = "%$_%";
print "$_\n";

282 :NAME IS NULL:05/01/02 10:39:43 ID:???
これからSQL勉強するのにお勧めの本ってある?

283 :279:05/01/03 04:28:16 ID:???
>>281
思い通りに動いてくれないスクリプトの該当部分晒します。
($keyword に検索したい文字列が入っています)

$keyword =~ s/([%_\\])/\\$1/g;
my $query = "SELECT * FROM files WHERE namer LIKE ' . $dbh->quote("%$keyword%");
my $sth = $dbh->prepare($query);
$sth->execute();

1行目がないと、% や _ をキーワードに入れた時は
問答無用で全件にマッチしてしまいます。
1行目をつけることによって % や _ はエスケープされ、
適切な物のみがマッチすることが期待されますが、
実際には1件もマッチしません。

284 :NAME IS NULL:05/01/04 21:46:21 ID:???
> "SELECT * FROM files WHERE namer LIKE '
これはOKなのか?
入力ミスかどうか知らんけど。


285 :283:05/01/06 01:24:06 ID:???
>>284
すいません、そこは貼り付ける時の編集ミスです

286 :NAME IS NULL:05/01/06 21:28:40 ID:hqOqZvbU
APACHE2 + PHP5 + PDO + SQLite3 使っていますが何か?

287 :名無しさん@Linuxザウルス:05/01/06 22:31:57 ID:???
>283
sqlite単体でもそういう結果返ってくるね
PHPはどう処理してるんだろうと思ってソース覗いてみたけど
俺にはさっぱりだったよw

288 :NAME IS NULL:05/01/07 13:07:13 ID:???
何か、と言われても
そっれがどうした僕ドラえもんって感じだ。

289 :NAME IS NULL:05/01/07 22:23:15 ID:???
>>286
どこで、が重要。ローカルなら普通すぎ。

290 :NAME IS NULL:05/01/09 15:37:51 ID:???
PHPでSQLite使いたいのですが、
mbstring.internal_encodingがEUC-JPの状態で
UTF-8しか対応していないという噂のSQLiteに日本語をそのままつっこんで
SELECT * FROM table WHERE hoge LIKE '%あ%' とかもふつうに使えるようなのですが、

問題が起こるケースはどんな時なのでしょうか?


291 :NAME IS NULL:05/01/09 18:54:09 ID:???
大文字小文字

292 :290:05/01/10 13:33:03 ID:???
>291さま
私の質問への回答でしょうか。だとしたらありがとうございます。
しかし、今のところ問題がなさそうに見えます。

INSERT INTO table (comment) VALUES ('ごっちゃまぜゴッチャマゼ鬱');
の後に
SELECT * FROM table WHERE comment LIKE '%チャ%';
SELECT * FROM table WHERE comment LIKE '%ちゃ%';
でもちゃんと結果を返してくれます(まぁ実際にはハンカクカナなんぞ入れませんが)。
やりたいことの範囲内で問題がなければいいのかなとも思うのですが。
やりたいこと:掲示板スクリプト(コメント欄で日本語LIKE検索を使いたい)



293 :NAME IS NULL:05/01/11 16:59:22 ID:???
>>292
う〜む。そーす見ても分からんな。
LIKEじゃなくGLOBを使って、*/?を[*]/[?]にしてみたらどうよ?
いっそ「検索にワイルドカードが使えます」とアナウンスするほうが楽かもしれないが。

294 :290:05/01/12 00:28:51 ID:???
>293さま
んとですね、私の書き方がまずかったです。
(1) いろんな情報を見た結果、SQLiteで日本語を扱うには
UTF-8でないといけないのかな、と判断した。
(2) しかしながら私の使っているPHPはmbstring.internal_encodingがEUC_JP。
ということはEUCJPでSQL作成→UTF8に文字コード変換→クエリ実行→
結果取得→マルチバイトのカラムはそれぞれEUCJPに文字コード変換、
とやらないと *何か* 問題が発生するだろうなぁ、と考えた。
(3) まぁそういうラッパー作るのが正当なのかな、と考えつつ
ものは試し+ものぐさでEUCJPのままマルチバイト入れても、
ふつうに使える(ように見える)。

という前提があって、さて、本当に問題は起こるのか?というところを知りたいのです。
一見問題なさそうで本格運用して、あとで問題発生が怖いのですよ。
こんなケースでこんな不具合があるよ、
という経験をお持ちの方、いらっしゃいませんかねぇ?

ちなみに当方ロリ○ップでコソーリSQLite使用中

295 :NAME IS NULL:05/01/12 11:18:21 ID:???
>>294
ああ、そういうことならsubstring()とかlength()等文字列操作関数以外では特に関係無いから。


296 :NAME IS NULL:05/01/12 13:51:54 ID:???
>>279
私も where xxx like '%あ_い%'
で、検索ができませんでした。
sqlite_escape_string -- クエリパラメータ用に文字列をエスケープする
これ、やった結果は、どのような文字列になるんですかね。
php じゃ、なくて、python でやってるんで、
sqlite_escape_string のようなものがあるか、今調べようとしているんですが、

where xxx like '%あ\_い%'
と \ を入れてもだめだし、
取り合えず、 like 使うときは、 _ があったら、 % にでも
して、やり過ごそうかと思ってますが。
どう?

297 :296:05/01/12 14:38:21 ID:???
sqlite3.0 で SJIS のデータでやってますが。
like は、 エスケープが使えないのかな。
http://www.mail-archive.com/sqlite-users@sqlite.org/msg04862.html
http://www.mail-archive.com/sqlite-users@sqlite.org/msg04863.html
に、それらしい?ことが書いてありましたが、
で、
仕方が無いので、 '_' or '%' があるときは、
like じゃなくて、 glob で * にするとか
like のままで、 _ を % にでも書き換えようかと
思いました。



298 :NAME IS NULL:05/01/12 16:54:43 ID:???
pdo_sqliteが見当たらないどこいったーー


299 :NAME IS NULL:05/01/19 22:04:11 ID:???
いつのまにか SQLite3/Ruby ができてた。

300 :NAME IS NULL:05/01/22 22:08:03 ID:???
LIKE ... ESCAPE 対応sage

301 :NAME IS NULL:05/01/22 22:43:21 ID:???
alter table 出来るんだね。

302 :NAME IS NULL:05/01/24 08:54:59 ID:???
ALTER TABLE ... RENAME TABLE ...
テーブル名変更のみ対応の限定版みたいだけどね。少し楽になるかな。

303 :NAME IS NULL:05/01/31 11:03:59 ID:3JFZomnK
3.10(alpha) age

304 :NAME IS NULL:05/02/02 07:46:54 ID:mdzMwrr7
Sqliteが使える鯖あったら、教えてチョ。


305 :NAME IS NULL:05/02/02 10:41:49 ID:???
XREAの一部のサーバーでPHP5が利用可能になったよ。
どのサーバーで使えるかは事前に確認しろよ。

306 :NAME IS NULL:05/02/02 14:10:53 ID:???
3.1.1 (beta)

307 :NAME IS NULL:05/02/04 07:30:10 ID:???
>>305
あんがと。

308 :NAME IS NULL:05/02/13 02:33:51 ID:bTxKUDlt
どうがんばっても3.1.1betaがダウンロードできない・・・

309 :NAME IS NULL:05/02/16 14:04:19 ID:???
3.1.2を落とせばいいじゃない

310 :NAME IS NULL:05/02/16 14:25:22 ID:???
stableデタ━━━(゚∀゚)━━━!!!

311 :NAME IS NULL:05/03/01 17:13:17 ID:+RdvxZ60
PHPネタですが、、

PEAR::DBが1.7.0からsqliteドライバにtableinfoメソッドが追加されたので
PEAR::DB::DataObjectでSQLiteが利用できるようになりました。
createTables.phpによるsqliteのDB解析はいくつかの問題点があったのですが
それらも解消されているようです。(DSNからDB名を取得してschemeのiniファイル
を作る場合にパスもDB名と解釈してしまいエラーがでる問題が解消されている)

312 :NAME IS NULL:05/03/14 11:06:00 ID:zJnP9H2H
3.1.5age

93 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)