TNAME
テーブルに という名前の列がありnvarchar2(8)
ます。長さはご覧の通り8です。テーブルにはいくつかのレコードがあり、そのすべての列に 8 つのシンボルがあります。その列を選択すると、値には 7 つのシンボルしか含まれません。I の場合select length(TNAME) from mytable
、結果は 8 です!!!
写真を見てください。
なぜこれが起こっているのですか?
別の写真
TNAME
テーブルに という名前の列がありnvarchar2(8)
ます。長さはご覧の通り8です。テーブルにはいくつかのレコードがあり、そのすべての列に 8 つのシンボルがあります。その列を選択すると、値には 7 つのシンボルしか含まれません。I の場合select length(TNAME) from mytable
、結果は 8 です!!!
写真を見てください。
なぜこれが起こっているのですか?
別の写真
これについて明確にしましょう: Oracle は習慣的に をアサートするため、世界で最も高価なデータベースではありません('CMN00632' = 'CMN0063') is true
。したがって、問題は環境設定またはデータ自体のいずれかのセットアップのどこかにあります。
GUI に問題はないと断言します。これを検証する方法はありません。ただし、あなたが間違っている場合、影響を受けるのはあなただけなので、あなたが正しいと仮定します.
もう 1 つの可能性は、データが何らかの形で破損している可能性があります。おそらく、印刷されていない文字です。この問題は、テーブル内のすべての行または特定の値に影響しますか?
いずれにせよ、実行できる簡単なチェックがあります。
select dump(tname)
from merchants
where tname = 'CMN00632';
出力は、その文字列の ASCII 値である必要があります: 67,77,78,48,48,48,51,50
.
ちなみに、その列に関連付けられた切り捨て形式がないことを証明するのは非常に簡単です:列エイリアスを使用します。このクエリは何を返しますか?
select tname as some_new_name
from merchants
where tname = 'CMN00632';
クエリは正しいです。ご覧のとおり、レコードは条件と一致しますCMN00632
。結果のみを取得している理由3
は、GUI が値を切り捨てるためです。列のサイズを変更するTNAME
と、値全体が表示されます。
これは、設定で、列データを最大 7 文字まで表示するように設定したために発生しています。
コマンド プロンプトでクエリを実行すると、適切な結果が表示されます。
以下のクエリをエディターで実行し、結果を確認します。
select '123456789' as test from merchants;
1234567
これにより、使用しているエディターと同じ結果が得られるに違いありません。
また、1 つの基本的な質問です。クエリを使用して画像に行が表示されると思いますか?