X



トップページDB@2ch掲示板
1002コメント312KB
SQLite Part.10
■ このスレッドは過去ログ倉庫に格納されています
00147
垢版 |
2012/08/18(土) 01:37:10.10ID:ZAlPZ/Vl
>>13
アクセスの成功に関しては負荷ツール側で全てのリクエストがHTTPステータス200で終了していることで確認しました。
ですのでSQLクエリの実行が失敗していると見てよいのかの判断がついておりませんでした。

排他制御は行われているとの事なのでカウントがプラスされていない時点でクエリが正常に実行されていないと見るべきでした。
申し訳ありません。

count_db()については
function count_db()
{
$connect = new PDO("sqlite:./sample_table.sql3");
return $connect ;
}
となります。

テーブル構造は
sample_table
------------------
|num | count |
------------------
|index | 1 |
|contact | 30 |
------------------
このようになってます。
num側にページアドレス・count側にアクセス数が入っています。

PDOとデータベースの勉強のためにまずは簡単なアクセスカウンターを作ってみようかと思って作成いたしました。
0015NAME IS NULL
垢版 |
2012/08/18(土) 02:45:18.67ID:???
>>14
ページアドレスがnum…。まあいいけど。

データベースにしてもPDO(と言うかPHP)にしても入門書は腐るほど出版されてるから、
とりあえず適当なのを買ってきて読めば一通りのことは出来るようになると思う。

あと、HTTPの仕組みとかも勉強した方がいいかもね。
SQLクエリの実行結果は [DBMS] → [PHP]
HTTPステータスは [PHP(と言うかWEBサーバ)]→[WEBブラウザ]

ちなみに、今回のは排他制御がかかってる時に同時にUPDATEしようとしてエラーになったらどうするか、の考慮が漏れてるのが問題。
おそらくロック待ちのタイムアウト値が設定されていないので、100回のうちエラーになった分はスルーされてる。

これだけレスしておいてあれだけど、微妙にスレ違い(今のところあんまりSQLite関係ない)だし、ヒントも書いたので、
あとはWEBプログラミング板の適当なスレに移動した方が幸せになれるかもしれない。勉強頑張れ。
00167
垢版 |
2012/08/18(土) 10:12:45.63ID:ZAlPZ/Vl
>>15
ありがとうございます。
排他中の制御に関してはまったく考慮しておりませんでした。
前の処理が終わるまで順番に待っているだろう
くらいの認識でした。

amazonあたりで評価の高そうな本をいくつか見てみたいと思います。
ありがとうございました。
0017NAME IS NULL
垢版 |
2012/08/19(日) 12:50:44.77ID:???
外部結合しているテーブルの行をを一度に消す方法はないのでしょうか?
delete TBL_A from TBL_A left join TBL_B on TBL_A.keyid = TBL_B.id where TBL_B.keyid = 4;

delete from TBL_A from TBL_A left join TBL_B on TBL_A.keyid = TBL_B.id where TBL_B.keyid = 4;
など紹介されているものを色々試してみたのですが、どうしてもsyntaxerrorがdelete直後の単語ででてしまいます。
テーブルごとに削除するしかないのでしょうか…?
0018NAME IS NULL
垢版 |
2012/08/19(日) 12:58:41.83ID:???
DELETEはFROM一つしか書けないよ。JOINも当然書けない。
メインのテーブルのレコードを削除したとき必ず従属テーブルのレコードを削除するならトリガーに書きなよ。
0019NAME IS NULL
垢版 |
2012/08/19(日) 13:10:56.17ID:???
>>18
回答ありがとうございました。
トリガー使ったことないのですが、挑戦してみます。
0021NAME IS NULL
垢版 |
2012/09/02(日) 10:39:44.98ID:???
そんな事言うんじゃないよ
0022NAME IS NULL
垢版 |
2012/09/04(火) 15:49:22.12ID:F14l33sJ
sqliteのファイルを読み込む際に、そのファイルがsqliteのファイルであるかどうかを確認することはできますか?
sqlite以外のファイルを読み込んだ際に当たり前ですがエラーが出るのでそれに対処したいと思っています。
読み込むsqliteのファイル名に規則性がないので振り分けができないので、ファイルがsqliteファイルであるかどうか確認する方法があれば教えてもらえると助かります。
0024NAME IS NULL
垢版 |
2012/09/04(火) 18:48:09.39ID:???
>>22
自分で結論にたどり着いてるみたいだけど…。

