Uz saturu

PostgreSQL un UTF-8

Nolūkā pārliecināties, ka PostgreSQL ir potenciālā DBVS, uz kuru varētu migrēt, jamā tika arī uzinstalēta. Viss ir dikti jau nu feini. Ja neskaita pagaidām vienu lielu problēmu (iespējams, ka problēma slēpjas lielajā roku liekuma rādiusā).

Tātad tā. Inicializējam datu direktoriju:

initdb -E UTF8 /home/sqlpostgres/sql

Tātad tā. Izveidojam datubāzi:

createdb -E UTF8 -Otest test

Izveidojam ideālu tabulu:

create table test (text varchar(254));

Ievietojam divus ierakstus, pirms tam norādot, ka mūsu klienta lokāle ir UNICODE.

pg_set_client_encoding('UNICODE');
pg_query('INSERT INTO test VALUES(\'āžēš\')');
pg_query('INSERT INTO test VALUES(\'ĀŽĒŠ\')');

Piezīmēšu, ka visu daru ar PHP skripta palīdzību un visur viss notiek iekš UTF-8 :)

Un te nu ir pats selekts:

SELECT
  text,
  LOWER(text) AS lowertext,
  UPPER(text) AS uppertext
FROM
  test

Protams, ka rezultāts mani neapmierina.

Un nestāstiet man, ka jānorāda lokāle. Interesanti, kā tad strādā sekojošs PHP koda gabals, kurš spēj mainīt keisu jebkurā valodā rakstītam skriptam? Tiek izmantots PHP multibyte funkcijām pārbagātais modulis.

mb_internal_encoding("UTF-8");
$str_lower = mb_convert_case($str, MB_CASE_LOWER);
$str_upper = mb_convert_case($str, MB_CASE_UPPER);

Ja nu es kaut ko ne tā daru, tad, lūgtum, paskolojiet mani, ok?

