$30 off During Our Annual Pro Sale. View Details »

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

    View Slide

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

    View Slide

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

    View Slide

  4. Parlons en

    View Slide

  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'
    );

    View Slide

  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)

    View Slide

  7. Il faut utiliser
    CHARACTER SET = utf8mb4
    COLLATE = utf8mb4_unicode_ci

    View Slide

  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)

    View Slide

  9. Il faut utiliser
    set global sql_mode='STRICT_TRANS_TABLES';

    View Slide

  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

    View Slide

  11. Il faut faire
    attention

    View Slide

  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)

    View Slide

  13. Il n’y a pas de
    solution

    View Slide

  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

    View Slide

  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

    View Slide

  16. MySQL évolue
    clairement dans le
    bon sens, mais
    Postgres a plus
    d’une longueur
    d’avance

    View Slide

  17. Merci,

    View Slide