Dziś miałem do czynienia z dość niespodziewanym, jednak bardzo pozytywnym zachowaniem bazy danych Oracle. Mianowicie w odróżnieniu od pozostałych (większości) baz danych, Oracle w bardzo prosty, a zarazem ciekawy sposób radzi sobie z różnicą kodowania znaków pomiędzy klientem, a serwerem. Większość systemów RDBM w takich sytuacjach dostarcza różnego rodzaju ślaczki, tak Oracle zamienia je na ich odpowiedniki z standardowego zbioru ASCII. Oczywiście pisze tutaj o domyślnym rozwiązaniu konfiguracyjnym nie określającym kodowania znaków, na szczęście zmiana zachowania bazy danych to ustawienie tylko jednej zmiennej, chodź i ta może przyjmować nieco egzotyczne wartości, i tak znane:
- WIN1250 (CP1250) odpowiada EE8MSWIN1250, czy bardziej pełna wersja POLISH_POLAND.EE8MSWIN1250
- LATIN2 (ISO-8859-2) - POLISH_POLAND.EE8ISO8859P2
Zmienne te ustawiamy dla PHP poprzez funkcje putenv();
Rozwiązanie to ma jedną moim zdaniem wadę- “ładna” konwersja znaków mniej “rzuca” się w oczy, co utrudnia wykrycie ewentualnych błędów związanych z tą funkcją.