evilaidMedlem sedan apr. 2009431 inlägg
Då tar vi ett nytt problem..
Har ett fält i en MS SQL databas, jag har satt typen till nchar(100)..
Det är inte alltid att det skrivs något i detta fältet när jag sparar nya poster, nu vill jag sortera ut alla poster där fältet inte är tomt.
Jag provade IS NOT NULL men fick ändå med alla tomma poster?
När ska jag använda varchar och nchar? har förståt att det har med unidoce att göra, nkelt förklarat vad innebär unicode??
mvh
Peter SMedlem sedan dec. 20025 484 inlägg
Varchar(N)/nvarchar(N) använder du när längden på strängarna kan variera mellan 0 och N tecken.
Char(N)/nchar(n) använder du när längden på strängarna som sparas alltid har längden N. Om den sträng som skall sparas är kortare justeras längden genom att mellanslag läggs till.
N-varianterna på varchar/char innebär att strängarna sparas som unicode. I unicode representeras varje tecken av två bytes i stället för en byte. Med andra ord kan du i unicode representera fler tecken än t.ex. ASCII.
evilaidMedlem sedan apr. 2009431 inlägg
Okey.
För som jag skrev så har jag ett fält som heter keyword och är av typen nchar(100) och om jag inte sparar något värde så ser det ändå ut som den är helt full av mellanslag när jag kollar i en db manager...
Men då är det ju bäst att använda nvarchar(100) om nu antal tecken kan variera mellan 0-100 och att jag ändå vill kunna spara massa konstiga tecken i cellerna...
Men hur ska jag göra då för att sortera bort alla fält som bara innehåller mellanslag i min sql fråga....
Tar alla dessa mellanslag upp yta? är det bättre att köra någon replace på alla dessa eller ngn typ av trim om det går??
Vet någon vad som händer med datan om jag ändrar datatypen från nchar till nvarchar i ett helt fält??
mvh
Peter SMedlem sedan dec. 20025 484 inlägg
Om du inte sparar någonting i ett nvarchar-/varchar-fält så kommer längden på det fältet att vara 0. Alltså kan du i din SQL-fråga filtrera bort sådana fält med WHERE LENGTH(MyField) = 0. (LENGTH() är LEN() i Access.)
Det bästa är att tillåta NULL-värden för sådana fält och spara NULL i de fall inget värde skall sparas. Sedan filtrerar du bort dem med WHERE MyField IS NULL.
Om datatypens storlek är större än eller lika med det du hade innan, är det inga problem att byta från nchar till nvarchar. Så att byta från nchar(100) till nvarchar(100) är inga problem.
evilaidMedlem sedan apr. 2009431 inlägg
Okey, så jag vill ju ha nvarchar() och tillåta NULL och det innebäringa problem att byta datatyp från nchar(100) till nvarchar(100).
Men är jag skulle byta datatyp så fick jag timeout fel och en varning om det tar lång tid när det är många poster (ca 150 000st). Kan jag byta på ngt annat sätt istället??
Kan jag på något sätt trimma alla min gamla nchar(100) fält som nu innehåller massa mellanslag? alltså ta bort alla mellanslag i kolumnen keyword?
Peter SMedlem sedan dec. 20025 484 inlägg
Du kan byta via kod med ALTER TABLE myTable ALTER COLUMN keyword nvarchar(100)
Sedan kan du köra följande för att trimma befintligt data: UPDATE myTable SET keyword = RTRIM(keyword)
evilaidMedlem sedan apr. 2009431 inlägg
Hej igen
Jag provade att byta via kod men fick timeout nu också. Jag gjorde det ju iof från visual studio. provade också att skapa en asp fil med koden som jag exekverade från servern men får timeout för den också??
vad gör man då?