Archive

Archive for December 9th, 2005

MySQL Upgrade

December 9th, 2005 Valery Dachev No comments

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: 3% [?]

Categories: Personal Tags:

MySQL Upgrade

December 9th, 2005 Valery Dachev 6 comments

Как се минава от 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: 9% [?]

Categories: Administration Tags:

Ко напрай уе, човек?

December 9th, 2005 Valery Dachev No comments

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

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

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

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

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

Popularity: 3% [?]

Categories: Personal Tags: