Sziasztok,
A téma címben nevezett adatbázis kezelő rendszerből feltelepítettem 9.2 verziót. Azóta viszont a rendezés kicsit furcsán működik. Különbséget tesz a kis- és nagybetűk között, amit a régi verzió nem tett.
Nem tud valaki egy megoldást arra, hogy a régihez hasonló módon működjön a rendezés, ahol a kis- és nagybetűk között nem tett különbséget a rendszer.
A netet böngészve sajnos csak olyan megoldásokkal találkoztam, hogy ORDER BY UPPER(mező neve), de ez a megoldás szinte szóba se jöhet, mivel nagyon sok lekérdezésről van szó, amit egyesével átírni egy bő fél napi munka.
Van valakinek valami ötlete a megoldásra?
Előre is köszönöm.
- 5977 megtekintés
Hozzászólások
collation?
- A hozzászóláshoz be kell jelentkezni
CREATE DATABASE
WITH OWNER =
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'C'
LC_CTYPE = 'hu_HU.UTF8'
CONNECTION LIMIT = -1;
- A hozzászóláshoz be kell jelentkezni
A megfelelő nyelvi beállítás meg fogja hozni a kívánt eredményt
$ export CTYPE=hu_HU.UTF8 LC_COLLATE=C
$ sort <<EOT
alfa1
Alfa2
ALFA3
EOT
ALFA3
Alfa2
alfa1
$ export CTYPE=hu_HU.UTF8 LC_COLLATE=hu_HU.UTF8
$ sort <<EOT
alfa1
Alfa2
ALFA3
EOT
alfa1
Alfa2
ALFA3
de ettől függetlenül ha következetesen van írva a kód, egy order by átszerkesztése akárhány forrásfájlban akár szkripttel, akár IDE lehetőségeivel nem tarthat fél napig -- de még következetlen kódolás esetés se igazán.
- A hozzászóláshoz be kell jelentkezni
Nagyon szépen köszönöm. El fogom végezni a nyelvi beállításokat.
Valóban készíthető hozzá egy script, ami átfésülve a kódot javít mindent, de mint minden script futtatás után a tesztelés ismételten rengeteg időt venne igénybe. Ami pedig a kézi átírást illeti kellő számú és méretű portál esetén hidd el, hogy sokáig tart.
- A hozzászóláshoz be kell jelentkezni
psql -c initdb --pgdata=your data dir -E 'UTF-8' --lc-collate='hu_HU.UTF-8' --lc-ctype='hu_HU.UTF-8'
vagy valami hasonló, utána visszaállítani a mentést, hátha
- A hozzászóláshoz be kell jelentkezni
Na igen, ezt a részét sose szerettem a PostgreSQL-nek. Nem mintha más adatbázis kezelő rendszerek jobban csinálnák. Amiben létrehozod initdb-vel az adatkönyvtárat, azt használják az adatbázisok. Bár elméletileg megvan a lehetőség hogy create database -nek megadj encoding és collation paramétereket, de egyrészt ez nem mindig működik (pl. ha initdb ascii volt akkor latin2-re nem fog menni mert "incompatible") másrészt meg kapcsolaton belül nem lehet collation-t váltani. Ez utóbbi a legnagyobb szívfájdalmam, mert így nem lehet olyan többnyelvű programot írni, aminél a rendezés nyelvét váltani lehetne. Mivel a collation nem a lekérdezésben van hanem az adatbázisban. Bár azt már 9.1-ben megcsinálták hogy oszlopra lehessen külön collation-t megadni (create table-ben) viszont sajnos ez még mindig nem az igazi. Mert ha egyszerre több nyelven vannak benne adatok, akkor rendezni még mindig csak egy collation alapján lehet...
- A hozzászóláshoz be kell jelentkezni
És az lc-collate csak úgy módosítható, hogy létrehozom újra az adatbázist a megfelelő lc-collate-vel és beletöltöm a backupot? Tehát on the fly kiesés nélkül nem lehet megoldani?
- A hozzászóláshoz be kell jelentkezni
Nem tudok róla hogy lehetne, de éles rendszeren amúgy sem kísérleteznék.
ALTER DATABASE ???? SET LC_COLLATE to 'hu_HU.UTF-8'; szerintem nem fog menni.
CREATE DATABASE ????
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'hu_HU.UTF-8'
LC_CTYPE = 'hu_HU.UTF-8'
CONNECTION LIMIT = -1;
Aztán beletolod az adatokat és kipróbálod.
- A hozzászóláshoz be kell jelentkezni