>sqliteファイルであるかどうか確認する方法
>sqlite以外のファイルを読み込んだ際に当たり前ですがエラーが出る
0025NAME IS NULL
垢版 |
2012/09/04(火) 19:16:39.20ID:???
>>24
ワロタ
確かに、エラーが出てるとわかってるならそれでいいじゃんとなるけどねw

事前に判断することができるか?という希望に答えるとすると、
C言語的にはファイルを開いて先頭16バイトバイナリ読込して、
"SQLite format 3\x00"とmemcmpして見れば一応わかる。
ただし、こんなものは偽装はできるし、このヘッダ部は正常でも、sqlite的に演算したら
ファイルが破損していた場合は結局エラーになるので価値は・・・疑問かな。
sqlite3_openv2がエラーを返すならそれで判断するのが良いよ。

0027NAME IS NULL
垢版 |
2012/10/01(月) 13:04:19.93ID:Miyu12UY
SQLite3使ってますがカラムの追加は最後尾にしか出来ないでしょうか?
| 1 | 2 | 3 | 4 |
とあった場合
| 1 | 2 | 3 | 3.5 | 4 |
としたいと思ってます。
0029NAME IS NULL
垢版 |
2012/10/01(月) 20:48:13.89ID:???
>>27
ALTERならどのDBMSでもそうじゃないの?
テーブルを作り直してINSERTすればいいじゃん。
0030NAME IS NULL
垢版 |
2012/10/01(月) 21:13:45.41ID:???
そういう話なら、alter table文の最後に"before カラム名"とか"after カラム名"をつけると、テーブルをselect *で見た時に、
意図した場所に入ったように見せる(物理ディスク上はどうせ最後に追加される)ことができるRDBMSは結構あると思う。

けど、もしかしたらSQL標準には無かったかもしれない。

と言うか>>27の目的はselect文で順番を変えるだけで済むような。
0031NAME IS NULL
垢版 |
2012/10/02(火) 09:44:14.60ID:???
select *しか知らいないと予想してみる
0032NAME IS NULL
垢版 |
2012/10/02(火) 10:27:01.41ID:mMJozPXq
SQLite3はMySQLみたいに任意の場所に追加は出来なかったと思う
どうしても順序通りに作りたいなら
テーブル作り直して、Insertしかないと思う。

SQLite3で before カラム名 が出来るかどうかは試したこと無い。
0033NAME IS NULL
垢版 |
2012/10/02(火) 14:19:36.21ID:mMJozPXq
SQLiteってあんまし触ったこと無かったけど
insert into test('test','test2') values ('1','2'),('3','4');
って出来ないの?
insert into test('test','test2') values ('1','2');
なら出来るんだけど、複数insertするとときの作法がよくわからない。
0035NAME IS NULL
垢版 |
2012/10/02(火) 15:10:52.98ID:mMJozPXq
なるほどね
さすがにLiteっていうだけあって色々制限あるね

というかこれからの質問は

ドキュメント読めばすぐに解決できるだろうが
http://www.sqlite.org/lang.html

のテンプレ張れば解決だな
0036NAME IS NULL
垢版 |
2012/10/02(火) 19:11:09.49ID:???
と言うか最初からテンプレにある。>>1にアンカ張れば解決。
0037NAME IS NULL
垢版 |
2012/10/02(火) 23:24:28.10ID:???
sqlite> .version
SQLite 3.7.14 2012-06-30 ********
sqlite> CREATE TABLE jedict (jword TEXT, eword TEXT);
sqlite> INSERT INTO jedict ('hon', 'book') , ('kon', 'navy'), ('mon', 'gate');
sqlite> select group_concat(jword, '_') from jedict;
hon_kon_mon
0038NAME IS NULL
垢版 |
2012/10/03(水) 08:58:58.06ID:7gCK7EIm
>>37
これで挿入は出来るんだけどカラム増やすためにDB作り直したときにいっつもこまってるんだよね
sqlite> CREATE TABLE jedict (jword TEXT, eword TEXT)

sqlite> CREATE TABLE jedict (jword TEXT, eword TEXT, hword TEXT);
にしたとき
INSERT INTO jedict ('hon', 'book') , ('kon', 'navy'), ('mon', 'gate');
だと困るからいっつも
INSERT INTO jedict ('hon', 'book', '') , ('kon', 'navy', ''), ('mon', 'gate', '');
こんな感じに書き直してから挿入するので手間がかかってしょうがない


