Kā iekš MySQL sakārtot latviešu burtus pareizā secībā
Atzīšos, ka negaidīju. No sākuma vairākus gadus kā jau latvieši parastie - cietāmies, ka iekš MySQL nevar pareizi sakārtot rindas, kas ir ar mūsu burteļiem. T.i. - kārtojās pareizi, bet ne patskaņi.
Aizvakar beidzot izlēmu paziņot par bugu. Tas plūdeni tika pārvērsts feature requestā. Un beigu beigās kāds ielika arī pagaidu workaroundu.
SELECT * FROM `ctest` ORDER BY `keyword`, BINARY keyword;
Tiesa, MySQL kontekstā pēdējās nedēļas mani vairāk kaitina tā ierobežojumi un sintakses īpatnības, kuras parādās, kad ir vēlme uzrakstīt SQL skriptu, kurš izmanto kursorus, kad ir vēlme uzrakstīt storēto procedūru vai funkciju un tā kļūst neganti lēna, jo ceļā stājas kolācijas, utt. Tā kā kārtošana ir pats mazumiņš. Bet, nu, patīkami :)
Papildināts pēc testiem. Darbojas tikai uz neutf8 kodējumu dēļ mainīgā baitu daudzuma, kas atvēlēts burtam. Kā arī jāņem vērā, ka šāda kārtošana neņem vērā indeksus otrajam kārtošanas nosacījumam.
Papildināts pēc vēl pāris testiem un sarunām #php.lv. Te gan jāpieņem, ka visur ir pareizi norādīti čārseti :)
SELECT keyword FROM ctest ORDER BY CONVERT(keyword USING ucs2) COLLATE ucs2_latvian_ci, CONVERT(keyword USING ucs2) COLLATE ucs2_bin ASC;
Papildināts pēc rūpīgākas pārbaudes. Ne sūda. Rekursīvi atduramies pret to pašu problēmu. Ienāca prātā variants ar trigeri, papildus lauku un 'glāžšķūņu rūķīšu' pārveide par 'g1l1a2z2s2k2u2n2u1 1r1u2k2i2s2i1' :)
Mārtiņš
2010. gada 28. oktobrī, plkst. 15:59
Negribas jau troļļot, bet nu vai nav vieglāk izvēlēties citu RDBVS? :)
laacz Autors
2010. gada 28. oktobrī, plkst. 16:08
Mārtiņš, nav gan :)
Grrr
2010. gada 28. oktobrī, plkst. 17:10
Nav, nav. Pieradumam liels spēks.
j
2010. gada 28. oktobrī, plkst. 17:28
pēdējais selects konvertē visus rowus, lai varētu izpildīt order by..
wudu
2010. gada 28. oktobrī, plkst. 18:42
šis neder http://nekur.lv/archive/1467 ?
archaic
2010. gada 29. oktobrī, plkst. 04:08
Problēma veca kā zeķe. Mēs ar neko labāku neatradām, kā kārtošanai taisīt speciālus laukus. Kā sendienās. Ir lauks. Un ir lauks_sort.
Mārtiņš
2010. gada 29. oktobrī, plkst. 11:13
PostgreSQL: The world's most advanced open source database :-)
Varēsi arī iemēģināt PostGIS savai Ipiķu problēmai.
laacz Autors
2010. gada 29. oktobrī, plkst. 11:44
Mārtiņ, PostgreSQL kolāciju un internacionalizācijas jautājums nav tik vienkāršs. Ir ļoti daudz dažādu ierobežojumu, kurus vismaz sākontnēji man nav izdevies apiet.
Kas attiecas uz Ipiķu problēmu - sen jau atrisināta. Izmantoju Shapely un python. Attiecīgajām funkcijām nav nepieciešams visu turēt datubāzē un veikt manipulācijas tur.
Grrr
2010. gada 29. oktobrī, plkst. 12:07
Varbūt uzraksti, ja sanāk, par postgresa ierobežojumiem, lūdzu. Varētu būt noderīgi saprast, ja nākas izvērtēt iespēju lietot PG kādā projektā.
laacz Autors
2010. gada 29. oktobrī, plkst. 12:14
Grr, es neesmu speciālists postgresa jautājumā, raču i18n mysqlā ir augstākā līmenī, ja neskaita konkrēto problēmu ar sekundāro kollāciju.
asdf
2010. gada 29. oktobrī, plkst. 13:51
To jau sapratām, ka neesi speciālists RDBVS jautājumā.. Tāpēc arī interesē kas ir tie "ļoti daudzie dažādie ierobežojumi, kurus tev nav izdevies apiet" PostgreSQL gadījumā :)
Kirurgs
2010. gada 29. oktobrī, plkst. 14:59
Sort ta gan ir problema :) mysqla :) alter session set nls_language=latvian ? :D
laacz Autors
2010. gada 29. oktobrī, plkst. 15:15
Kirurgs: tas nav orākliski? :)
VĒSTURE
2010. gada 29. oktobrī, plkst. 15:35
KAPĒC PROJEKT STĀV?
http://cietnis.laacz.lv/
mareks
2010. gada 30. oktobrī, plkst. 11:05
pg kolācija un i18n ir ''tieši proporcionāli" saistīta ar os uz kura tā darbojas i18n īpašībām un iespējām, i.e. ja os-am ir problēma ar latviešu burtu kārtošanu, tad arī pg būs tieši tādas pašas problēmas. snoracle pabērnam šis ir, afaik, citādi. ja ir interese, varu padalīties ar "korektiem" localedef objektiem, kuri savulaik vēl tika rakstīti tādam mazpazīstamam os-am kā sunos 5.6
Feldmans
2014. gada 6. martā, plkst. 02:19
Feldmans
2014. gada 6. martā, plkst. 02:20
Hmm. Respektīvi - šis man strādā
http://pastebin.com/vNzNEbgt
Andris
2021. gada 17. martā, plkst. 21:34
Kā piemērā minētos Collation datus padot datubāzei?
Arnis
2017. gada 10. oktobrī, plkst. 19:21
Ir kādi jaunumi attiecībā uz šo?
Man, piemēram, savjadzējās, vienā tabulā glabāt 3 valodu tekstus, bet atlasīt tos pareizajā alfabēta secībā, atkarībā no atlasāmās valodas. Varbūt jaunākajās MySQL versijās ir kāds jaunums šajā sakarā? Tajā bug requestā nekas nav mainījies pa šo laiku https://bugs.mysql.com/bug.php?id=57731
Arnis
2018. gada 19. janvārī, plkst. 00:41
Nu re kā - nepagāja ne 8 gadi, kad IR FIX! https://bugs.mysql.com/57731 Būs iekļauts 8tajā versijā.
Interesanti ... kur palikušas 6-tā un 7-tā? (7-tā īstenībā eksistē - Github relīzēs ir 2x septītās, bet kas viņu zin, kāpēc tā https://github.com/mysql/mysql-server/releases
Nu nekas - vismaz 8-tajā jābūt pareizam sortam!
Andris
2021. gada 17. martā, plkst. 21:32
No Arņa Juraga komentāra (2019. gada jūnijā) MySQL
kļūdu izsekotājā
(kļūda 57731) izskatās, ka kārtošana, joprojām, notiek nepareizi. Vai ir atrasta aktuāla metode kā panākt pareizu kārtošanu MySQL?Andris
2021. gada 17. martā, plkst. 22:12
PHP.LV forumā ir noderīgi ieraksti, ar iespējamu risinājumu, par raksta tēmu. https://php.lv/f/topic/22830-solved-kā-pareizi-sašķirot-latviešu-tekstu-par-spīti-mysql-gļukiem/
Salvis
2023. gada 31. janvārī, plkst. 14:36
Ar kādu algoritmu var panākt "pakāpe" -> "pa0ka1pe0"? Paldies.