URL: https://linuxfr.org/users/from_kobb/journaux/mysql-est-une-bouse-immonde Title: MySQL est une bouse immonde Authors: from_kobb Date: 2012年03月06日T22:58:22+01:00 Tags: mysql et postgresql Score: 30 Ayant commencé une petite appli web avec le framework Catalyst (très bon au passage), j'ai naturellement commencé le développement en utilisant la BDD SQlite. Très bonne petite base de données embarquée, mais mieux vaut avoir un truc un peu plus costaud en prod. Naïvement, je me suis orienté vers mysql, que je considérais comme une mise à jour logique de sqlite : plus adapté à l'utilisation voulue tout en restant simple. Heureux de cette conclusion, je donne à bouffer le schéma à mysql qui l'accepte sans broncher, tout a l'air bien parti. Quelques heures plus tard, je vois que l'appli marche bizarrement : effectivement, à y regarder de plus près une clé étrangère fait référence à une clé primaire inexistante. Je regarde le schéma et effectivement, les clés étrangères n'ont pas été crées. Un peu embêtant de ne pas avoir eu de message d'erreur à la création des tables mais passons, le fait que les tables MyISAM par défaut ne supportent pas les clés étrangères est connu. On repart pour un tour, cette fois-ci en faisant attention à bien utiliser InnoDB. Ça fonctionne bien mieux, mais encore quelques heures plus tard, je me retrouve avec des données corrompues. Je regarde de plus près mon blob à problèmes, et sa longueur n'est pas anodine : 65535. Quelques recherches google plus tard et après quelques arrachages de cheveux, je constate que, par défaut, MySQL ne retourne pas d'erreur quand on insère une valeur incorrecte dans un champ. Relativement "logique" en fait, vu que cette BDD n'est pas transactionnelle par défaut. Un petit "SET sql mode = 'TRADITIONAL';" plus tard le problème est résolu. Ce n'est que quelques minutes que je constate un autre problème : l'appli affiche une date de création anormalement récente pour pleins de choses. Arrachage de cheveux, questionnement sur la bonne utilisation de DBIx (l'ORM utilisé par Catalyst) que je découvre, et enfin une découverte uxamifiante : les champs de type timestamp se mettent à jour automatiquement à la date/heure courante quand on fait un update sur la table \_o\_ Bref, j'abandonne cette bouse de MySQL, je vais essayer PostgreSQL et serai bien plus indulgent avec les petits défauts d'Oracle et DB2. PS : Manifestement, je ne suis pas le seul à avoir des problèmes avec ce simulacre de base de données, qui a aussi le défaut de chier lamentablement sur de l'unicode parfaitement valide : http://linuxfr.org/suivi/fermeture-problematique-de-balises-markdown PS2 : Et pour se détourner de cette abomination, voilà la désormais traditionnelle jolie nimage : http://30.media.tumblr.com/tumblr_m0cdp5ipIE1qbsz3ko1_500.png

AltStyle によって変換されたページ (->オリジナル) /