0039NAME IS NULL
垢版 |
2012/10/03(水) 10:20:22.92ID:CNQU59aT
hword カラムを not null default '' にして追加したあと
INSERT INTO jedict (jword, eword) values ('hon', 'book') , ('kon', 'navy'), ('mon', 'gate');
じゃダメ?
0040NAME IS NULL
垢版 |
2012/10/03(水) 19:31:42.90ID:7gCK7EIm
そういう手もあるか

そもそもSQLiteで移植ってみんなどうやってんの?
MySQLとかならphpyAdminとか使ってラクラク出来るけどSQLiteでそういうのあるの?
0041NAME IS NULL
垢版 |
2012/10/03(水) 19:47:28.65ID:???
ごめん、移植ってのがよく分からない。

流れ的に>>38みたいにDB作り直して中のデータの一部or丸ごとをコピーすること?
それとも他のRDBMSにデータを持って行ったり、持って来たりすること?
004240
垢版 |
2012/10/03(水) 20:11:21.92ID:/OiJBnwO
>>41
DB作り直して中のデータを丸ごとコピーしたりすること
言葉足りずで申し訳ない
0043NAME IS NULL
垢版 |
2012/10/03(水) 21:01:38.97ID:???
そもそも、中身を丸ごとコピーしないといけないような重要なDBを、
構造を変えて作り直す状況があんまり無いんじゃ…。
0044NAME IS NULL
垢版 |
2012/10/03(水) 21:27:07.87ID:???
>>42
sqlで出来るならそれで。
できないならぶっちゃげぱっとスクリプト書いちゃうな。
0045NAME IS NULL
垢版 |
2012/10/03(水) 21:33:00.19ID:???
年中作り直すのは設計に問題がある。
カラムの追加ぐらいでいちいち作り直さない。
004640
垢版 |
2012/10/03(水) 21:45:30.94ID:/OiJBnwO
さすがにカラム追加するだけで作り直しとかはないけど
拡張して追加よりは作り直したほうがいい場合が年に1回くらいあったりしてたんで
みんなどうやってんのかと思って。
0047NAME IS NULL
垢版 |
2012/10/03(水) 21:53:02.00ID:???
年中作りなおすなんて書いてないだろ。
質問者は、作りなおすハメになったのが設計の甘さかどうかなどは問わず、
「みんな、どうするのかな?」って軽いつもりで聞いてるんだろ。

エラソーに設計に問題がーとか言ってるのは意図を汲めない馬鹿丸出しの発言だろ。
SE/PGだけが業務でコンピュータを使いう時代じゃないんだ。
少しは考えろよ。
0048NAME IS NULL
垢版 |
2012/10/03(水) 21:55:52.76ID:???
>>47
訂正、業務かどうかも前提とすべきではなかったな。
0049NAME IS NULL
垢版 |
2012/10/03(水) 22:44:52.67ID:???
「作り直す時のテクニックをみんなで考えよう」じゃなくて「みんなどうやってんの?」だからなー。
業務だったらそんなマズい設計にはならないし、趣味だったら入れなおすほどのデータなんて扱わない人が大半だろうから、
質問者へのレスとしては間違ってないと思うぞ。年中云々は知らんけど。

仮に前者を問いかけたつもりなんだとしたら聞き方を間違えてる。
0050sage
垢版 |
2012/10/04(木) 10:04:32.41ID:???
phpMyadminみたいにWEB上でお手軽に出来るのがあればいちいちスクリプト組んだりコマンド流したりやんなくていいんだろうけどね

俺はデータをどっかに持ってく場合は
各値を'で囲んで取り出して1レコードを()でくくる感じで吸い出す
('a', 'b', 'c')
こんな感じ。
あとは引越し先にinsertで突っ込む。
1回だけ構造が違うところに突っ込むことがあったけど、そんときは
('a', 'b', '', 'c')
って感じにして対応した。
そんときは80万レコードあったので2個目の,のあとに'', を追加するスクリプト組んで書き換えた。

