imop Posted January 28, 2010 Report Share Posted January 28, 2010 (edited) Sveiki! Man jautājums par to kā var noaminīt jau esošai DB "Collation" no latin1_swedish_ci uz utf8_bin, Bet VISĀM tabulām, mēģināju palaist šādu (ALTER DATABASE `manabaze` CHARACTER SET utf8 COLLATE utf8_bin;) skriptu iekš phpmyadmin, bet nesanāca :( varbūt kāds zin kā to var izdarīt savādāk man ar rokām mainīt visam būtu pārāk ilgi! Edited January 28, 2010 by imop Quote Link to comment Share on other sites More sharing options...
2easy Posted January 28, 2010 Report Share Posted January 28, 2010 man gan sanāca (uz localhost). nezinu vai uz hostiem tā var darīt. tur laikam jāizmanto hostinga paneļa funkcionalitāte, lai mainītu datu bāzes defaulto charset/collation btw, tev gadījumā drīzāk nevajadzēja datu kodējumu mainīt? Quote Link to comment Share on other sites More sharing options...
imop Posted January 28, 2010 Author Report Share Posted January 28, 2010 (edited) man gan sanāca (uz localhost). nezinu vai uz hostiem tā var darīt. tur laikam jāizmanto hostinga paneļa funkcionalitāte, lai mainītu datu bāzes defaulto charset/collation btw, tev gadījumā drīzāk nevajadzēja datu kodējumu mainīt? Pašā DB jāsaimana charset/collation visām tabulām, kā default man tagad stāv utf8_bin pie ierakstu veidošanas, bet gan pašām tabulām ir latin1_swedish_ci Viens risinājums ir paņemt eksportēt DB iekopēt kādā editorā un samainīt vienkārši latin1 ierakstus uz utf8 un latin1_bin uz utf8_bin, bet nezinu vai tas īsti ir pareizi, jo tad viņš man DB rāda visām tabulām utf8_general_ci, ja tas neimaina lietas būtību, tad var arī palikt utf8_general_ci ir ok - utf8_general_ci vai tomēr utf8_bin Edited January 28, 2010 by imop Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted January 28, 2010 Report Share Posted January 28, 2010 Ehh...tieši pirms dažām dienām cīnījos ar to. Tā kā DB bija jau veca un liela, tad laika gaitā tur bija saradušās visādas vērtības - gan latin1 kodējumā, gan utf8 kodējumā. Pareizākais (un drošākais) variants, IMO, ir konvertēt visus datus uz bināro formātu un tad uz utf8. Tas piespiedīs uzspiest visiem datiem pareizo kodējumu un tos tiešām pārkonvertēt un neradīsies tāda situācija, ka daži simboli (ā, š, utt) būs izkropļoti. Tas gan paņems krietnu laiciņu sarakstīt kvērijus un izpildīt tos (ja DB ir liela), bet vismaz būs droši, ka viss būs OK ;) btw tas attiecas uz gadījumu, ja tu vēlies arī datus konvertēt ne tikai datubāzes collation nomainīt. DB collation var nomainīt iekš phpmyadmin pat nevienu kvēriju nerakstot. Pie operations sadaļas... Quote Link to comment Share on other sites More sharing options...
2easy Posted January 29, 2010 Report Share Posted January 29, 2010 (edited) tādos gadījumos vieglāk exportēt visu ārā, un tad nomainīt gan datu kodējumu, gan aiz katra CREATE TABLE ierakstīt jauno kodējumu: CHARSET=utf8 un pēc tam import atpakaļ sanāk, ka uz brīdi ir jāaptur lapa (vēlams 3:00 naktī vai kad ir vismazāk useri :D), kamēr nomaina db: 1) export 2) convert datus un atbilstoši izmaina arī tabulu meta info 3) drop visas vecās tabulas 4) import protams, to visu sākumā dara uz testa datiem ;) un tā kā kkādi gļuki var tikt pamanīti tikai vēlāk, tad ir ieteicams kādu brīdi pieglabāt arī oriģinālo sql export ohh, vēl viena piebilde: ja tajās latin1 tabulās jau ir utf8 dati (tā bieži gadās), tad datus nemaz nevajag konvertēt. tikai exportētajā sqlā ir jānomaina tabulu charsets (pie CREATE TABLE) un var importēt atpakaļ. turpmāk gan jālieto mysql_query('SET NAMES utf8'); bet ja tomēr ir tā, kā rATRIJS teica, kad dažādu kodējumu dati ir samixēti kopā, tad gan tomēr nākas exportēt un labot visu ar custom replace. izdarāms tas ir, tikai jāpēta, kādi baiti tur ir un kas ar tiem ir domāts ;) Edited January 29, 2010 by 2easy Quote Link to comment Share on other sites More sharing options...
EdgarsK Posted January 29, 2010 Report Share Posted January 29, 2010 luuk tiko pameiignaju viss sance edgars@kein:~$ mysqldump -u lietotajvards -p datubaze > mysqlbackup.sql edgars@kein:~$ mysql -u lietotajvards -p password: * -- Life Rocks | Mysql version 5.1.36 -- Time: 11:50 | 29. January 2010 mysql> drop database datubaze; Query OK, 1 row affected (0.02 sec) mysql> create database employees character set utf8 COLLATE utf8_general_ci; Query OK, 1 row affected (0.00 sec) quit edgars@kein:~$ mysql -u lietotajvards -p datubaze < mysqlbackup.sql exit Quote Link to comment Share on other sites More sharing options...
2easy Posted January 29, 2010 Report Share Posted January 29, 2010 dumpā ir CREATE TABLE definīcija ar veco CHARSET tas ka datu bāzes defaulto nomaina, ar to ir par maz Quote Link to comment Share on other sites More sharing options...
EdgarsK Posted January 29, 2010 Report Share Posted January 29, 2010 nu tak piemet atributus dumpam -> replaceCharset=utf8 /all Quote Link to comment Share on other sites More sharing options...
Maris-S Posted January 29, 2010 Report Share Posted January 29, 2010 (edited) Ļoti stipri neiedziļinājos tēmā, bet paskaties varbūt šis nostrādās, protams sākumā rezerves kopijas sataisi: http://forums.mysql.com/read.php?103,2574,25131#msg-25131 Edited January 29, 2010 by Maris-S Quote Link to comment Share on other sites More sharing options...
EdgarsK Posted January 29, 2010 Report Share Posted January 29, 2010 Maris-S -> īsti vīri backupus netaisa :P Quote Link to comment Share on other sites More sharing options...
2easy Posted January 29, 2010 Report Share Posted January 29, 2010 nju tad jau pie reizes arī "Тормоза придумали трусы" :D Quote Link to comment Share on other sites More sharing options...
2easy Posted January 29, 2010 Report Share Posted January 29, 2010 (edited) anyway, es domāju pēc visa šitā imopam būs viela pārdomām ^^ EDIT: heh, vēl nebija neviens citāts no klasikas. tāpēc check this out too ;) http://laacz.lv/2006/12/28/mysql-un-utf8/ Edited January 29, 2010 by 2easy Quote Link to comment Share on other sites More sharing options...
imop Posted January 29, 2010 Author Report Share Posted January 29, 2010 anyway, es domāju pēc visa šitā imopam būs viela pārdomām ^^ EDIT: heh, vēl nebija neviens citāts no klasikas. tāpēc check this out too ;) http://laacz.lv/2006/12/28/mysql-un-utf8/ thx visiem, tiešām būs ko apsmadzeņot, tā kā viss tiek apgūts tad tiešām paldies! par rezutātie painformēšu kas un kā man izdevās! p.s. īsti vīri backup tomēr taisa un paglabā kādu laiku! :D Quote Link to comment Share on other sites More sharing options...
imop Posted January 29, 2010 Author Report Share Posted January 29, 2010 (edited) Sākumā nevarēju saprast kapēc man aiz visiem uzrakstiem parādās \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 bet beigās palasīju laacz rakstu mazliet uzmanīgāk un galu galā man izdevās! Tad darīju tā: Sākumā ALTER TABLE `kategorijas` MODIFY `kategorijas_nosaukumi` BINARY(255); un tad tikai uz utf8 ar šo: ALTER TABLE `kategorijas` MODIFY `kategorijas_nosaukumi` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin; un tad noņemam nulles un visu slashus "\" nost UPDATE `kategorijas` SET `kategorijas_nosaukumi` = REPLACE(`kategorijas_nosaukumi`, x'00', ''); Jāatdzīst penteris snāk liels pa visu DB, bet galarezultāts ir tas ko es vēlējos viss ir smuki un pareizi! Paldies! Edited January 29, 2010 by imop Quote Link to comment Share on other sites More sharing options...
imop Posted January 29, 2010 Author Report Share Posted January 29, 2010 Man šeit doma panesās a kapēc nē ja nu var šādi kaut ko ar php kopā: Lai nav jāraksta lielais penteris pēc augšējā parauga, kas pie lielākām DB varētu būt smagnējs process... bet gan ar šāda veidojuma palīdzību paveikto to visu automātiski: <?php // Piesledzos mysql_connect("localhost","lietotajs","parole"); mysql_select_db("datubazes_nosaukums"); // Nu tad aiziet $res = mysql_query("SHOW TABLES"); while ($row = mysql_fetch_array($res) while ($col = mysql_fetch_array($res) ) { foreach ($row as $key => $table) foreach ($col as $key => $column) { mysql_query("ALTER TABLE " . $table . " MODIFY " . $column . " BINARY('255');"); echo $key . " => " . $table . " un " . $column . " <b>IZDEVAS</b> parveidot<br />"; mysql_query("ALTER TABLE " . $table . " MODIFY " . $column . " VARCHAR('255') CHARACTER SET utf8 COLLATE utf8_bin;"); echo $key . " => " . $table . " un " . $column . " <b>IZDEVAS</b> parveidot<br />"; mysql_query("UPDATE " . $table . " SET " . $column . " = REPLACE(" . $column . ", x'00', '');"); echo $key . " => " . $table . " un " . $column . " <b>IZDEVAS</b> parveidot<br /> <br />"; } } ?> Tikai problēma, kā lai pasaka php ka viņam jāčēko sākumā TABULA kurās ir tikai "VARCHAR('???')" kur ??? vietā var būt dažādi skaitļi piem.: 1, 32, 255 utt. un veic darbibu: mysql_query("ALTER TABLE " . $table . " MODIFY " . $column . " BINARY('???');"); echo $key . " => " . $table . " un " . $column . " <b>IZDEVAS</b> parveidot<br />"; Tad kad tas ir pārveidots, lai sāk čēkot tās TABULAS kurās ir tikai "BINARY('???')", kur ??? vitā var būt dažādi skaitļi piem.: 1, 32, 255 utt. un veic darbību: mysql_query("ALTER TABLE " . $table . " MODIFY " . $column . " VARCHAR('255') CHARACTER SET utf8 COLLATE utf8_bin;"); echo $key . " => " . $table . " un " . $column . " <b>IZDEVAS</b> parveidot<br />"; nu un trešā darbība ir easy, bet jautājums vai tas ir iespējams izvilkt no DB to ko es vēlos un veikt konkrētās darbības, ja ir tad varbūt varat palīdzēt? 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.