Jump to content
php.lv forumi

SET NAMES


Jackal

Recommended Posts

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?

Link to comment
Share on other sites

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 by 2easy
Link to comment
Share on other sites

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 by Jackal
Link to comment
Share on other sites

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 by 2easy
Link to comment
Share on other sites

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 by 2easy
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...