Mindlog of a Freak
Sponsor
MySQL Upgrade by Valery Dachev, Friday, December 9th, 2005 at 11:52 pm

How to migrate from MySQL 4.0 to MySQL 4.1/5.x ? Umm… it’s hard. The most noticeable changes are two:

  • the contents of the TIMESTAMP field is no longer "20051209215200" - it’s something like "2005-12-09 21:52:00". The tricks of relying on this format don’t work anymore and the way of processing it should be changed;
  • before 4.1 appeared we had a default charset which didn’t make much sense. Now we have character sets and collations at database, table and field level.

As far as the side effects of the first change can be fixed easily, this is not that trivial in the second case. By default, MySQL 4.0 uses latin1 charset, but a different one can be specified with the "default_charset" option in my.cnf. There is no noticeable effect on the contents or the work of the client. Maybe on the collations only (I may be wrong here) and on data ordering repectively. After migration to 4.1 this charset makes much more sense, especially when changing the charset of a column. For example, when a cp1251 information was stored in a latin1 column. If I try to execute the query:

ALTER TABLE `table` CHANGE `field` `field` varchar(32) DEFAULT NULL CHARACTER SET cp1251;

in order to fix the charset of the field, its contents will be inproperly converted which, as a result, would lead to data loss. This coverted takes place every time when the character set is changed from one to another. However there’s a trick, which can be found at http://dev.mysql.com/doc/refman/4.1/en/charset-conversion.html and it is to change the column type to binary and then back to the initial one but with the desired character set. This way no convertion takes place:

ALTER TABLE `table` CHANGE `field` `field` binary(32);
ALTER TABLE `table` CHANGE `field` `field` varchar(32) DEFAULT NULL CHARACTER SET cp1251;

At the bottom of the page there’s a PHP script written by Shimon Doodkin which passes all databases, tables and fields and makes the changes mentioned above. It was the piece of code I based MySQL Charsets on. This tool does the same job, but it additionally gives you the ability to limit its work on a single database or table, to visually choose a charset and/or collation, to generate a script for conversion and some more features. It works very well for me and I’d be glad if someone else take advantige over it :)

Popularity: 4% [?]

MySQL Upgrade by Valery Dachev, Friday, December 9th, 2005 at 10:16 pm

Как се минава от MySQL 4.0 към MySQL 4.1/5.x ? Еми трудно. Най-значимите промени са две:

  • съдържанието на TIMESTAMP полето вече не е "20051209215200", ами нещо от типа на "2005-12-09 21:52:00". Фокусите да се разчита на този формат вече не вършат работа и обработката трябва да се замени;
  • до преди да се появи 4.1 имахме един default charset, който не играеше особена роля. Сега вече си имаме символни множества (charsets) и правила за сравнения (collations) на ниво база, на ниво таблица и на ниво поле.

Доколкото вредните ефекти от първата промяна се оправят лесно, във втория случай това не е толкова тривиално. По подразбиране MySQL 4.0 ползва набор от символи latin1, но в общия случай това се регулира от "default_charset" опцията в my.cnf. Това няма абсолютно никакъв ефект върху съдържанието и работата на клиента. Може би само върху сравнението (тук може и да греша), респективно върху сортирането. Когато се мине към версия 4.1 този charset има особено значение при смяната на charset-а на колонката. Например, когато cp1251 информация е била съхранявана в latin1 поле. Ако се опитам да извикам заявката:

ALTER TABLE `table` CHANGE `field` `field` varchar(32) DEFAULT NULL CHARACTER SET cp1251;

, за да оправя charset-а на полето, съдържанието му ще бъде неправилно конвертирано, което в крайна сметка ще доведе до загуба на данни. Такова конвертиране се извършва винаги при преход от един character set към друг. Има един трик обаче, който може да се види на адрес http://dev.mysql.com/doc/refman/4.1/en/charset-conversion.html и той се състои в промяна на типа на колонката към binary и после обратно към изходния тип, но с желания character set. Така конвертиране не се извършва:

ALTER TABLE `table` CHANGE `field` `field` binary(32);
ALTER TABLE `table` CHANGE `field` `field` varchar(32) DEFAULT NULL CHARACTER SET cp1251;

В дъното на същата страница има PHP скрипт написан от Shimon Doodkin, който обхожда всички бази, таблици и полета и прави въпросните промени. Той беше и базата, на която написах MySQL Charsets. Този инструмент върши същата работа, само че дава възможност работата да се ограничи до една база или до една таблица, визуално да се избира charset и/или collation, да генерира скрипта за конвертирането и разни други благинки. На мен свърши полезна работа и ще се радвам, ако и някой друг се възползва. :)

Popularity: 11% [?]

Ко напрай уе, човек ? by Valery Dachev, Friday, December 9th, 2005 at 9:33 pm

Баси… от кога не си писал… две седимици минус три дни. Хората започват да питат… Да рече??, че си се прекър??ил от работа - ще излъже??. Да рече??, че не ти остава свободно време - пак ще излъже??. Опитай нещо друго, започвам да не ти вярвам. Най-вероятно е от напрежението. Още не си свикнал нещата да не се случват така, както си ги намислил и се паникьосва??. Запазва?? само привидно самообладание, но сънят ти е неспокоен.. постоянно се чувства?? изтощен и в крайна сметка си с близка до нулева продуктивност. Да, на това вече бих се вързал.

Но нали иска??е дните ти да не са еднообразно ? Какво не ти харесва сега ? Всеки ден нови проблеми. Всеки ден нови ангажименти. Всеки ден нещо ново, което да ти полази по нервите със съществуването си и въпреки това да е необходимо. Ядосва?? се на несправедливото отно??ение към теб и все още не си свикнал с него. Влудяват те изискванията на тези, които не са готови да дадат, за да получат. Всеки план ти се обърква и малко са нещата, които те карат искрено да се усмихне??. Не получава?? вниманието точно на тези, от които има?? нужда. А когато го получава??, сяка?? не ти стига. Всеки друг ти лази по нервите, а ??егите ти започват да придобиват саркастичен характер. Наранява?? и хората, които не го заслужават, а в същото време не търпи?? критики. С теб просто не се излиза на глава.. но пък се спори чудесно. Само да има повод. Прави?? се на силен и забравя??, че, за да убеди?? другите, първо трябва сам да си повярва??.

А край теб се случват толкова много неща.. срива се половината MAN в София, твои приятели ги прибират за глупости, трупат ти проекти един след друг, в собствената ти фирма ти убиват инерцията за работа за сметка на изискванията си, а на теб не ти остава време да посвети?? на себе си… Насъбрал си на почти всички край себе си и се чуди?? на кого да го изкара??. Почти всички, от които си търсил подкрепа, са те преда(ва)ли и вече се доверява?? само на себе си.

??стината е, че прекарва?? дните си в очакване на човека, който да кара да се усмихне?? поне за малко, да се почувства?? спокоен, сигурен… но, дори така да е, стъклените колони на този храм те карат постоянно да гледа?? към тавана, който във всеки момент може да те премаже. Чувства?? се толкова несигурен и бръчките по лицето ти вече започват трайно да го изкривяват. Вижда?? това всяка сутрин в огледалото. По някое време се опитва?? да си припомни?? погледна ли се всъщност на какво прилича??… не се получава - побързал си да забрави??.

Ето така, драги ми Валери, изглежда?? отстрани… Не ти харесва гледната точка, знам.

Popularity: 4% [?]

|