minde wrote:

Na su UTF8 man ir nepavyko gauti norimo rezultato, gali būti, kad mysql'e yra net klaida, nes realiai utf8_lithuanian_ci turėtų tai leisti.
Bet pavyko su CP1257:

Dėkui už greitą atsakymą, bet, deja, ir šitas nelabai tiks, nes

SELECT _cp1257 'ąžuolas' = _cp1257 'žąuolas' COLLATE cp1257_lithuanian_ci

Gražina 1

Ir gaunasi taip, kad su UTF8 variantais neskiria ą nuo A, bet skiria pvz. ž nuo Z, o CP1257 variantas, skiria ą nuo A, bet tada nebeskiria net ą didžiosios nuo ž mažosios... Dėl klaidos MySQLe - visko gali būti, nes kiek teko prieš tai ieškoti sprendimo, tai regis ir su lenkų simboliais buvo identiškų problemų, bet spendimo, kaip ir šiu atveju, ne...

Vadinasi, kaip ir minėjau anksčiau, pasidarysiu kur reikia, po vieną papildomą stulpelį su uft8_bin ir sumažintomis raidėmis ir bus problema apeita (na ir išspręsta, nes veiks taip kaip reikia). O kad tai pridės kokį papildomą 1MB ir teks perrašyti dalį PHP kodo - nieko tokio...

Viena iš konkrečių situacijų, kur toks dalykas man tampa svarbus:

Turim lentelę:

CREATE TABLE `test` (
  `text` varchar(255) collate utf8_lithuanian_ci NOT NULL,
  UNIQUE KEY `text` (`text`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_lithuanian_ci;

Reikia, kad būtų galima įterpti eilutes:
ąsotis
Asotis
ąsotis
Asis
Ašis

O pastaruosius įterpus, nebeleistų įterpti šitų:
ąsotis
asotis
aSis
ašis

Pateikus užklausą (esant duomenims: Asotis, ąsotis, As, Aš) :

SELECT * FROM `test` WHERE `text` LIKE 'ą%'

rezultatas turi būti tik "ąsotis" (su ą nosine)

O analogiškai:

SELECT * FROM `test` WHERE `text` LIKE 'A%' ORDER BY `text` ASC

Reiktų rezultato:
Asis
Asotis
Ašis


žinoma, vietoje text galima naudoti papildomą stulpelį (su visom mažosiomis raidėmis), kuris ir būtų tas unikalus raktas su COLLATE=utf8_bin, bet negi nėra paprastesnio būdo?

Sveiki,

reikalinga tokia situacija, kad užklausos
SELECT 'ą' = 'A' rezultatas būtų FALSE
o tuo tarpu
SELECT 'ą' LIKE 'ą' rezultatas būtų TRUE

Kitaip sakant, reikia, kad didžiosios ir mažosios raidės būtų laikomos vienodais simboliais (pvz. A = a; ą = ą), bet A (be nosinės) ir ą (su nosine) toje pačioje situacijoje būtų laikoma skirtingais simboliais. Ar taip įmanoma kaip nors "standartiškai" padaryti, be kokių nors apėjimų?


SELECT 'ą' LIKE 'ą' COLLATE  utf8_lithuanian_ci         lyg ir tiktų, bet tinka, nes  rezultatas "1", bet
SELECT 'ą' = 'A' COLLATE  utf8_lithuanian_ci         taip pat "1". O man svarbu, kad SELECT'inant "ą" negaučiau rezultatų "A"

SELECT 'ą' LIKE 'ą' COLLATE utf8_bin   rezultatas "0". Vadinasi vėl netinka.

SELECT 'ą' LIKE 'ą' COLLATE utf8_unicode_ci  lyg ir vėl tiktų, bet
SELECT 'ą' = 'A' COLLATE   utf8_unicode_ci kaip ir pirmu atveju, paprasta A ir nosinė SELECT'e laiko vienu simboliu.

O gal bandymai kaitalioti COLLATE neturi prasmės? Koduotė UTF-8.


Ačiū.

Turbut taip ir teks daryti. Aciu.

Dar klausimas prie temos:

Jei duombazėj yra žodžiai:
ąžuolas
ažuolas
ažUOLAS
azuolas
AZUOLAS

Ar yra galimybė su SQL padaryti, kad vartotojui ieškant žodžio "ąžuolas" surastų visus šiuos žodžius? Ar reikia bandyti visus variantus pačiam, t.y. kartoti užklausą su ieškant "ąžuolas", "ažuolas", "ązuolas" ir "azuolas"?

Del to, ar laikyti duombazej ar ne - cia masciau apie kita projekta. Ir nusprendziau, kad laikysiu duomenis duombazej. Nes lankytoju neturetu buti daugiau nei likimas.lt (o jis veikia normaliai), juolab, kad cia uzklausos dar tikrai neoptimalios (dar tik mokinausi SQL'o). O jei jau netycia susirinksiu per daug lankytoju, tai ir padarysiu ir "sugeneruotu puslapiu" sistema...

O del http://www.likimas.lt puslapiai ir yra vienas index.php?adresas=ir_cia_visas_adresas. As tik su .htaccess pasidariau, kad graziau atrodytu. Tik man visu duomenu duombazej nes, kiekvienam skyreliui, esanciam likimas.lt/lemtis reikalingas vis kitas skaiciavimo algoritmas reikiamiems duomenims gauti. Todel siame skyriuje as padariau paprasta include(.../$reikiamos_info_nr)
O naujienos, burtai, prietarai, diskusijos laikomi DB.

Ačiū, man kaip tik to ir reikėjo.
Išvada - bene visus stulpelius su info ant FULLTEXT ir veiks :) Jei neklistu kelis kartus turėtu padidėti duombazė, bet cia neproblema, nes duombazė užima 10.000 kartų mažiau vietos, nei aš turiu - bus bent kam nors panaudot vietą :D

Sveiki,
siame forume jau skaiciau apie teksto paieska naudojantis FULLTEXT, taciau (kaip tame pvz.) duombazeje yra "žodis", o ieškoma "žodis", tai neras.

Kaip padaryti, kad ieškotų nepriklausomai ar didžiosios ar mažosios raidės? Taip pat, prie to pačio, kas geriau - ar visa DB imti is eiles ir su PHP nagrinetis ar kazkaip su SQL daryt, jei norėčiau, kad ieškant teskto "ąžuolas" surastų ir duombazej esantį "ažuolas".

Pagrindinis šios paiškos pritaikymo vieta turėtų būti http://www.likimas.lt (kad būtų galima rasti informaciją, ęsančią visuose skyriuose). žinoma yra ir kitos pritaikymo vietos, bet jei tiks čia, tiks visur.

Jei tai turi įtakos MySQL - 4.1

-------------------
Ir dar vienas klausimas:

Aš galvojų apie vieną tokį didesnį projektėlį (veikimas kažkas panašaus į blog'ą) ir neapsisprendžiu ar visą informaciją - tekstus, dizaino elementus (pvz. spalvas, paveiksliuku ID ir pan.) ir kita info laikyti duombazėje ir su kiekviena užklausa generuoti ar sukurti statinius HTML failus (o DB naudoti tik info redagavimui)?

čia priklauso nuo to, kaip tie index'ai (be kurių iki šiol išsiverčiau) veikia. Jei per juos greit suranda, bei pagal juos gaunasi greitas lenteliu jungimas, tai man tai netgi geriau, nes būtu daug paprasčiau realizuoti visą projektą.

Ačiū.