Firebird UTF8 vs WIN1254-PXW_TURK

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Firebird UTF8 vs WIN1254-PXW_TURK

Mesaj gönderen Lost Soul »

Selamun Aleyküm.
Bu döküman aslında soru olacaktı fakat soruyu hazırlarken cevabı da buldum o yüzden makaleye çevirdim :)

Arkadaşlar hepimizin bildiği üzere Firebird'de biz CHARSET=WIN1254 ve COLLATE= PXW_TURK kullanıyoruz.
bir zamandır Firebird'de UTF8 diye bir alan var
ben de utf8 ile ilgili şöyle bir deneme yaptım

Kod: Tümünü seç

CREATE TABLE TTEST (
    ASTR  VARCHAR(100) CHARACTER SET UTF8,
    BSTR  VARCHAR(100) CHARACTER SET UTF8 COLLATE UCS_BASIC,
    CSTR  VARCHAR(100) CHARACTER SET UTF8 COLLATE UNICODE,
    DSTR  VARCHAR(100) CHARACTER SET UTF8 COLLATE UNICODE_CI,
    ESTR  VARCHAR(100) COLLATE PXW_TURK,
    FSTR  VARCHAR(100) /*burayı table designerda WIN1254-WIN1254 olarak işaretlemiştim :)*/
);

Kod: Tümünü seç

INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('z','z','z','z','z','z');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('y','y','y','y','y','y');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('x','x','x','x','x','x');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('w','w','w','w','w','w');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('v','v','v','v','v','v');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('ü','ü','ü','ü','ü','ü');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('u','u','u','u','u','u');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('t','t','t','t','t','t');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('ş','ş','ş','ş','ş','ş');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('s','s','s','s','s','s');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('r','r','r','r','r','r');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('q','q','q','q','q','q');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('p','p','p','p','p','p');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('ö','ö','ö','ö','ö','ö');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('o','o','o','o','o','o');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('n','n','n','n','n','n');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('m','m','m','m','m','m');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('l','l','l','l','l','l');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('k','k','k','k','k','k');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('j','j','j','j','j','j');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('i','i','i','i','i','i');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('ı','ı','ı','ı','ı','ı');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('h','h','h','h','h','h');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('ğ','ğ','ğ','ğ','ğ','ğ');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('g','g','g','g','g','g');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('f','f','f','f','f','f');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('e','e','e','e','e','e');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('d','d','d','d','d','d');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('ç','ç','ç','ç','ç','ç');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('c','c','c','c','c','c');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('b','b','b','b','b','b');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('a','a','a','a','a','a');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('Z','Z','Z','Z','Z','Z');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('Y','Y','Y','Y','Y','Y');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('X','X','X','X','X','X');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('W','W','W','W','W','W');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('V','V','V','V','V','V');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('Ü','Ü','Ü','Ü','Ü','Ü');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('U','U','U','U','U','U');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('T','T','T','T','T','T');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('Ş','Ş','Ş','Ş','Ş','Ş');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('S','S','S','S','S','S');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('R','R','R','R','R','R');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('Q','Q','Q','Q','Q','Q');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('P','P','P','P','P','P');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('Ö','Ö','Ö','Ö','Ö','Ö');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('O','O','O','O','O','O');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('N','N','N','N','N','N');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('M','M','M','M','M','M');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('L','L','L','L','L','L');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('K','K','K','K','K','K');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('J','J','J','J','J','J');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('İ','İ','İ','İ','İ','İ');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('I','I','I','I','I','I');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('H','H','H','H','H','H');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('Ğ','Ğ','Ğ','Ğ','Ğ','Ğ');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('G','G','G','G','G','G');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('F','F','F','F','F','F');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('E','E','E','E','E','E');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('D','D','D','D','D','D');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('Ç','Ç','Ç','Ç','Ç','Ç');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('C','C','C','C','C','C');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('B','B','B','B','B','B');
INSERT INTO TTEST (ASTR,BSTR,CSTR,DSTR,ESTR,FSTR) VALUES ('A','A','A','A','A','A');

COMMIT WORK;
Sorgular ve Sıralama sonuçları

Kod: Tümünü seç

select ASTR from TTEST order BY ASTR; /*UTF8*/
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,Ç,Ö,Ü,ç,ö,ü,Ğ,ğ,İ,ı,Ş,ş

Kod: Tümünü seç

select BSTR from TTEST order BY BSTR; /*UTF8 COLLATE UCS_BASIC*/
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,Ç,Ö,Ü,ç,ö,ü,Ğ,ğ,İ,ı,Ş,ş,

Kod: Tümünü seç

select CSTR from TTEST order BY CSTR; /*UTF8 COLLATE UNICODE*/
a,A,b,B,c,C,ç,Ç,d,D,e,E,f,F,g,G,ğ,Ğ,h,H,i,I,İ,ı,j,J,k,K,l,L,m,M,n,N,o,O,ö,Ö,p,P,q,Q,r,R,s,S,ş,Ş,t,T,u,U,ü,Ü,v,V,w,W,x,X,y,Y,z,Z

Kod: Tümünü seç

select DSTR from TTEST order BY DSTR; /*UTF8 COLLATE UNICODE_CI*/
a,A,b,B,c,C,ç,Ç,d,D,e,E,f,F,g,G,ğ,Ğ,h,H,i,I,İ,ı,j,J,k,K,l,L,m,M,n,N,o,O,ö,Ö,p,P,q,Q,r,R,s,S,ş,Ş,t,T,u,U,ü,Ü,v,V,w,W,x,X,y,Y,z,Z

Kod: Tümünü seç

select ESTR from TTEST order BY ESTR; /*COLLATE PXW_TURK*/
a,A,b,B,c,C,ç,Ç,d,D,e,E,f,F,g,G,ğ,Ğ,h,H,ı,I,i,İ,j,J,k,K,l,L,m,M,n,N,o,O,ö,Ö,p,P,q,Q,r,R,s,S,ş,Ş,t,T,u,U,ü,Ü,v,V,w,W,x,X,y,Y,z,Z

Kod: Tümünü seç

select FSTR from TTEST order BY FSTR; /*CHARACTER WIN1254 COLLATE WIN1254*/
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,Ç,Ğ,Ö,Ü,İ,Ş,ç,ğ,ö,ü,ı,ş
Sonuç:
UNICODE_CI
a,A,b,B,c,C,ç,Ç,d,D,e,E,f,F,g,G,ğ,Ğ,h,H,i,I,İ,ı,j,J,k,K,l,L,m,M,n,N,o,O,ö,Ö,p,P,q,Q,r,R,s,S,ş,Ş,t,T,u,U,ü,Ü,v,V,w,W,x,X,y,Y,z,Z
PXW_TURK
a,A,b,B,c,C,ç,Ç,d,D,e,E,f,F,g,G,ğ,Ğ,h,H,ı,I,i,İ,j,J,k,K,l,L,m,M,n,N,o,O,ö,Ö,p,P,q,Q,r,R,s,S,ş,Ş,t,T,u,U,ü,Ü,v,V,w,W,x,X,y,Y,z,Z

Eğer UTF8 kodlamasında PXW_TURK deki gibi i-İ ı-I eşleşmesi düzgün yapılmış olsaydı UTF8 COLLATE UNICODE veya UTF8 COLLATE UNICODE_CI tadından yenmez bir set olacaktı.
Malesef bu değiştirilme(yeceği)(diği) için Türkçe karakterlerin önemli olduğu projelerde PXW_TURK'e devam.
Cevapla