Komentāri (20)

  1. Laiks:
    1. endrju @ 2003.11.25. 19:05, teica:
    Komentārs:

    Palasies PostgreSQL lapā par SORT’ingu, LOW’er/UPP’er UTF-8 un .lv chariem.

  2. Laiks:
    2. laacz @ 2003.11.25. 19:06, teica:
    Komentārs:

    endrju: PostgreSQL lapa ir liela. Izsniedz lūgtum linciņus :)

  3. Laiks:
    3. !ob @ 2003.11.26. 01:31, teica:
    Komentārs:

    pat neintereseejoties pilniiga paarlieciiba ka probleema ir PHP nevis pgsql

  4. Laiks:
    4. endrju @ 2003.11.26. 08:15, teica:
    Komentārs:

    laacz: Sorry, bet linku neatceros. Atceros, ka veidojot portālu ar PostgreSQL un UTF-8 – radās problēmas ar SORT’ingu no UTF-8 db,
    tb, nemācēja pareizi kārtot .lv un .ru valodā
    Pameklējos google/pgsql saitos un šo to noderīgu arī atradu. Mailinglistēs, ja nemaldos.

  5. Laiks:
    5. pods @ 2003.11.26. 10:35, teica:
    Komentārs:

    vismaz m$ sqlserver unicodei ir atsevishkjs datu tips: nvarchar, nevis varchar

  6. Laiks:
    6. viestards @ 2003.11.26. 11:41, teica:
    Komentārs:

    esmu neziniitis Postgresql, tacu ieksh
    http://www.postgresql.org/docs/7.4/static/multibyt... , tabulaa 20-1 pie servera char setiem nav mineets UTF-8, bet gan unicode. varbuut jaaraksta
    createdb -E UNICODE -Otest test

  7. Laiks:
    7. viestards @ 2003.11.26. 11:48, teica:
    Komentārs:

    esmu neziniitis Postgresql, tacu ieksh
    http://www.postgresql.org/docs/7.4/static/multibyt... , tabulaa 20-1 pie servera char setiem nav mineets UTF-8, bet gan unicode. varbuut jaaraksta
    createdb -E UNICODE -Otest test

  8. Laiks:
    8. CooLynX @ 2003.11.26. 12:52, teica:
    Komentārs:

    viestards saka patiesiibu. tikko pakonsulteejos pie koleegja – tieshaam ir jaraksta createdb -E UNICODE …

  9. Laiks:
    9. KRISHA @ 2003.11.26. 12:55, teica:
    Komentārs:

    Jaa unicode gan, pietam kad /l listo datubaaazes tur raada encodingu, so tur arii ja by default ir SQL_ASCII, tad buutu jabuut UNICODE..

  10. Laiks:
    10. laacz @ 2003.11.26. 13:25, teica:
    Komentārs:

    !ob, ar PHP te nav nekaada sakara :) No konsoles tieši tas pats :)

    KRISHA: Ir, ir UNICODE :)

    Viestards, CooLynX: UTF-8 ir UNICODE sinoniims throughout all of PostgreSQL

  11. Laiks:
    11. CooLynX @ 2003.11.26. 14:06, teica:
    Komentārs:

    laacz: tieshi taa pat kaa iso8859-13 ir sinoniims windows-1257 ne? :)

  12. Laiks:
    12. laacz @ 2003.11.26. 14:20, teica:
    Komentārs:

    CooLynX: nope. UTF-8 ir Unicode apakshsets. Savukaart Windows-1257 un ISO-8859-13 ir viens un tas pats (http://www.w3.org/International/O-charset-lang.htm...)

    Vienkārši PostgreSQL supportē tikai 8-bit multibyte characterus, liidz ar ko UNICODE jamajiem ir sinonīms UTF-8.

  13. Laiks:
    13. buu @ 2003.11.26. 15:12, teica:
    Komentārs:

    postgresql upper un lower prieks unicodes chariem kas nav ascii chari nesuportee.
    var meeginaat lietot convert funkciju un nokonverteet uz zemaaku encodingu pirms izsaukt upper vai lower.

  14. Laiks:
    14. ant @ 2003.11.26. 15:18, teica:
    Komentārs:

    //UTF–8 ir Unicode apakshsets//
    he hei, lēnāk pār tiltu :-)
    tas nav nekāds apakšsets, bet gan īpašs veids, kā glabāt Unicode baitus (lauj ietaupīt vietu tiem tekstiem, kuros simboli pārsvarā ir no ASCII simbolu kopas, aka angļu valodas burti)

  15. Laiks:
    15. laacz @ 2003.11.26. 15:19, teica:
    Komentārs:

    buu: neredzu jēgu. Unicode galu galā pamatdoma (manā gadījumā – izmantošanas jēga) ir multilingual saturs…

  16. Laiks:
    16. laacz @ 2003.11.26. 15:19, teica:
    Komentārs:

    ant, OK. Kļūdījos:)

  17. Laiks:
    17. buu @ 2003.11.26. 15:30, teica:
    Komentārs:

    laacz: shii probleema ies postgresa ir veca kaa pasaule :)
    kaut vai kaarteejais iztirzaajums: http://dbforums.com/arch/171/2003/10/951254

  18. Laiks:
    18. buu @ 2003.11.26. 15:32, teica:
    Komentārs:

    komentaars no pgsql developeriem:

    upper/lower aren’t going to work desirably in any multi-byte character
    set encoding. I think Peter E. is looking into what it would take to
    fix this for 7.5, but at present you are going to need to use a
    single-byte encoding within the server. (Nothing to stop you from using
    UTF-8 on the client side though.)

    regards, tom lane

  19. Laiks:
    19. heh @ 2003.11.26. 20:17, teica:
    Komentārs:

    “problēma slēpjas lielajā roku liekuma rādiusā”
    man gan likaas ka jo lielaaks raadiuss, jo “liekums” ir mazaax.. :) ne?

  20. Laiks:
    20. laacz @ 2003.11.27. 09:34, teica:
    Komentārs:

    heh: es zinu. Bet šādi labāk izklausās ;)

Ierakstīt savu sakāmo


XHTML: Tu vari izmantot šos tagus (un to atribūtus): <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Moderācija: Daži vārdi var gadīties, ka ir iz melnās listes (viagra and stuff). Tādi komentāri tiek premoderēti, pirms parādās lapā. Ja Tavs komentārs neparādās uzreizi, būs vien jāpagaida, līdz es jamo izlasīšu.