Podpora slovenčiny i s triedením v PostgreSQL a Ruby on Rails
Ak používate PostgreSQL databázu a radi by ste slovenké písmenká i triedenie mali, nasledujúci návod vám k tomu pomôže.
Keďže používam Gentoo distribúciu, uvediem aj kroky potrebné pre úspešné používanie slovenčiny na tejto distribúcii.
A ako posledné si ukážeme, ako to všetko použiť v Ruby on Rails.
Inštalácia
Inštalácia je pod Gentoo veľmi jednoduchá:
-
emerge postgresql rails
Moje use flags pre postgresql
sú:
-
libg++ nls pam python readline ssl zlib -doc -kerberos -perl -pg-intdatetime (-selinux) -tcl -threads -tk -xml
a pre rails
:
-
postgres -doc -examples -fastcgi -mysql -sqlite -sqlite3
Nastavenie locale
V súbore /etc/locale.gen
je potrebné pridať definíciu pre slovenčinu, t.j. hodnotou sk_SK.UTF-8 UTF-8
. Moje nastavenie tohto súboru vyzerá nasledovne:
-
en_US.UTF-8 UTF-8
-
sk_SK.UTF-8 UTF-8
Pre vygenerovanie zadefinovaných (a pridaných) locales je potrebné zavolať nasledovný príkaz:
Inicializácia PostgreSQL
Pre správne slovenské triedenie je potrebné inicializovať PostgreSQL s parametrom --lc-collate sk_SK.UTF-8
, t.j.
Takže nastavenie sa robí pre všetky databázy.
Žiaľ podľa mojich doterajších znalostí, nie je možné zmeniť spôsob triedenia pre existujúcu databázu. Jediný spôsob je exportovanie existujúcej databázy, zmazanie dátového adresára, inicializácia PostgreSQL s novým triedením a importovanie databázy.
Vytvorenie novej databázy
Novú databázu vytvoríme s UTF-8 kódovaním:
-
createdb -E utf-8 meno_databázy
Napríklad vytvorenie troch databáz pre Ruby on Rails aplikáciu s nezameniteľným menom app :)
Nastavenie v RoR aplikácii
Aplikácia má podporovať UTF-8 kódovanie; nastavenie je popísané na stránke HowToUseUnicodeStrings.
Nastavenie pre databázu musí obsahovať riadok encoding: unicode
:
-
adapter: postgresql
-
database: app_development
-
username: ondrej
-
host: 127.0.0.1
-
encoding: unicode
Ukážka konfiguračného súboru:
-
development:
-
adapter: postgresql
-
database: app_development
-
username: ondrej
-
host: 127.0.0.1
-
encoding: unicode
-
-
test:
-
adapter: postgresql
-
database: app_test
-
username: ondrej
-
host: localhost
-
encoding: unicode
-
-
production:
-
adapter: postgresql
-
database: app_production
-
username: ondrej
-
host: localhost
-
encoding: unicode
Záver
S týmito nastaveniami bude aplikácia ukladať i načítavať dáta v UTF-8 kódovaní a prípadné triedenie podľa textových stĺpcov je pekne po našom. :)