このやり方がスマートかどうかはわかんないけど、おれは引越しするときはいつもこんな感じでしてる。
0051NAME IS NULL
垢版 |
2012/10/04(木) 11:55:58.87ID:???
>>47
いったい誰と戦っているんだよ?空気脳さん.
0053NAME IS NULL
垢版 |
2012/10/09(火) 09:14:57.50ID:???
PHP上からSQLiteファイル内のデータを全部引っこ抜くようなのって無いんだっけ?
全レコードを>>50みたいな感じでおいらも引っこ抜いてるんだけど。
0054NAME IS NULL
垢版 |
2012/10/14(日) 21:06:47.63ID:???
keyとvalueしかない構造だから悩まない
0056NAME IS NULL
垢版 |
2012/10/15(月) 10:31:13.09ID:???
追加とか変更とかは適当にコマンド流すけど
何か変更することあればFirefoxのSQLiteManagerってやつでいじってる

それ以上のことやろうと思うならそもそもSQLiteとか使わずMySQLとか使ってるしな
0057NAME IS NULL
垢版 |
2012/10/23(火) 19:10:42.58ID:???
だからどうした?
0058NAME IS NULL
垢版 |
2012/10/25(木) 17:03:37.52ID:???
以下の様なデータが格納されているデータベースで

1
1
1
2
2
3
3
3
4

とあるデータで各値が何回出てくるかカウントするってことは出来ますか?

1=3回
2=2回
3=3回
4=1回

みたいな検索結果を得たいと思ってます。
0059NAME IS NULL
垢版 |
2012/10/25(木) 18:29:44.22ID:???
table名 theTable
カラム名 a int

a
--
1
1
1
2
2
3
3
3
4
--

select a, count(*) as cnt from theTable group by a order by a
0060NAME IS NULL
垢版 |
2012/10/25(木) 19:00:24.67ID:???
>>59
解凍ありがとうございます。
こういう組み合わせ知らなかったので凄い勉強になりました。
0061NAME IS NULL
垢版 |
2012/10/25(木) 20:50:40.94ID:???
まさかこんなレベルでプログラマじゃないよなw
0063NAME IS NULL
垢版 |
2012/10/26(金) 11:16:29.38ID:???
SQL知らなくても凄腕のプログラマもいるし
0064NAME IS NULL
垢版 |
2012/11/02(金) 09:43:36.96ID:jaaHOkOC
SQLiteって別ドメインであってもファイルにアクセスさえ出来れば、どこに置いてても操作できる?
0065NAME IS NULL
垢版 |
2012/11/08(木) 09:55:55.42ID:???
http://www.sqlite.org/faq.html#q5

5) Can multiple applications or multiple instances of the same application access a single database file at the same time?

抜粋意訳
NFSでマウントすればリモートアクセス出来るが、NFSのファイルロックは信頼性か低いものもありオススメしない
0066NAME IS NULL
垢版 |
2012/11/08(木) 13:44:03.61ID:NYXd8Y9V
SQLiteってクロスドメインとかいけるんだっけ
0067NAME IS NULL
垢版 |
2012/11/12(月) 06:32:33.62ID:???
ファイルって複数のテーブル突っ込んでサイズデカくなっても
ひとつのテーブルへの速度に影響ないレベル?
0068NAME IS NULL
垢版 |
2012/11/12(月) 12:11:03.33ID:Gm0PmwJY
検索はそんなにかわんない
でもinsertとかupdateとかとかになると件数が10万件とかあると多少違ってくる
0069NAME IS NULL
垢版 |
2012/11/12(月) 16:19:44.77ID:???
>>68
ありがと! 検索メインなのでまとめてみます!
0070NAME IS NULL
垢版 |
2012/11/13(火) 09:20:19.20ID:nIGWXzwT
SQLiteってDB自体を暗号化って出来る?
0071NAME IS NULL
垢版 |
2012/11/13(火) 11:25:00.29ID:???
SQLCipherってので暗号化できるみたいだけど半有料
0072NAME IS NULL
垢版 |
2012/11/13(火) 14:18:38.88ID:???
書き出しと読み出しの部分のソスを書き換えて...
なんてのは出来そう?
0073NAME IS NULL
垢版 |
2012/11/13(火) 19:05:43.34ID:???
>>70
>>1のSupportを参照。有料で別ライセンス(パブリックドメインではない)だけど本家が出してる。
0074NAME IS NULL
垢版 |
2012/11/13(火) 20:11:51.28ID:???
暗号化してインサートすればいいんじゃね?
0075NAME IS NULL
垢版 |
2012/11/14(水) 13:58:27.32ID:???
>>72 する手間かけるくらいなら >>74 の方が良いね
0076NAME IS NULL
垢版 |
2012/11/14(水) 14:22:17.72ID:???
そか IO部分はそのままという事ね。
すぐ 出来そうな感じはする。
出来ないけどorz
0077NAME IS NULL
垢版 |
2012/11/14(水) 15:01:33.23ID:???
>>74-75
暗号化してinsertしちゃったら
検索出来なくなるじゃん
0078NAME IS NULL
垢版 |
2012/11/14(水) 17:19:18.60ID:???
I/Oはそのままってだけですよ。
0079NAME IS NULL
垢版 |
2012/11/14(水) 19:33:12.83ID:???
>>77
検索キーも暗号化して検索すればいいんじゃね?
0080NAME IS NULL
垢版 |
2012/11/14(水) 19:42:07.35ID:???
部分文字列の比較とか難しくないか?
SUBSTRINGを使った場合位置が保証されるかとか。
0081NAME IS NULL
垢版 |
2012/11/16(金) 09:14:45.66ID:A4atXoQO
そりゃrotみたいな単純なもんならいいけど、暗号化とは言えないし、そもそもそれだと部分一致とかマルチバイトとか面倒だろ
0082NAME IS NULL
垢版 |
2012/11/16(金) 12:01:41.64ID:???
>>79
キーだけ暗号化した暗号文と
キーを含む文字列を暗号化した暗号文が
部分一致することは普通はあってはならない
0083NAME IS NULL
垢版 |
2012/11/16(金) 19:56:51.69ID:???
というか、一般にそれを暗号化とは言わない。
スレ違いなのでプログラム技術板あたりへどうぞ。
0084NAME IS NULL
垢版 |
2012/11/18(日) 18:11:07.08ID:???
出来ないなら普通に出来ないって言えばいいのに
0085NAME IS NULL
垢版 |
2012/11/18(日) 18:41:32.22ID:???
暗号化した文字の比較とかの話だからスレ違いってことでしょ

