Avatar billede stephanryer Nybegynder
21. juni 2006 - 16:23 Der er 15 kommentarer og
1 løsning

VarChar kontra Char - Fjerne overskydende mellemrum ved udtræk

1. Jeg har en tabel i MS SQL, der indeholder en char(50)
2. Jeg trækker varchar-data ud i .NET

Hvis jeg kun har brugt f.eks. 4 tegn, er de resterende tegn mellemrum. Jeg får altså en streng der ser ud som følger:

"1234                                "

Dette gør, at jeg er nød til at fjerne mellemrum manuelt ved at bruge String.Replace(" ", "") som udskifter hvert mellemrum med ingenting.

Er der en smart måde at sørge for ikke at få overskydende mellemrum med ved udtræk ?

På forhånd tak
Avatar billede arne_v Ekspert
21. juni 2006 - 16:32 #1
hvad sker der hvis du angiver feltet som Char i .NET ?

ellers er

s = s.TrimEnd(" ".ToCharArray());

nok paenere
Avatar billede stephanryer Nybegynder
21. juni 2006 - 17:04 #2
det ER skam angivet som Char. med SqlDataType.Char

Alligevel får man alle de mellemrum.

Men kan det virkelig passe at det er nødvendigt for brugeren selv at trimme strengen? Det finder jeg hverken kønt eller brugervenligt.
Avatar billede arne_v Ekspert
21. juni 2006 - 17:31 #3
En CHAR er jo et fast laengde felt, hvis man vil have variabel laengde bruger man VARCHAR.
Avatar billede stephanryer Nybegynder
21. juni 2006 - 18:08 #4
Dvs det er almindeligt at man trimmer tekstrengen i koden når man bruger CHAR?
Avatar billede stephanryer Nybegynder
21. juni 2006 - 18:09 #5
Havde forestillet mig det kunne ske automatisk et eller andet sted fra .NETs side
Avatar billede arne_v Ekspert
21. juni 2006 - 18:59 #6
Jeg mener faktisk at nogle database selv trimmer trailing spaces af returnerede CHAR columns.

Men jeg kender ikke nogen smart option til ADO.NET ...
Avatar billede ldanielsen Nybegynder
22. juni 2006 - 10:05 #7
Du kan trimme det i din SQL:

SELECT LTRIM(strCharField) AS strCharField FROM Tabel
Avatar billede ldanielsen Nybegynder
22. juni 2006 - 10:05 #8
Undskyld det skulle være RTRIM
Avatar billede stephanryer Nybegynder
22. juni 2006 - 10:09 #9
Well har valgt at bruge NVARCHAR istedet for char for overskuelighedens skyld, så det sikres, at der ikke opstår fejl i forbindelse med sammenligning af strengen pga. mellemrum.

Men læg et svar begge to :)
Avatar billede ldanielsen Nybegynder
22. juni 2006 - 10:17 #10
Nej tak, ikke for så lidt. Jeg vælger også at bruge varchar.

Grunde til at bruge char:

Performance, databasen ved præcis hvor meget hver post fylder, derfor kan den optimere datafilerne og indexerne bedre (har jeg hørt)

Brug for at lave tekstudtræk med fixed length i stedet for en delimitter.
Avatar billede stephanryer Nybegynder
22. juni 2006 - 10:19 #11
jeps, well det skulle være pga. performance at det skulle vælges i dette tilfælde. Men ulempen er for stor, i de tilfælde man glemmer at trimme en VARCHAR.

:)
Avatar billede ldanielsen Nybegynder
22. juni 2006 - 11:06 #12
At vælge datatype udfra programmørens forventede glemsomhed, tja ... :o)
Avatar billede stephanryer Nybegynder
22. juni 2006 - 15:01 #13
haha, ja :D
Avatar billede arne_v Ekspert
23. juni 2006 - 02:17 #14
og performance forbedringen eksisterer kun hvis VARCHAR'en er næsten fyldt op

hvis ikke den er det så giver den mindre størrelse mindre disk IO og dermed
bedre performance med VARCHAR
Avatar billede arne_v Ekspert
23. juni 2006 - 02:18 #15
et svar fra mig
Avatar billede stephanryer Nybegynder
23. juni 2006 - 12:07 #16
oki, tak for hjælpen begge :) Her er point til dig, Arne.
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