Een soort HTML Tidy maar dan voor SQL. Handig voor lange SQL statements die nogal genest zijn.
http://www.wangz.net/cgi-bin/pp/gsqlparser/sqlpp/sqlformat.tpl
Een soort HTML Tidy maar dan voor SQL. Handig voor lange SQL statements die nogal genest zijn.
http://www.wangz.net/cgi-bin/pp/gsqlparser/sqlpp/sqlformat.tpl
Vandaag ontving ik een backup bestand van een database die was opgeslagen in Microsoft SQL Server. Dat is niet echt handig als je niet over SQL server beschikt. Gelukkig heeft Microsoft een soort gratis SQL server light onder de naam SQL Server Express. Bovendien leveren ze ook gratis een GUI voor SQL server: SQL Server Management Studio Express. Nadat ik deze had geïnstalleerd kon ik met behulp van de instructies op deze pagina de backup installeren op mijn eigen installatie van SQL Express.
Op http://www.kofler.cc/mysql/mssql2mysql.html is een VB script te vinden dat gebruikt kan worden om een MS SQL database te converteren naar MySQL. Deze code dient geplakt te worden in een VBA-module zoals die in Word aanwezig is. Daarna de constanten bovenin dit script editen, met name Const MSSQL_HOST = "(local)": Deze moest ik aanpassen naar “MSHOME\SQLEXPRESS”. De standaardsetting werkt niet met SQL Express. Het VB Script kan rechtstreeks naar een mysql database schrijven maar ook naar een tekstbestand.
Dit tekstbestand kan dan later geïmporteerd worden in MySQL. Het vereist nog wel enige nabewerking (ik kwam auto_increment waarden tegen die door het scriptje niet als primaire sleutel waren gedefinieerd) maar mijn doel was toch een read-only situatie om verder te converteren dus dat geeft niets.
Als je dit hebt:
mysql> SELECT version -> FROM version_sorting -> ORDER BY version; +---------+ | version | +---------+ | 1 | | 10 | | 11 | | 12 | | 2a | | 4b | | 5a | | 5b | +---------+ 8 rows in set (0.03 sec)
Dan kun je sorteren met:
mysql> SELECT version -> FROM version_sorting -> ORDER BY CAST(version AS UNSIGNED), version; +---------+ | version | +---------+ | 1 | | 2a | | 4b | | 5a | | 5b | | 10 | | 11 | | 12 | +---------+
Als je niet meer in de mysql database kan:
Stappenplan:
En vergeet het wachtwoord nooit meer…
Eindelijk: mysqldump –create-options –compatible=mysql40 db_name > dump_file
Via: paging in de mysql command line interface. Na geploeter met limit om een indruk van datasets te krijgen kan het ook zo:
mysql> \P less
mysql> PAGER set to 'less'
mysql> select foo,bar from table\G
Interessant verhaal over de schaalbaarheid van PHP/Mysql/Java. Als voorbeeld wordt Digg aangehaald. Belangrijkste conclusies: PHP schaalt prima naar miljoenen hits per dag, het is de backend die problemen veroorzaakt. Wel moet PHP wat getweakt worden. Een hele geruststelling.
Handig! Een tool om twee mysql structuren met elkaar te vergelijken en bij te werken. Vaak nodig gehad om twee database-structuren synchroon te houden. Zeker als je code gaat releasen die een andere databasestructuur vereist is het wel handig als je zeker weet dat twee databases dezelfde structuur hebben. Dus deze tool kwam als geroepen.
Helaas werkte tests van de Mysql::Diff module niet met mysql 4.1: perl -MCPAN -e 'install Mysql::Diff' faalde helaas op de tests. Maar toen ik de module dan maar gewoon installeerde zonder de tests probeerde ik het meegeleverde scriptje mysqldiff te runnen, met als database 1 de productieversie en database 2 mijn eigen development versie.
Het scriptje vergelijkt de structuur van twee databases. De eerste database is de achterlopende, dus de database die je wilt bijwerken. De tweede database bevat de gewenste structuur.
Dat leverde het volgende resultaat:
ALTER TABLE `wikied_locks` DROP COLUMN `session_id`; # was varchar(32) NOT NULL default ''
ALTER TABLE `wikied_locks` ADD COLUMN `userid` int(11) unsigned default NULL;
ALTER TABLE `wikied_searchlog` ADD COLUMN `filter` varchar(255) NOT NULL default '';
ALTER TABLE `wikied_searchlog` ADD COLUMN `ip` int(11) NOT NULL default '0';
En dat kan rechtstreeks op de productieserver worden toegepast.
http://www.adamspiers.org/computing/mysqldiff/
(en op CPAN: http://search.cpan.org/~aspiers/MySQL-Diff-0.33/ )
Om alles voor en inclusief de laatste ‘/’ te wissen:
update wikied_pages set path = substring_index(path, '/', -1);
Bij gebruik van transacties geeft de php-functie mysql_insert_id() verschillende waarden, afhankelijk van wanneer je het aanroept. Wanneer je mysql_insert_id() aanroept voor de commit, dan is de waarde correct. Echter na de commit is de waarde 0. Mysql “SELECT LAST_INSERT_ID” geeft wel de correcte waarde, maar dan weer niet na een ROLLBACK.
in PHP:
(more…)