Jackal Posted December 8, 2009 Report Share Posted December 8, 2009 Manās rokās ir nonākusi viena datubāzes tabula, kurai baigi ir sačakarēts encodings. Daudziem ierakstiem ir atšķirīgi encodingi. Varbūt kādz zin, kur var attrast tabulu ar visiem encodingu nosaukumiem, kurus var padot mysql SET NAMES? Vai arī ir kāds labs veids kā noteikt encodingu? Quote Link to comment Share on other sites More sharing options...
2easy Posted December 8, 2009 Report Share Posted December 8, 2009 (edited) Varbūt kādz zin, kur var attrast tabulu ar visiem encodingu nosaukumiem, kurus var padot mysql SET NAMES? SHOW CHARSET Vai arī ir kāds labs veids kā noteikt encodingu? oo, encodings mainās pa rindām/ierakstiem? ja tā, tad smags gadījums :P tā kā uz tabulas meta info par encoding paļauties nevar, tad atliek vien pašam interpretēt datus (katra baita vērtību 0..255 jau var interpretēt dažādi) es darītu tā: 1) uzstādītu SET NAMES tādu pašu encoding kā tabulai, lai nerastos nekādi datu zudumi, konvertējot 2) izvadītu tādu tabulu browserī un tad mainītu view > character encoding. piefiksētu tās rindas, kas kļūst salasāmas pie attiecīgā kodējuma 3) uztaisītu jaunu tabulu ar utf8 kodējumu. tās rindas no vecās tabulas, kas jau bija utf8, insertotu tāpat, bet pārējās konvertētu uz utf8 ar iconv() vai mb_convert_encoding() par automātisko kodējuma atpazīšanu: utf8 kodējumu var atpazīt pēc datiem: divbaitu burti pa baitiem kodējas šādos intervālos 192..223,128..191, bet trīsbaitu burti 224..239,128..191,128..191 (šo metodi, piemēram, izmanto editplus,notepad++, kad ver vaļā utf8 bez bom) vienbaitu kodējumus var atpazīt, tikai meklējot vārdus dažādu valodu vārdnīcās (pie kam viena valoda var būt dažādos kodējumos). kad nezināmā kodējuma vārdu izdodas atrodas kādā vārdnīcā, značit tas teksts ir šajā valodā/kodējumā. lai būtu interesantāk, var būt arī kolīzijas, kad vieni un tie paši dati (baitu virkne) eksistē vairākās valodās/kodējumos. tādā gadījumā par attiecīgā teksta kodējumu var pieņemt to kodējumu, kurā ir visvairāk vārdi (domokrātiski vai ne?). anyway kolīziju gadījumus var caurskatīt un gala lēmumu pieņemt arī cilvēks ;) nju labi tas tā par automātiku, bet kamēr tabula nav pārmērīgi liela, tikmēr jau manuāli var ar to tikt galā ar tiem 3x soļiem. mb ir kkādi ērti tūļi, kas to izdara ļoti ātri un vienkārši, bet pagaidām pēc tādiem nav bijusi nepieciešamība. gan jau Koda Dieviem būs kas labāks ko ieteikt ;) Edited December 8, 2009 by 2easy Quote Link to comment Share on other sites More sharing options...
Jackal Posted December 8, 2009 Author Report Share Posted December 8, 2009 (edited) Array ( [0] => big5 [Charset] => big5 [1] => Big5 Traditional Chinese [Description] => Big5 Traditional Chinese [2] => big5_chinese_ci [Default collation] => big5_chinese_ci [3] => 2 [Maxlen] => 2 ) Pieliku zemāk esošo kodu, bet vienalga rādās ķeburi. mysql_query("SET NAMES 'big5'"); Pieliekot: mysql_query("SET NAMES 'latin1'"); viens ieraksts parādās pareizi, bet pārējie rādās greizi Edited December 8, 2009 by Jackal Quote Link to comment Share on other sites More sharing options...
2easy Posted December 8, 2009 Report Share Posted December 8, 2009 (edited) hmm, maz ticams, ka tev tur ir ķīniešu hieroglifi. big5 ir tikai pirmais kodējums tajā sarakstā ar visiem mysql serverim pieejamajiem kodējumiem. sry, ka mana iepriekšējā posta update sanāca pēc tava jaunākā posta, tāpēc izlasi par tiem 3x soļiem, kā/ko darīt... Edited December 8, 2009 by 2easy Quote Link to comment Share on other sites More sharing options...
2easy Posted December 8, 2009 Report Share Posted December 8, 2009 (edited) un šajā gadījumā SET NAMES tev nepalīdzēs. uzliec to vienādu ar tabulas encoding, kamēr tiksi skaidrībā, kura rinda ir kurā kodējumā. tabulas kodējumu var uzzināt no phpmyadmin (ja tu to lieto) vai no tādām sql komandām kā SHOW TABLE STATUS SHOW CREATE TABLE tbl_name Edited December 8, 2009 by 2easy Quote Link to comment Share on other sites More sharing options...
Jackal Posted December 8, 2009 Author Report Share Posted December 8, 2009 Paldies par atbildēm, mēģināšu tikt galā Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.