Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Sortiranje po azbuci i latinicnog i cirilicnog teksta

  • 1 odgovor
  • 2.514 pregleda

Najnovija ↓

Sortiranje po azbuci i latinicnog i cirilicnog teksta 23.07.2010. u 15:09 · pre 198 meseci #1
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
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Sviđa mi se1
Re: Sortiranje po azbuci i latinicnog i cirilicnog teksta 24.07.2010. u 10:53 · pre 198 meseci #2
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>


Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme