2

残念ながら、Advantage Database ServerTortureEditionバージョン8.1を使用しています。プロジェクトを終了した後、データベースは大文字と小文字を区別するように構成されていると聞きました。そこで、テーブル構造、すべてのCharデータ型をCICharに変更しました。これは、大文字と小文字を区別しないcharフィールドです。しかし、プログラムの実行中にこのエラーが発生します。

Advantage.Data.Provider.AdsException:

エラー7200:AQEエラー:状態= HY000; NativeError = 2214; [拡張システム][利点SQLエンジン]無効な強制:式の結果があいまいな文字タイプです。

ISNULL(myciChar、'')がこの問題を引き起こしていることがわかりましたが、なぜですか?どうすればこの問題を解決できますか?cicharデータ型に関する他の既知の問題はありますか?

どんな助けでもありがたいです。ありがとう。

[アップデート]

このエラーの理由を見つけました。明確にするために2つのポイントがありました。

  1. データベースのバージョンは8.1ですが、データアーキテクトのバージョンは7.1であり、ローカルモードではアーキテクトエンジンのバージョン7.1を使用します。これは、v7.1の問題であることを意味します。
  2. isnull関数の2番目のパラメーターは、バージョン7.1ではデフォルトで大文字と小文字を区別する照合ですが、私の列mytextはcicharであり、これはあいまいな文字タイプです。したがって、誰かが同じ問題を抱えている場合、v7.1ではcollat​​e宣言を使用して機能します。

v7.1で動作します:

select myid, isnull(mytext, '-' COLLATE ads_default_ci) as mytext from mytable

v7.1のエラー:

select myid, isnull(mytext, '-') as mytext from mytable
4

2 に答える 2

1

おそらく、このエラーが発生する理由を説明するために、式をもっと見る必要があります。ISNULLは、ISNULLが使用されている式ほど関係がありません。エンジンで比較が発生した可能性があり、比較で大文字と小文字を区別するかどうかを自動的に判断できませんでした。大文字と小文字を区別しない優先順位と強制について説明しているドキュメントを参照してください。

式で使用されていない場合は、バグである可能性があります(10.1で試したところ、機能しました)。最新バージョンの8.1(8.10.0.38)を使用していることを確認してください。

于 2011-05-14T04:31:19.533 に答える
0

バージョン7はcicharデータ型をサポートしているとは思いませんが、バージョン6は確かにサポートしていません。私はバージョン6を使用していて、直接8に移行しましたが、cicharデータ型を使用してAdvantageのゲームオーバーになるまで、すべてがバージョン6のクライアントドライバーで機能することがわかりました。次に、すべてのクライアントをサーバーと同じバージョンに更新する必要がありました。すべてのバージョンを同じに保つのが最善です。

于 2014-04-08T21:33:23.560 に答える