Avatar billede steber Nybegynder
21. juni 2010 - 08:11 Der er 5 kommentarer og
1 løsning

NVARCHAR2 vs. VARCHAR2( x CHAR) ?

Hej Oracler,
Overvejer hvad der er bedst at bruge generelt til at gemme tekst hvor der kan forekomme specialtegn - skal jeg bruge fx NVARCHAR2(20) eller VARCHAR2( 20 CHAR). Jeg skal tage en mere overordnet beslutning.
Som jeg husker det fylder NVARCHAR2 altid multibyte/plads, og VARCHAR2( x CHAR) fylder multibyte hvor nødvendigt. Jeg plejer at bruge den sidste metode. Jeg kan ikke være sikker på at Oracle-databaserne jeg arbejder på er sat ens op.
Hvad er jeres overvejelser og pros/cons?
Takker for alt input.
Avatar billede arne_v Ekspert
22. juni 2010 - 03:12 #1
NVARCHAR i SQLServer er altid 2 bytes per char.

Men det mener jeg ikke er tilfældet i Oracle, da den så vidt jeg ved også kan bruge UTF-8.

http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/datatype.htm#i3253

Use of Unicode Data in an Oracle Database

Unicode is an effort to have a unified encoding of every character in every language known to man. It also provides a way to represent privately-defined characters. A database column that stores Unicode can store text written in any language.

Oracle users deploying globalized applications have a strong need to store Unicode data in Oracle databases. They need a datatype which is guaranteed to be Unicode regardless of the database character set.

Oracle supports a reliable Unicode datatype through NCHAR, NVARCHAR2, and NCLOB. These datatypes are guaranteed to be Unicode encoding and always use character length semantics. The character sets used by NCHAR/NVARCHAR2 can be either UTF8 or AL16UTF16, depending on the setting of the national character set when the database is created. These datatypes allow character data in Unicode to be stored in a database that may or may not use Unicode as database character set.
Avatar billede arne_v Ekspert
22. juni 2010 - 03:13 #2
Ovenstående læser jeg som: bruger du COBOL programmer på IBM mainframe så forsæt endelig med VARCHAR2 men hvis du bruger Java/.NET/PHP etc. til noget web relateret så bør du bruge NVARCHAR2.
Avatar billede steber Nybegynder
23. juni 2010 - 07:01 #3
Det jeg tænker på er, at når man nu har en Oracle-database der er sat op så NVARCHAR2 fylder 4 bytes per character, er det så bedre at bruge VARCHAR2( x CHAR)? Fordi x CHAR definitionen kun giver flere bytes per character ved special-characters - eller er det noget jeg har misforstået? Synes ikke jeg kan finde endegyldig dokumentation på det.
Avatar billede arne_v Ekspert
23. juni 2010 - 16:03 #4
Hvis NVARCHAR2 er sat til UTF-16 fremfor UTF-8 saa bruger det mere plads end VARCHAR2.

Men jeg tror ikke at der er mange tilfaelde hvor:
1) forskellen betyder noget
2) det ikke er muligt at skifte fra UTF-16 til UTF-8
Avatar billede steber Nybegynder
01. juli 2010 - 21:12 #5
Hej arne_v, Tak for dine tanker. Smider du ikke et svar ... så kan jeg lukke sagen.
Avatar billede arne_v Ekspert
01. juli 2010 - 21:22 #6
svar
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester