Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pourquoi Vous Devez Utiliser MySQL

Pourquoi Vous Devez Utiliser MySQL

Présentation humoristique en faveur de PostgreSQL

Grégoire Pineau

August 27, 2019
Tweet

More Decks by Grégoire Pineau

Other Decks in Programming

Transcript

  1. Pourquoi Vous Devez Utiliser MySQL AFUP / AFSY août 2019

  2. Grégoire Pineau Dev @JoliCode Core Contributor @ Symfony

  3. J’aime PostgreSQL Mais j’ai utilisé MySQL et …

  4. Parlons en

  5. Un schéma simple pour commencer CREATE TABLE author ( name

    VARCHAR(10) DEFAULT NULL ); INSERT INTO author ( name ) VALUES ( 'Gregoire' ), ( 'Grégoire' ), ( 'Gregory' ), ( 'Grant' );
  6. On vérifie les données mysql> select * from author order

    by name; +----------+ | name | +----------+ | Grant | | Gregoire | | Gregory | | Grgoire | +----------+ 4 rows in set (0.00 sec) postgres=# select * from author order by name; name ---------- Grant Gregoire Grégoire Gregory (4 rows)
  7. Il faut utiliser CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci

  8. On ajoute d’autres données mysql> insert into author (name) values

    ('a very very long name'); Query OK, 1 row affected, 1 warning (0.10 sec) mysql> select * from author ; +------------+ | name | +------------+ [...] | a very ver | +------------+ 5 rows in set (0.01 sec) postgres=# INSERT INTO author (name) VALUES ('a very very very long name'); ERROR: value too long for type character varying(10)
  9. Il faut utiliser set global sql_mode='STRICT_TRANS_TABLES';

  10. Une petite modification de schéma mysql> ALTER TABLE author ADD

    COLUMN description text NOT NULL; Query OK, 0 rows affected (0.11 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM author ; +------------+-------------+ | name | description | +------------+-------------+ | Gregoire | | [...] postgres=# ALTER TABLE author ADD COLUMN description text NOT NULL; ERROR: column "description" contains null values
  11. Il faut faire attention

  12. Et l’UTF-8 ? mysql> select ''; +--+ | | +--+

    | | +--+ 1 row in set (0.00 sec) # Note: J’ai utilisé l’option --default-character-set=utf8 postgres=# select ''; ?column? ---------- (1 row)
  13. Il n’y a pas de solution

  14. Il y a plus de types • SQL standard •

    JSON (8+, 9/2017) • GEO (8+, 9/2017) • SQL standard • JSON (9.3, 9/2013) • GEO • Bool • Uuid • XML • hstore • network (ip, cidr, mac) • full text • composite • range • user defined
  15. Et sinon ? • MySQL ne supporte pas les Common

    Table Expression (<8) • MySQL ne supporte pas les Windows Fonctions en (<8) • On ne peut pas changer le schéma dans une transaction • MySQL n’a pas de système de “Foreign data wrapper” • Le CLI est affreux • MySQL ne respecte pas SQL92 ◦ Mais qui la respecte ? • MySQL a été “repris” par Oracle • Le développement est fait en interne
  16. MySQL évolue clairement dans le bon sens, mais Postgres a

    plus d’une longueur d’avance
  17. Merci,