SELECT záznamu z tabulky s diaktrikou i bez

Re:SELECT záznamu z tabulky s diaktrikou i bez
« Odpověď #15 kdy: 30. 01. 2025, 17:43:59 »
Jenze tohle ti bude fungovat jen a pouze s nekolika malo jazyky.

To je jasné. Je to primárně o způsobu toho převodu na řetězec bez diakritiky, pro češtinu a příbuzné jazyky i západoevropské jazyky to může být prakticky buď v pohodě nebo tolerovatelné..
Samozřejmě pokud by se tam v těch collation mapách byly i složitější vazby, jako např. opisy v jiných abecedách 'ö' == 'oe', tak to takhle jednoduše řešit nepůjde. Můžeš si to dál zkomplikovat i asijskými jazyky, co mají víc abeced, případně nějakou ustálenou romanizaci (spasibo). Pokud se tohle chce pokrývat i v pokročilejších databázích, které mají sice různé rozsáhle collationy, ale jedna generická varianta to nedá rovnou, tak se to musí přepínat dopředu (třeba předpokladem očekávané collation podle jazykové verze UI).

Jinak hlavně nevíme vůbec nic dalšího k tomu projektu. Ty ukázkové query jsou divné (Chce opravdu používat like bez těch %_ wildcards nebo jen hledat přesnou shodu?). Jak to má být velké - jestli je to databáze místního klubu chovatelů a zahrádkářů, co bude mít napřesrok 232 řádek a je tam jen Čeština, nebo tam jde trochu o výkon a musí řešit ty cizí jazyky. V jakém to dělá prostředí, jestli může a dávalo by mu smysl zvolit jiný databázový engine.
Takhle tady klidně můžeme spekulovat a vymýšlet hypotetické cesty a jejich případné nevýhody do nekonečna ;)



mikrom

  • ****
  • 376
    • Zobrazit profil
    • E-mail
Re:SELECT záznamu z tabulky s diaktrikou i bez
« Odpověď #16 kdy: 30. 01. 2025, 21:03:55 »
Jinak receno jediny spravny reseni je vymenit tu databazi.
Ale tazatel potrebuje SQLite

mikrom

  • ****
  • 376
    • Zobrazit profil
    • E-mail
Re:SELECT záznamu z tabulky s diaktrikou i bez
« Odpověď #17 kdy: 30. 01. 2025, 21:46:02 »
Zdravím.
Potřeboval bych poradit.
Existuje možnost udělat SELECT záznamů z tabulky s diakritikou i bez?
Potřeboval bych aby SQL dotazy

Kód: [Vybrat]
SELECT * FROM profile WHERE last_name LIKE 'jašková';
a
Kód: [Vybrat]
SELECT * FROM profile WHERE last_name LIKE 'jaskova';

vraceli stejný výsledek.

DB: Sqlite3

A co naistalovat sqlite3-pcre a pouzit REGEXP ?
Kód: [Vybrat]
sqlite> select * from TMP_TABLE where name REGEXP 'ja(s|š)kov(a|á)';
1|jaskova
2|jašková
V inej databaze (DB2, PostgreSQL, alebo Oracle) by som pouzil funkciu translate(), napr. takto:
Kód: [Vybrat]
select * from TMP_TABLE
where translate(name, 'áéíóúščťžý', 'aeiousctzy') = 'jaskova'
;
Ale v SQLite bohuzial translate() nie je.
Nasiel som Oracle, PostgreSQL functions for SQLite: https://sqlite-libs.cs.ksu.edu/
Stiahol som to z https://github.com/sfaroult/sqlite_libs
Skompiloval som moduly orafn.so a pgfn.so avsak translate() ani v jednom z tychto modulov nefunguje spravne 'á' sice prelozi na 'a', ale 'š' neprelozi:
Kód: [Vybrat]
sqlite> .load ./orafn.so
sqlite> select
   ...>   *,
   ...>   translate(name, 'áéíóúščťžý', 'aeiousctzy') as name_t
   ...> from TMP_TABLE
   ...> ;
1|jaskova|jaskova
2|jašková|jaškova

Takze translate() vyzera byt v SQLite nepouzitelne (ale mozno existuje nejaka ina implementacia).
Ja by som pouzil to co funguje, t.j. hore uvedeny REGEXP

mikrom

  • ****
  • 376
    • Zobrazit profil
    • E-mail
Re:SELECT záznamu z tabulky s diaktrikou i bez
« Odpověď #18 kdy: 30. 01. 2025, 23:54:45 »
...
Nasiel som Oracle, PostgreSQL functions for SQLite: https://sqlite-libs.cs.ksu.edu/
Stiahol som to z https://github.com/sfaroult/sqlite_libs
Skompiloval som moduly orafn.so a pgfn.so
...
Modul orafn.so obsahuje unaccent() a to vyzera, ze funguje
Kód: [Vybrat]
sqlite> .load ./orafn.so
sqlite> select
   ...>   name,
   ...>   unaccent(name) as name_u
   ...> from TMP_TABLE
   ...> where unaccent(name) = 'jaskova'
   ...> ;
jaskova|jaskova
jašková|jaskova

Re:SELECT záznamu z tabulky s diaktrikou i bez
« Odpověď #19 kdy: 31. 01. 2025, 00:22:52 »
...
Nasiel som Oracle, PostgreSQL functions for SQLite: https://sqlite-libs.cs.ksu.edu/
Stiahol som to z https://github.com/sfaroult/sqlite_libs
Skompiloval som moduly orafn.so a pgfn.so

To vypadá v pohodě, jsou tam docela rozsáhlé ty transformační dvojice nagenerované z názvů znaků v Unicode.
https://github.com/sfaroult/sqlite_libs/blob/c9d3937ce1756eab4c8d9dab5aede889393830e8/ksu/ksu_unicode.c#L470

Jestli se mu to podaří sestavit a natáhnout tu extensionu v jeho prostředí (ne všude je to povolené - např. Python na některých plaformách), tak by to mohlo situaci vcelku hezky pořešit.  :)


mikrom

  • ****
  • 376
    • Zobrazit profil
    • E-mail
Re:SELECT záznamu z tabulky s diaktrikou i bez
« Odpověď #20 kdy: 31. 01. 2025, 12:32:09 »
...
Jestli se mu to podaří sestavit a natáhnout tu extensionu v jeho prostředí
...
Samozrejme podla zakona schvalnosti i ja som narazil na problemy:
1) musel som zmodifikovat vygenerovany makefile,
    co som popisal tu https://github.com/sfaroult/sqlite_libs/issues/2
2) Pouzivam dbeaver community edition a tam sa mi nedari tu extension naloadovat.