Archive for the ‘Mysql’ Category

SQL Formatter

Thursday, February 15th, 2007

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

MS SQL naar MySQL converteren

Monday, September 25th, 2006

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.

Tekst sorteren als numeriek

Thursday, June 29th, 2006
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      |
+---------+

Wachtwoord vergeten van Mysql?

Tuesday, June 20th, 2006

Als je niet meer in de mysql database kan:

Stappenplan:

  1. Stop de mysqlserver (bv /etc/init.d/mysql stop)
  2. Start de mysqlserver mbv save_mysqld –skip-grant-tables
  3. Start mysql en update de user tabel:update user SET Password = PASSWORD(‘hetwachtwoord’) WHERE Host=’localhost’ AND User=’root’;
  4. Kill de mysql processen: killall mysqld
  5. Start de server opnieuw: /etc/init.d/mysql start)

En vergeet het wachtwoord nooit meer…

Dumpen van MySQL 4.1 naar 4.0

Tuesday, June 20th, 2006

Eindelijk: mysqldump –create-options –compatible=mysql40 db_name > dump_file

Paging in Mysql CLI

Friday, April 14th, 2006

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

Schaalbaarheid PHP/Mysql

Tuesday, April 11th, 2006

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.

Mysql Diff dinges

Thursday, April 6th, 2006

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/ )

Onthouden

Friday, March 24th, 2006

Om alles voor en inclusief de laatste ‘/’ te wissen:
update wikied_pages set path = substring_index(path, '/', -1);

mysql_insert_id() en InnoDB

Wednesday, March 22nd, 2006

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…)