暗号化が出来る/出来ないの話なら>>73で出来るって結論が出てる
0087NAME IS NULL
垢版 |
2012/11/26(月) 18:23:42.86ID:???
sqliteってファイルベースのデータベースじゃん
その作成されるデータファイルのパーミッションやユーザ権限ってどうなってんの?
ユーザ毎に保存してくれる?
0088NAME IS NULL
垢版 |
2012/11/26(月) 19:29:19.32ID:???
最後の一行がよく分からないけど、実行したユーザの権限で作成されるよ。
0090NAME IS NULL
垢版 |
2012/11/27(火) 21:34:23.08ID:???
sqlite3_close_v2 よいよね
0092NAME IS NULL
垢版 |
2012/12/19(水) 16:46:02.85ID:???
SQLite3の1つのDBの中に、最大でいくつまでテーブルが作成できるのでしょうか?
0093NAME IS NULL
垢版 |
2012/12/19(水) 20:57:45.96ID:???
>>92
>>1
答えはないけどヒントは書いてある。
0095NAME IS NULL
垢版 |
2012/12/24(月) 08:40:38.60ID:???
.netなんですけど1つ目のテーブル読みながら2つめにコピーしようと
してるんですがdatabase file is lockedになります
mdbでやってた時は動いててそれをsqliteに置き換えただけなのですが
原因わかりますでしょうか
0096NAME IS NULL
垢版 |
2012/12/24(月) 13:12:05.39ID:???
エスパーじゃないので分かりません
コードとかSQL文を貼ってみてはいかがでしょうか
0097NAME IS NULL
垢版 |
2012/12/25(火) 12:26:49.38ID:???
>>93
すみません
いろいろと調べているのですが見つかりません。

レコード数やフィールド数はビルドオプションで設定ができるのですが、テーブル数の設定は見つけることもできません。
定数ではなく、環境依存の値になってしまうのでしょうか?
0098NAME IS NULL
垢版 |
2012/12/28(金) 01:40:36.64ID:???
テーブル数の上限はたぶん未定義で環境(ディスク残量など)に依存。
ソースを見ても SQLITE_MAX_TABLES みたいなそれらしき記号定数なし。

ためしに機械的な名前(T_0, T_1, .. T_99999)でテーブルを10万個作成してみたが作れた。
0099NAME IS NULL
垢版 |
2012/12/29(土) 00:55:06.02ID:???
予想だけど…。

