[ bogdan.kecman @ 23.07.2010. 14:09 ] @
Evo smorio sam se i napravi Srpsku kolaciju za mysql :)

http://www.mysql.rs/2010/07/sortiranje-po-azbuci-azbuka-i-mysql/

podaci za test:
Code:

DROP TABLE IF EXISTS `sr_test`;
CREATE TABLE IF NOT EXISTS `sr_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `a` char(10) CHARACTER SET utf8 COLLATE utf8_serbian_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=135 DEFAULT CHARSET=utf8;

INSERT INTO `sr_test` (`id`, `a`) VALUES (1, 'A'), (2, 'B'), (3, 'V'), (4, 'G'), (5, 'D'), (6, 'Đ'), (7, 'DJ'), (8, 'E'), (9, 'Ž'), (10, 'Z'), (11, 'I'), (12, 'J'), (13, 'K'), (14, 'L'), (15, 'LJ'), (16, 'Lj'), (17, 'LJ'), (18, 'M'), (19, 'N'), (20, 'NJ'), (21, 'Nj'), (22, 'NJ'), (23, 'O'), (24, 'P'), (25, 'R'), (26, 'S'), (27, 'T'), (28, 'Ć'), (29, 'U'), (30, 'F'), (31, 'H'), (32, 'C'), (33, 'Č'), (34, 'DŽ'), (35, 'Dž'), (36, 'Š'), (37, 'a'), (38, 'b'), (39, 'v'), (40, 'g'), (41, 'd'), (42, 'đ'), (43, 'dj'), (44, 'e'), (45, 'ž'), (46, 'z'), (47, 'i'), (48, 'j'), (49, 'k'), (50, 'l'), (51, 'lj'), (52, 'lj'), (53, 'm'), (54, 'n'), (55, 'nj'), (56, 'nj'), (57, 'o'), (58, 'p'), (59, 'r'), (60, 's'), (61, 't'), (62, 'ć'), (63, 'u'), (64, 'f'), (65, 'h'), (66, 'c'), (67, 'Č'), (68, 'dž'), (69, 'dz'), (70, 'š'), (71, 'A'), (72, 'B'), (73, 'V'), (74, 'G'), (75, 'D'), (76, 'Đ'), (77, 'E'), (78, 'Ž'), (79, 'Z'), (80, 'I'), (81, 'J'), (82, 'K'), (83, 'L'), (84, 'Lj'), (85, 'M'), (86, 'N'), (87, 'Nj'), (88, 'O'), (89, 'P'), (90, 'R'), (91, 'S'), (92, 'T'), (93, 'Ć'), (94, 'U'), (95, 'F'), (96, 'H'), (97, 'C'), (98, 'Č'), (99, 'Dž'), (100, 'Š'), (101, 'a'), (102, 'b'), (103, 'v'), (104, 'g'), (105, 'd'), (106, 'đ'), (107, 'e'), (108, 'ž'), (109, 'z'), (110, 'i'), (111, 'j'), (112, 'k'), (113, 'l'), (114, 'lj'), (115, 'm'), (116, 'n'), (117, 'nj'), (118, 'o'), (119, 'p'), (120, 'r'), (121, 's'), (122, 't'), (123, 'ć'), (124, 'u'), (125, 'f'), (126, 'h'), (127, 'c'), (128, 'č'), (129, 'dž'), (130, 'š'), (131, 'ABVGD'), (132, 'abvgd'), (133, 'ABVGD'), (134, 'abvgd');


rezultat:
Code:

mysql> select SQL_NO_CACHE group_concat(a)  from sr_test group by a order by a;
+-----------------------------------+
| group_concat(a)                   |
+-----------------------------------+
| A,A,a,a                           |
| ABVGD,abvgd,ABVGD,abvgd           |
| B,b,B,b                           |
| v,V,v,V                           |
| g,g,G,G                           |
| D,d,D,d                           |
| đ,dj,đ,Đ,Đ,DJ                     |
| e,E,e,E                           |
| ž,Ž,ž,Ž                           |
| z,Z,Z,z                           |
| i,I,i,I                           |
| J,J,j,j                           |
| K,K,k,k                           |
| L,l,l,L                           |
| lj,LJ,Lj,lj,lj,Lj,LJ                   |
| M,M,m,m                           |
| N,n,n,N                           |
| Nj,NJ,NJ,nj,nj,nj,Nj                   |
| o,O,o,O                           |
| P,P,p,p                           |
| r,R,r,R                           |
| s,S,s,S                           |
| t,t,T,T                           |
| ć,ć,Ć,Ć                           |
| U,U,u,u                           |
| F,f,F,f                           |
| h,h,H,H                           |
| C,c,c,C                           |
| Č,č,Č,Č                           |
| dž,Dž,Dž,dž,DŽ,dz                      |
| š,Š,š,Š                           |
+-----------------------------------+
31 rows in set (0.00 sec)



Kontrakcija Dž nije moguca do 5.6 posto pre 5.6 ne moze kontrakcija izmedju 7bitnog i utf8 karaktera

uzdravlje
[ bogdan.kecman @ 24.07.2010. 09:53 ] @
da dodam posto je bilo pitanja:

1. ova kolacija utice i na like:

Code:

mysql> select SQL_NO_CACHE a from sr_test where a like (‘ab%’);
+————+
| a |
+————+
| ABVGD |
| abvgd |
| ABVGD |
| abvgd |
+————+
4 rows in set (0.00 sec)


dalje, posto je ovo XML fajl - dakle EXTERNA kolacija, moze da se doda na bilo koji mysql server, nema potrebe za rekompajliranjem. Od 5.6 bi trebalo da se nasa kolacija nadje u zvanicnom mysql-u (posto je tamo reseno dz kako treba jer tek od 5.6 radi kontrakcija izmedju 7bitnog i utf8 karaktera), do tada ovaj XML radi posao, stavite ga na bilo koji mysql server u charset direktorijum i resen problem. Obratite paznju samo na ID, za 5.1 stavite ID manji od 256 ali neki koji ne postoji (sa show collation; vidite sve postojece kolacije i njihove id-e)

takodje, bez da menjate trenutne tabele dodavanjem collate u select mozete da koristite ovu kolaciju "samo kada vam treba"

obratite paznju da sa ovom kolacijom Š i S nisu isti karakter kao ni Č i C (utf8_general_ci jesu). Ako zelite takvo ponasanje onda:

Code:

<collation name="utf8_serbian_ci" id="1200">
  <rules>
    <reset>\u0410</reset>
      <i>A</i>
      <i>a</i>
    <reset>\u0411</reset>
      <i>B</i>
      <i>b</i>
    <reset>\u0412</reset>
      <i>V</i>
      <i>v</i>
    <reset>\u0413</reset>
      <i>G</i>
      <i>g</i>
    <reset>\u0414</reset>
      <i>D</i>
      <i>d</i>
    <reset>\u0402</reset>
      <i>\u0110</i>
      <i>\u0111</i>
      <i>\u0189</i>
      <i>Dj</i>
      <i>DJ</i>
      <i>dj</i>
    <reset>\u0415</reset>
      <i>E</i>
      <i>e</i>
    <reset>\u0416</reset>
      <i>\u017D</i>
      <i>\u017E</i>
      <i>\u0417</i>
      <i>Z</i>
      <i>z</i>
    <reset>\u0418</reset>
      <i>\u0419</i>
      <i>\u0439</i>
      <i>I</i>
      <i>i</i>
    <reset>\u0408</reset>
      <i>J</i>
      <i>j</i>
    <reset>\u041A</reset>
      <i>K</i>
      <i>k</i>
    <reset>\u041B</reset>
      <i>L</i>
      <i>l</i>
    <reset>\u0409</reset>
      <i>\u01C7</i>
      <i>\u01C8</i>
      <i>\u01C9</i>
      <i>Lj</i>
      <i>LJ</i>
      <i>lj</i>
    <reset>\u041C</reset>
      <i>M</i>
      <i>m</i>
    <reset>\u041D</reset>
      <i>N</i>
      <i>n</i>
    <reset>\u040A</reset>
      <i>\u01CA</i>
      <i>\u01CB</i>
      <i>\u01CC</i>
      <i>Nj</i>
      <i>NJ</i>
      <i>nj</i>
    <reset>\u041E</reset>
      <i>O</i>
      <i>o</i>
    <reset>\u041F</reset>
      <i>P</i>
      <i>p</i>
    <reset>\u0420</reset>
      <i>R</i>
      <i>r</i>
    <reset>\u0421</reset>
      <i>S</i>
      <i>s</i>
      <i>\u0428</i>
      <i>\u0448</i>
      <i>\u0160</i>
      <i>\u0161</i>
    <reset>\u0422</reset>
      <i>T</i>
      <i>t</i>
    <reset>\u040B</reset>
      <i>\u0106</i>
      <i>\u0107</i>
    <reset>\u0423</reset>
      <i>U</i>
      <i>u</i>
    <reset>\u0424</reset>
      <i>F</i>
      <i>f</i>
    <reset>\u0425</reset>
      <i>H</i>
      <i>h</i>
    <reset>\u0426</reset>
      <i>C</i>
      <i>c</i>
      <i>\u0427</i>
      <i>\u010C</i>
      <i>\u010D</i>
    <reset>\u040F</reset>
      <i>\u045F</i>
      <i>\u01C4</i>
      <i>\u01C5</i>
      <i>\u01C6</i>
      <i>Dz</i>
      <i>DZ</i>
      <i>dz</i>
   
  </rules>
  </collation>