DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   SQL baze podataka - Sponzor: Baze-Podataka.net (http://www.devprotalk.com/forumdisplay.php?f=10)
-   -   MySQL, UTF8 i sort po naški (http://www.devprotalk.com/showthread.php?t=1736)

ivanhoe 02. 11. 2006. 01:02

ajde dajte nek linkove i informacije o pravljenju collation tabela, ono sto znate... cisto za pocetak, posto ja nikako da nadjem neke primere kako se to radi...

zark0vac 02. 11. 2006. 01:41

Unfortunately there is no documentation on how to create UTF8 collations.
But adding a new collation can be very easy. You need to edit these files:

strings/ctype-uca.c
mysys/charset-def.c

Use swedish as an example.

Also, note that:
1. Many languages are compatible with utf8_unicode_ci.
So you don't need to create separate collations for them.
For example German, French, Russian, Armenian, Greek.

2. Our Unicode Collation implementation have some limitations.
It is currently not possible to create real full featured collations for ALL languages.
For example, Hungarian have very complex contraction rules, i.e.
when a combination of several letters is treated as a single sorting element.

If you list all the languages you need, I could comment which of them can
be implemented easily, and which of them require additional coding.

http://forums.mysql.com/read.php?103...5093#msg-25093


Potrazicu clanke sa konkretnim uputstvima pa cu postaviti.

Dejan Topalovic 02. 11. 2006. 02:06

Slicne putokaze je i meni dao Sinisa, s tim da me uputio i na strings/ctype-utf8.c, konkretno na matrice MY_UNICASE_INFO, kao i na share/charsets XML datoteke.

Nazalost, nisam u praksi sa MySQL-om imao potrebu za cirilicom, pa tako ne mogu ni reci nesto iz licnog iskustva. Evo nabrzaka sam nesto testirao na cirilici koristeci cp1251_general_ci , pa cu sutra napisati vise o tome.

zark0vac 02. 11. 2006. 02:33

Cekamo rezultate :) Sad sam procitao da bi cp1251 (koji si koristio), koi8_ukr i win1251_ukr trebalo da podrzavaju cirilicu u potpunosti. Time will show. A sto se tice konkretnih uputstava za razvoj collationa slaba vajda, nigde nisam nasao.

Edit: http://downloads.mysql.com/docs/internals-en.pdf

Dejan Topalovic 03. 11. 2006. 00:04

Ne moze se koristiti cp1251 za collation. :(
Napravio sam par testova sa raznim collationima, pocevsi od
cp1251_general_ci, preko cp1251_ukrainian_ci, pa do cp1251_bulgarian_ci.

Kreirao sam jednostavnu tabelu sa dva polja:
Kôd:


CREATE
TABLE IF NOT EXISTS `test_cp1251` (
`id` tinyint(
3) unsigned NOT NULL auto_increment,
`ime` varchar(
45) CHARACTER SET cp1251 COLLATE cp1251_ukrainian_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE
=MyISAM;

Imena sam unio pomocu PHP-a tako sto sam kreirao staticki array sa imenima na cirilici i potom ih sa shuffle() promijesao prije unosa.

Kada pokusam unesena imena sortirati, dobijem slijedeci rezultat:
Kôd:

SELECT ime FROM test_cp1251 ORDER BY ime;
 
ime
------------
Чубрило
Синиша
Радиша
Жарко
Душан
Горан
Вељко
Бојан
Александар
Љубиша
Ђорђе

Idemo dalje za iste pare. :)

Dejan Topalovic 08. 11. 2006. 01:16

Mozda ipak ima sanse? ;)

Kôd:


CREATE TABLE IF NOT EXISTS `test_utf8` (
`id` tinyint(3) unsigned NOT NULL auto_increment,
`ime` varchar(45) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;

Imena sam kao i u prethodnom testu unio pomocu PHP skripte:
PHP kôd:

<?php
$conn 
= new mysqli('localhost''username''password');
$conn->select_db('dejan');
$conn->set_charset("utf8");
$conn->query("SET NAMES 'utf8'");
$array 
array(
'Александар','Бојан','Вељко','Горан','Душан','Ђорђе'
,'Жарко','Љубиша','Радиша','Синиша','Чубрило');
 
shuffle($array);
 
foreach(
$array as $ime)
{
$insert "INSERT INTO test_utf8 VALUES(NULL, 
'"
.$ime."')";
$result $conn->query($insert);
if(
$result)
{
echo 
"Ime ".$ime." je uneseno!<br>";
}
}
$conn->close();
?>

Nakon pokretana skripte, ispisu se unesena imena:
Citat:

Ime Горан je uneseno!
Ime Чубрило je uneseno!
Ime Ђорђе je uneseno!
Ime Синиша je uneseno!
Ime Жарко je uneseno!
Ime Радиша je uneseno!
Ime Вељко je uneseno!
Ime Душан je uneseno!
Ime Бојан je uneseno!
Ime Љубиша je uneseno!
Ime Александар je uneseno!
Provjerimo da li su imena unesena:
Kôd:


SELECT * FROM test_utf8;
 
id ime
1 Горан
2 Чубрило
3 Ђорђе
4 Синиша
5 Жарко
6 Радиша
7 Вељко
8 Душан
9 Бојан
10 Љубиша
11 Александар

I potom sortirano:
Kôd:


SELECT *
FROM test_utf8
ORDER BY ime;
 
id ime
11 Александар
9 Бојан
7 Вељко
1 Горан
8 Душан
3 Ђорђе
5 Жарко
10 Љубиша
6 Радиша
4 Синиша
2 Чубрило

Moglo bi biti korisno...

Ako neko ima vremena i volje, nek testira dalje, da li se ovaj collation moze koristiti ili ne.

Osim toga, koga zanima ovaj collation, moze detaljniji redoslijed sortiranja pogledati ovdje:
http://d.udm.net/bar/~bar/charts/utf8_unicode_ci.html

zextra 09. 11. 2006. 02:45

Hm, pa ovaj redosled je sasvim u redu. Pitam se sta sam prevideo kada sam testirao utf_unicode_ci collation? U svakom slucaju, UTF8 cirilica vise nije problem :)

Ali i dalje ostaje pitanje, sta sa latinicom? ;)

