# Oracle DB - Date und Language verändern?



## xaitech (20. August 2005)

Hallo,
ich bin dabei einige Selects auf eine Oracle DB zu machen...dabei habe ich 2 Probleme.
1.) Alle Daten aus der DB haben falsche Umlaute, d.h. ä wird als a, ü als u, ß als ? usw. dargestellt. Die Daten liegen in der DB allerdings in der richtigen Form. Ich greife per PHP auf die DB zu. Vielleicht kann ich im ocilogon(); oder in der Select-Anweisung die Sprache festlegen?

2.) Ich habe ein DATE-Feld in der DB. Beim Auslesen bekomme ich die Ausgabe: 09-AUG-05. Wie kann ich diese Ausgabe beeinflussen, sodass ich z.B. 9. August 2005 erhalte.


Danke junx,
xai


----------



## Exceptionfault (21. August 2005)

Hi,

Beide Punkte die du angesprochen hast sind auf deine Client Einstellungen zurückzuführen. Der Oracle Client übernimmt vom Betriebssystem die Ländereinstellungen und liefert die Daten in entsprechendem Format.

Dies kannst du natürlich individuell anpassen, entweder direkt im Betriebssystem, oder individuell für jede Connection / Session. Es gibt bei Oracle jede Menge NLS_* Parameter die festlegen welchen Zeichensatz der Client verwendet, welche Sprache etc.

Der übergeordnete ist NLS_LANG. Setze diesen z.B. folgendermassen:


```
ALTER SESSION SET NLS_LANG = GERMAN_GERMANY.UTF8;
```

Dann bekommst du alles in deutsch und Unicode (sofern PHP was damit anfangen kann?)
Das Datumsformat kannst du dann noch individuell anpassen mit


```
ALTER SESSION SET NLS_DATE_LANGUAGE = GERMAN;

SQL> select to_char(sysdate, 'Day,DD. MonthYYYY') from dual;

TO_CHAR(SYSDATE,'DAY,DD.MONT
----------------------------
Sonntag   ,21. August   2005
```


----------



## xaitech (21. August 2005)

Hi,
danke für deine Antwort.
Haur nur noch nicht so ganz hin im PHP bei mir. Ich kann auch leider nicht clientseitig auf den Server/DB connecten, da es sich um eine öffentliche DB einer Stadt handelt. Ich hab auch nur einen VIEW...also alles sehr eingeschränkt.
Nun habe ich im PHP folgendes ausprobiert:
--------------------------
$db_conn = ocilogon( "name", "passwort", "oradb1" ) or die ("Verbindung zur Datenbank nicht möglich. Versuchen Sie es später noch einmal.");

$parsed = ociparse($db_conn, "ALTER SESSION SET NLS_LANG = GERMAN_GERMANY.UTF8");
ociexecute($parsed);
--------------------------
Dabei bekomme ich folgende Fehlermeldung: ociexecute(): OCIStmtExecute: ORA-00922: missing or invalid option

Eine Idee?
Danke

Grüße,
xai


----------



## Exceptionfault (21. August 2005)

Sorry, mein Fehler. NLS_LANG kann man nicht in der Session setzen. Aber du kannst die Language und das Territory einzeln setzen:

Also :
ALTER SESSION SET NLS_TERRITORY = GERMANY;
ALTER SESSION SET NLS_LANGUAGE = GERMAN;


----------



## xaitech (21. August 2005)

Hallo,
ja jetzt sieht die Datumsausgabe gut aus. Halt normal "09.08.05".

Nur die Umlaute werden immer noch nicht angezeigt...sieht wohl so aus, als müsste ich den DB-Admin anrufen.


Gruß,
xai


----------