SQLiteは作ったテーブルやインデックス、ビュー、トリガーとかのスキーマ情報を、
同じファイル内の特殊な予約テーブル"sqlite_master"に格納してる。
で、レコード数の上限は2の64乗=18446744073709551616と書いてある。
これをテーブル情報だけで全部使い切るには1800京個くらいのテーブルを作る必要があるけど、
仮に1レコード1バイトしか使わなかったとしても全部使えばsqlite_masterテーブルだけで170億GBくらい必要。
実際にはテーブル情報以外にも格納するから、もう少し減るとは思うけど、事実上無制限。

と、ここまで書いて気がついたけどsqlite_masterが埋まる前にページ数の上限の方が先に来るのかな?
アーキテクチャをちゃんと読まないで適当に書いてるけど、sqlite_masterの各行に、それぞれのデータが
格納されているページ番号(の先頭)を指定してた気がするから、ページ番号とB-Treeの先頭の対応が1:1で、
それぞれのテーブルが全部1ページ内に収まってるとすれば、ページ数の上限は2の31乗-2=2147483646だと
書いてあるから、そっちの上限に先に到達するのかもしれない。


どっちにしても通常運用で支障が出ることはないくらい沢山作れそうだけど、
嘘をいっぱい書いてるかもしれないので詳しい人いたら解説お願いします。
0101NAME IS NULL
垢版 |
2013/01/07(月) 09:17:58.44ID:6FlDIcs/
10万個もテーブル作れるならもう1データ1テーブルとかでもいいかと思ってしまうわ。
実際にはやんないけどSQLiteで扱う程度のデータならそこまで大規模になるなら別のDB使うだろうし。

それにしても暗号化ないのがちょっと不安になるわ。
案件にもよるんだろうけどみんな暗号化とかそういうの気にせず使ってるの?
0102NAME IS NULL
垢版 |
2013/01/07(月) 16:13:46.18ID:???
他で暗号化してから格納したら?
0103NAME IS NULL
垢版 |
2013/01/07(月) 16:58:50.08ID:???
案件によるって書いてあるじゃんw
0104NAME IS NULL
垢版 |
2013/01/07(月) 18:30:21.13ID:???
気にせずと言うか、SQLiteを使う案件で、かつ暗号化が必要というのに今のところ出くわしたことが無い。
もしそういうのが来たら自前で暗号化して積むか、本家の暗号化オプション買うかの2択かなあ。
0105NAME IS NULL
垢版 |
2013/01/07(月) 22:41:13.14ID:???
自前で暗号化とかすると検索が面倒になる気がしないでもないけどSQLiteは文字通りLiteなんだからしょうがないか
0106NAME IS NULL
垢版 |
2013/01/07(月) 23:02:36.88ID:???
と言うか先にデータを暗号化してからinsertするじゃ意味無いよね?
>>104はSEEを買うか、代わりにvfsで暗号化レイヤーを実装するか、って話だと思ってた…
0107NAME IS NULL
垢版 |
2013/01/08(火) 02:24:15.71ID:???
>>105
隠したい項目(暗号)をWHERE条件で検索できたら そもそも駄目じゃない?
0109NAME IS NULL
垢版 |
2013/01/09(水) 10:37:48.50ID:PQochI3F
質問です。

全角半角大文字小文字の英数字が入り交じった項目があって、これらを全て同一視して検索する手段はありますでしょうか。
また、ひらがな、カタカナについても、おなじく同一視して検索する手段はありますでしょうか。
0110NAME IS NULL
垢版 |
2013/01/09(水) 18:22:22.81ID:???
質問の意味が分からない
同一視って何?
0111NAME IS NULL
垢版 |
2013/01/09(水) 19:22:29.52ID:???
A=A=a=aとして扱いたいんでしょう。
0112NAME IS NULL
垢版 |
2013/01/09(水) 21:05:14.98ID:???
select文を全角で入れたいのかもしれん。
0113NAME IS NULL
垢版 |
2013/01/09(水) 21:13:02.83ID:???
検索対象の文字列がカラム A に入っているとする。

まずカラム A の文字列の英小文字を英大文字に変換する。
上記で変換したデータの中の、半角英数記号カタカナを全角に変換する。
上記で変換したデータのカタカナを平仮名に変換する。
ここまで変換したら、検索専用カラム AA に格納しておく。

※必要であれば、ギリシア文字やロシア文字の小文字大文字変換も。

検索にあたっては、キーワードを上記ルールで変換してから、カラム AA
に対して where 条件を使う。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況