Pedja 09. 11. 2006. 08:43

I jos nezgodnije pitanje, sta ako su cirilica i latinica pomesani?

Dejan Topalovic 09. 11. 2006. 10:26

Citat:

Originalno napisao zextra
Hm, pa ovaj redosled je sasvim u redu. Pitam se sta sam prevideo kada sam testirao utf_unicode_ci collation? U svakom slucaju, UTF8 cirilica vise nije problem :)

Ali i dalje ostaje pitanje, sta sa latinicom? ;)

Za latinicu je preporucen hrvatski collation (latin2_croatian_ci).

@Pedja: Pa koliko vidim po redoslijedu, utf8_collation_ci bi trebao ispravno sortirati i kad je izmijesano, ali nisam siguran bez testiranja. Jebga, u zadnje vrijeme radim iskljucivo sa Oracleom, a jako malo sa MySQL-om, tako da iz prakse ne mogu nista reci...

zextra 26. 04. 2007. 19:41

Off Topic: Izvinjavam se što dižem temu iz mrtvih...


Maločas opet pogledah utf8_unicode_ci raspored, i primetih jednu stvar: u collationu se nalaze naša slova "dž", "lj" i "nj" kao jedno-karakterni simboli, i što je najbolje nalaze se na odgovarajućim mestima.

Ostaje pitanje: zašto Windows ne menja mapiranje tastera Q, W i X jedno-karakternim simbolima slova DŽ, NJ i LJ (verovatno sam omašio redosled respektivnih slova)? (Da nisam primetio da GNOME to radi, ne bih ni postavio ovo pitanje...) Sudeći po tom collationu, problem naših dvo-karakternih slova je rešen. Samo što retko ko može uopšte da koristi baš te znakove...

Jedine "zamerke" koje imam na collation je to što prilikom sortiranja, slova C, Č i Ć imaju istu težinu - tretiraju se jednako, baš kao i S i Š, Z i Ž), i to što ćirilična slova nisu uglavljena na odgovarajuće pozicije između latiničnih slova...


Vreme je GMT +2. Trenutno vreme je 23:14.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.