Leotard Posted February 11, 2019 Report Share Posted February 11, 2019 (edited) MySQL nekorekti strādā teksta šķirošana latviešu valodā. Proti, MySQL atsevišķos gadījumos neredz starpību starp burtiem ar un bez diakritiskajām zīmēm. Piemēram, normāli strādā šķirošana burtiem C/Č, taču burti A/Ā MySQL acīs ir absolūti vienādi. Rezultātā ORDER BY izdod ārā bezjēdzīgu fufeli. Rezultāts nemainās (tai ziņā, ka sviests vien sanāk), nomainot collation (gan dažādi UTF-8 varianti, gan cp1257) - viss viens. Daļējas sekmes ir izmantojot BINARY atslēgas vārdu, bet tik un tā miskaste vien sanāk, jo visi rezultāti ar diakritiskajām zīmēm aizlec uz saraksta galu (sākumā nāk vsi A-Z, tad visi Ā-Ž). Jautājums - kādi būtu ieteikumi problēmas risināšanai? Kā normāli sašķirot tekstu latviešu valodā? Attēlā problēmas ilustrācija - burti C/Č šķirojas pareizi, bet burti A/Ā - nē (collation utf8_latvian_ci). Edited February 12, 2019 by Leotard Quote Link to comment Share on other sites More sharing options...
Faks Posted February 12, 2019 Report Share Posted February 12, 2019 utf8_unicode_ci vai utf8mb4_unicode_ci collation. Quote Link to comment Share on other sites More sharing options...
Grey_Wolf Posted February 12, 2019 Report Share Posted February 12, 2019 Ja SQLs ir uz tava servera, tad ir iespēja izveidot savu kārtošanas algoritmu.. tur ir faili, kas nodrošina katra kodējuma kārtošanu - secību . šī nav tikai LV problēma, un "fiksi" ir atrodami.. bet teorētiski "UTF8_.... Latvian.." vajadzētu strādāt korekti.. Quote Link to comment Share on other sites More sharing options...
Leotard Posted February 12, 2019 Author Report Share Posted February 12, 2019 8 hours ago, Faks said: utf8_unicode_ci vai utf8mb4_unicode_ci collation. Hehe! Nein! utf8_unicode_ci vai utf8mb4_unicode_ci šķiro ignorējot diakritiskās zīmes. utf_latvian_ci vai utf8mb4_latvian_ci šķiro daļēji pareizi, kā bildē - C/Č ir pareizi, A/Ā ir nepareizi. Quote Link to comment Share on other sites More sharing options...
Leotard Posted February 12, 2019 Author Report Share Posted February 12, 2019 4 hours ago, Grey_Wolf said: Ja SQLs ir uz tava servera, tad ir iespēja izveidot savu kārtošanas algoritmu.. tur ir faili, kas nodrošina katra kodējuma kārtošanu - secību . šī nav tikai LV problēma, un "fiksi" ir atrodami.. bet teorētiski "UTF8_.... Latvian.." vajadzētu strādāt korekti.. !Yess! Tu vari, lūdzams, dot kādu norādi, kur tos kodējuma secības failus meklēt? Jā, lasu, ka arī skandināvi ar to mokās. Teorētiski jā (utf_latvian_ci, utf8mb4_latvian_ci), bet... bet praksē pffft! Quote Link to comment Share on other sites More sharing options...
Kasspars Posted February 12, 2019 Report Share Posted February 12, 2019 Ja tev būs utf_latvian tad meklējot pēc c netiks atrasti č. Ja būs unicode, tad c un č būs viens un tas pats chars Paskaties te http://collation-charts.org/mysql60/mysql604.utf8_latvian_ci.html Ja tev ir utf_latvian, tad vajadzētu būt ka kārtošana nav OK tikai pēc a, ā un u, ū. Ar pārējiem burtiem kārtošanai jābūt kārtībā. Dod zināt vai tā ir, pašam negribās tagad testēt :D Quote Link to comment Share on other sites More sharing options...
Leotard Posted February 13, 2019 Author Report Share Posted February 13, 2019 On 2/12/2019 at 4:18 PM, Kasspars said: Ja tev būs utf_latvian tad meklējot pēc c netiks atrasti č. Ja būs unicode, tad c un č būs viens un tas pats chars Paskaties te http://collation-charts.org/mysql60/mysql604.utf8_latvian_ci.html Ja tev ir utf_latvian, tad vajadzētu būt ka kārtošana nav OK tikai pēc a, ā un u, ū. Ar pārējiem burtiem kārtošanai jābūt kārtībā. Dod zināt vai tā ir, pašam negribās tagad testēt :D Hei! Nu, lūk. Patiesība ir vēl interesantāka. Izskatās, ka kārtošana ir Ok visiem līdzskaņiem, bet nestrādā nevienam patskanim. Sazin ko te var darīt... Collation utf8mb4_latvian_ci : Quote Link to comment Share on other sites More sharing options...
Faks Posted February 14, 2019 Report Share Posted February 14, 2019 varijants ir atver source uz C un pierkasti savu algoritmu uz sortesanu un sakompile kopa savu libary un aida. Quote Link to comment Share on other sites More sharing options...
e-remit Posted February 14, 2019 Report Share Posted February 14, 2019 37 minutes ago, Faks said: varijants ir atver source uz C un pierkasti savu algoritmu uz sortesanu un sakompile kopa savu libary un aida. Tad jau vienkāršāka ir sortēšanas lauku taisīšana - kurā saglabā pārveidoto tekstu: "pakāpe" -> "pa0ka1pe0". Tiesa, ir algoritmi, kas mazāk vietas prasa. Quote Link to comment Share on other sites More sharing options...
Faks Posted February 15, 2019 Report Share Posted February 15, 2019 11 hours ago, e-remit said: Tad jau vienkāršāka ir sortēšanas lauku taisīšana - kurā saglabā pārveidoto tekstu: "pakāpe" -> "pa0ka1pe0". Tiesa, ir algoritmi, kas mazāk vietas prasa. true nevaru nepiekrist. Quote Link to comment Share on other sites More sharing options...
Leotard Posted February 17, 2019 Author Report Share Posted February 17, 2019 (edited) On 2/14/2019 at 8:45 PM, e-remit said: Tad jau vienkāršāka ir sortēšanas lauku taisīšana - kurā saglabā pārveidoto tekstu: "pakāpe" -> "pa0ka1pe0". Tiesa, ir algoritmi, kas mazāk vietas prasa. Yess! Paldies par ideju! Izskatās, ka strādā (skat. bildi). Varētu būt praksē vienkāršākais risinājums. Uztaisīšu trigeri, kurš uz INSERT un UPDATE izrēķina zortēšanas lauka vērtību un šķirošu pēc tā. MySQL ļautiņiem vajadzētu aiziet tuksnesī un pārdomāt dzīvi - kā var pieļaut tik kliedzošus defektus. Latviskais collation pat nespēj A no Ā atšķirt. Kaunējušies būtu! Edited February 17, 2019 by Leotard Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.