Tegnsett, django(python) og Oracle

For de som har tenkt å sette opp en django-insatallsjon som skal snakke med Oracle (og for andre som interesserer seg for tegnsett..):

Dersom du skal jobbe med UTf-8 tegnsett i django (default), husk at du må passe på at databasen skal takle tegnsettet og, om nødvendig, greie å konvertere rett på sin side. Python bruker cx_Oracle for å snakke med databasen, og denne må også være kompilert med Unicode-support. Det sikreste viser seg å være å laste ned kilden til cx_Oracle og kompilere med unicode support.

Dersom du skal, som jeg, bruke en database som er satt opp uten UTF-8 som tegnestt må du  i tillegg bruke nvarchar i stedet for varchar når du skal lagre tekst i databasen. Dette gjør visstnok Django for deg, dvs. å opprette tabeller med nvarchar2 for tekst. Nvarchar bruker utf-16 encoding. Det virker som om Django krøller det til når databasen ikke er satt opp med UTF-8 som default.

For alle slike installasjoner gjelder det uansett å huske:

– databasen har étt tegnsett
– webserveren/database-klienten har étt
– applikasjonen (om du har en, slik som django) har étt
– web-klienten har også ett tegnsett

Når du redigerer kode har også både shellet og/el editoren ett tegnsett. Alt skal gjøres rett, til rett tid.. Det greieste er nok å bruke utf-8 over hele fjøla. Litt av problemet er også at problemer med tegnsett ikke viser seg før en innser at applikasjonen skal støtte f.eks. navn fra andre språk enn norsk.

One response to “Tegnsett, django(python) og Oracle”

  1. Pål D. Ekran says:

    Det enkle er som oftest det beste:

    paalde@caprica:~/> env | grep LANG
    LANG=en_US.ISO-8859-1

Leave a Reply

Your email address will not be published. Required fields are marked *