Jeg har en "NAME_TYPE" der er NVARCHAR2(20) i min names_and_notations tabel, hvor name_type kun kan være PrimaryName eller AlternativeName (hvilket checkes med en check-constraint).
select name_type from names_and_notations where name_id = 0; NAME_TYPE -------------------- PrimaryName
Kan nogen så forklare mig, forskellen på de to følgende select-queries:
Select count(*) from names_and_notations where NAME_TYPE = 'PrimaryName';
COUNT(*) ---------- 0
Select count(*) from names_and_notations where LOWER(NAME_TYPE) = 'primaryname';
COUNT(*) ---------- 4625
Hvorfor finder NAME_TYPE = 'PrimaryName' lige præcis 0 forekomster?
Det eneste jeg umiddelbart kan komme i tanke om, er at det er Unicode der spøger. Når du definerer kolonnen som NVARCHAR2, gemmes data som Unicode-værdier. Og så ved jeg faktisk ikke om din strengkonstant 'PrimaryName' er i Unicode også - det må afhænge af databasens tegnsæt.
Hvis du har mulighed for det, kan du evt. prøve at definere din kolonne som VARCHAR2 i stedet.
Du kan evt. prøve at lave
SELECT dump(name_type) FROM names_and_notations WHERE ROWNUM=1,
og
SELECT dump('PrimaryName') FROM dual;
for at se om de giver det samme. Men der kan også komme diverse tegnsæt-konverteringer i spil, så selv om de er forskellige, kan Oracle måske godt få dem til at være ens.
Jeg faldt over følgende formulering i Oracles dokumentation:
Implicit Conversion Between CHAR/VARCHAR2 and NCHAR/NVARCHAR2
In previous releases (Oracle8i and earlier), the NCHAR and NVARCHAR2 types were difficult to use because they could not be interchanged with CHAR and VARCHAR2. For example, an NVARCHAR2 literal required special notation, such as N'string_value'. Now, you can specify NCHAR and NVARCHAR2 without the N qualifier, and can mix them with CHAR and VARCHAR2 values in SQL statements and functions.
Tja - jeg troede så bare at Oracle faktisk konverterede strengene passende - sådan forstår jeg i hvert fald beskrivelsen (hvis char1 og char2 er af hver sin type, konverteres til char1). Det kunne være interessant at lave samme forsøg med "lower"-udgagen.
Men noget rigtigt godt bud på en løsning har jeg vist ikke...
Ja, det er meget mystisk. Vi har netop nu fået problemet igen i en anden tabel ved en anden af vores udviklere. Der går meget forundrelse igennem kontoret :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.