Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Sortiranje po azbuci i latinicnog i cirilicnog teksta

[es] :: MySQL :: Sortiranje po azbuci i latinicnog i cirilicnog teksta

[ Pregleda: 1907 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Sortiranje po azbuci i latinicnog i cirilicnog teksta23.07.2010. u 14:09 - pre 167 meseci
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

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Sortiranje po azbuci i latinicnog i cirilicnog teksta24.07.2010. u 09:53 - pre 167 meseci
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>



 
Odgovor na temu

[es] :: MySQL :: Sortiranje po azbuci i latinicnog i cirilicnog teksta

[ Pregleda: 1907 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.