- - PR -
SQL_Latin1_General_CP850_BINについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-12-20 12:48
前にも同様なメッセージを記述させて頂きましたが、また質問させていただきました。
B開発にてMS2000のSQLより、データを参照することを行っておりますが、問題にぶつかり、悩んでおります。お忙しい中、申し訳ありませんが、 アドバイスをいただけないでしょうか。 SQL:MS(マイクロソフト)SQLServer2000(英語版) 接続方法:ADO データベースの照合順序:SQL_Latin1_General_CP850_BIN テキストフィールドをKEYとした場合で「あいまい検索:LIKE」が「@正常に 機能する場合」と 「A機能しない場合」があり、当然ながらAについて 悩んでおります。 「うまくいかない」というのは「該当するレコードが無い」 という状態になるという意味です。 ■1.LIKEの指定 以下のように検索値を「変数A」とし、後の2,3のように変数を設定して おりその内容によって、@、Aのようにケースが分かれます。 strSQL = "SELECT フィールド名 FROM テーブル名 " _ & "WHERE フィールド名(Key) LIKE " _ & "'[" & 変数A & "-" & 変数A & "]%'" ■2.正常に機能する場合@ 上記「1」のSQL文を実行する前に、以下のように半角英数字を1文字 指定。この場合は、正常に該当レコードをとってきます。 変数A = "A"("3"でも可) ■3.正常に機能しない場合A 上記「1」のSQL文を実行する前に、以下のようにカナや全角文字を 1文字指定。この場合は、正常に該当レコードをとってきません。 (該当なし) 変数A = "ア" ("あ"、"全"、"5"、"B"などの全角文字も全て不可) cf:LIKEの後、以下のような他の指定も半角であっても機能しません でした。 ・'%変数A%' ・'___変数' ちなみに以下のように「COLLATE Japanese_BIN」で指定すると条件には 一致しない無関係なレコードが抽出されました。 「COLLATE Japanese_CI_AS」でも全く同じ結果でした。 strSQL = "SELECT CSKS.KOSTL,CSKT.KTEXT,CSKT.LTEXT FROM CSKS " _ & "INNER JOIN CSKT ON (CSKS.MANDT = CSKT.MANDT) " _ & "AND (CSKS.KOKRS = CSKT.KOKRS) " _ & "AND (CSKS.KOSTL = CSKT.KOSTL) " _ & "AND (CSKS.DATBI = CSKT.DATBI) " _ & "WHERE (CSKS.MANDT = '100') " _ & "AND CSKS.KOKRS BETWEEN '1000' AND '9000' " _ & "AND CSKS.KOSTL BETWEEN '000000' AND 'ZZZZZZ'" _ & "AND CSKS.DATBI = 99991231 " _ & "AND CSKT.KTEXT LIKE" & "'%" & CoTB2 & "%'" _ & "COLLATE Japanese_BIN" _ & " ORDER BY CSKS.KOSTL " _________________ |
|
投稿日時: 2005-12-20 14:27
シングルクォートの前にNをつけては如何ですか?
例としてはこんな感じ。 select * from tbl where fld like N'%あ%' それから、既にそうなっていらっしゃるかもですが、US版で日本語を使用する時は、ntextやnvarchar等のUnicodeデータをサポートしている型が良いと想います。 |
|
投稿日時: 2005-12-20 15:09
さいた様
おせわになります。 どみのです。 アドバイスありがとうございます。 1.シングルクォートの前にNつけるについて。 対応してみたのですが、失敗しました。 該当なしになってしまいました。 2.ntextやnvarchar等のUnicodeデータをサポートしている型 おはずかしい話ですが、どのようにプログラム内で記述すれば 良いのか、よくわかりません。 もし、よろしければ、教えて頂けないでしょうか。 大変、お忙しい中、申し訳ありませんがよろしくお願い致します。 |
|
投稿日時: 2005-12-20 20:19
どみの様、
すみません、自分もUS環境で同じ様な状況になり、よく焦る事があるのでNのつけ忘れかな、と思いサクリと書き込んでしまいました。 自分の使っているSQLは、コレーション等はいつもDefaultなので、もしかしたら当てはまらない可能性があるかもしれません。もし、お時間の無駄になってしまったらすみません<(__)> 1.について。 もしテーブルの列のデータ型がUnicode対応ではない、CHAR/VARCHAR/TEXTの場合、Nをつけてもヒットしないと思います。 確認方法は、SQLServerのエンタープライズマネージャやクエリアナライザで見れます。 2.について。 nvarcharやntextはテーブルの列の型なので、通常はテーブルを作成する時に指定します。 また、このテーブルにデータを挿入する際も、シングルクォートの前に N が必要です。 テーブルの作成とデータの挿入、検索のミニサンプルは以下の通りです create table T1 ( F0 int primary key, F1 NText) insert into T1 values( 1, N'あああ') insert into T1 values( 2, N'あいう') insert into T1 values( 3, 'あいう') select * from T1 where F1 like N'%い%' -- F0=2のデータだけヒットします select * from T1 -- F0=3のデータは、F1が ??? になってしまいます 自分の環境では↑で期待通りに動作しました。 もしお時間あれば、この様な小さなサンプルで御確認頂けたらと思います。 ただ、原因がこれだとすると、検索でヒットする、しないにかかわらず、まず日本語の文字がちゃんと見えないのでは?と思います。(クライアントがUS環境ですと、どちらにしても見れない可能性がありますが) なのでお役に立てれば嬉しいのですが、もしかすると本当にアテハズレかもしれません(汗;。 |
|
投稿日時: 2005-12-21 07:33
さいた様
おせわになります。 どみのです。 アドバイスありがとうございます。 1.について おそらくUnicodeです。 2.について 基本的には、テーブル参照しか考えていないのですが・・・ 確かに、テーブルの中をみると「nvarchar」という型 が、存在しました。 3.その他 確かにおっしゃるとおり、最初は、テキスト項目が文字化け して日本語が見えない状態でした。 そこで、いろいろ試した結果、以下の設定を施すと、日本語 が正常に表示されるようになりました。 ですから、もしかすると、また、これと似通ったの設定をすれ ば良いのでは?とも考えたのですが、対応方法が全くわからず 悩んでおります。この指摘をされた、さいた様はスゴイと思い ます。 cn.open "Provider=SQLOLEDB ;Server=Servar1;Database=DB1;Persist Security Info=TRUE;User ID=sa;@Auto Translate=False;Current Language=Japanese;" @の「Auto Translate」を「False」にすると日本語表示ができるように なりました。 |
|
投稿日時: 2005-12-21 18:15
プロバイダの接続オプションで表示できる様になりましたか!
なるほど!自分も勉強になりました<(__)> |
1