Pourquoi Vous Devez Utiliser MySQL

Pourquoi Vous Devez Utiliser MySQL

Présentation humoristique en faveur de PostgreSQL

7602f2751868682b296171f58589c851?s=128

Grégoire Pineau

August 27, 2019
Tweet

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,