4

特定の列の値が 'FOO - BAR' である Oracle 9i データベースからレコードを取得しようとしています。

'FOO - BAR' 条件値はテーブルに存在しますが、クエリを実行すると結果が表示されません。

しばらく頭を悩ませていたところ、ハイフンの大きさに違いがあることがわかりました。

'FOO – BAR'
'FOO - BAR'

今回は (SQLDeveloper を使用して) DB 値をコピーし、その値を Eclipse IDE に貼り付けました。Eclipse との違いはわかりませんでした。IDE からクエリを実行すると、驚いたことに機能し、値が返されました。

同じクラス ファイルをサーバー (UX ボックス) にデプロイしましたが、再び四角 1 に戻りました。値が来ていません。

IDE のファイル エンコーディングをデフォルト (Cp1252) から UTF-8 に変更してみましたが、すべて問題ありません。

誰かが何が起こっているのか説明できますか? ハイフンのサイズはエンコーディングによって異なりますか? ダッシュには3種類ありますか?

4

4 に答える 4

5

em ダッシュ、en ダッシュ、ハイフンなど、さまざまな Unicode 文字がたくさんあります。これらは、テキスト内のさまざまなコンテキストで使用されます。

詳細については、「Dash」ウィキペディアの記事を参照してください。ハイフンはまったく同じではないことに注意してください:)

エンコーディングがどのように機能するかについては、データを挿入、取得、表示する方法によって異なります。私はカット アンド ペーストの使用を開始しません。これは、データベースで表される実際のデータに最も近い利用可能な値を見つけようとする可能性があります。

于 2010-08-10T09:27:13.090 に答える
3

ダッシュには 3 種類ありますか?

はい。実際、何をダッシュ​​と見なすかにもよりますが、ハイフンとダッシュには 3 つ以上の Unicode コード ポイントがあります。(そして、@Jon Skeet がリンクしているページには、すべてのダッシュ文字がリストされているわけではありません。たとえば、U2500 コード プレーンには 4 つの「水平ダッシュ」コードポイントがあり、「垂直ダッシュ」と「ダブル ダッシュ」が一緒になっています。 .)

ハイフンのサイズはエンコーディングによって異なりますか。

それは答えられない質問です。ハイフンの実際のサイズは、レンダリング ソフトウェアによって画面またはページにどのようにレンダリングされるかによって異なります。ただし、一部の文字セットでは、異なるサイズのハイフンまたはダッシュを概念的に表す異なるコードポイントが存在するという事実が残っています。厳密に言えば、これはエンコーディング 自体とは何の関係もありません。

おそらくここで起こっていることは、文字がさまざまな時点である文字セットから別の文字セットにマップされているということです。ある時点で、ターゲット文字セットは複数のハイフン/ダッシュ文字をサポートしておらず、マッピングは「ファンキーな」ハイフンを「通常の」ハイフンに静かに変換しています。

文字を切り取って貼り付けても役に立ちません。実際のコードポイント値を 16 進数で表示する方法が必要です。

于 2010-08-10T09:38:45.307 に答える
0

ASCII() Oracle関数を使用して、DBに格納されている実際のコードを見つけることができます。例えば

select ascii(substr(t.strng_field, 5, 1)) from string_table t

ただし、このような場合に対処する実際の関数は、文字列列のデータベース文字セットとテーブルを埋めるためのデータのソースに依存します。

convertdecomposeまたはここunistrにリストされている文字列文字セット変換関数から選択できます。

于 2010-08-10T12:52:04.940 に答える
0

テーブルから rawtohex(col) を選択してみてください

  • 私はオラクルインスタンスから離れていますが、これはメモリから機能すると思います。16進ダンプが表示され、コードが検索されます
于 2010-08-10T10:39:28.690 に答える