Create table Mysql dans un bash via EOF

Résolu
FredM -  
 Fred -

Bonjour,

J'ai cette erreur : ERROR 1064 (42000) at line 7: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'varchar(100) COLLATE utf8mb4_bin NOT NULL DEFAULT "",
  value longtext COLLAT...' at line 2

Lorsque je lance ce script bash .

     #Création de la base de données Etherpad
     echo "Choisir un mot de passe pour la base de donnée Etherpad"
     read -s password
     mysql --user=root  <<-EOF
CREATE DATABASE etherpad;
CREATE USER 'etherpad'@'localhost' IDENTIFIED BY '$password';
GRANT ALL PRIVILEGES ON etherpad.* TO "etherpad"@"localhost";
FLUSH PRIVILEGES;
USE etherpad;
CREATE TABLE store (
  key varchar(100) COLLATE utf8mb4_bin NOT NULL DEFAULT "",
  value longtext COLLATE utf8mb4_bin NOT NULL,
  PRIMARY KEY (key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
EOF

Le code qui va bien sous phpmyadmin est celui-ci. J'ai viré les ` dans le script car j'avais des erreurs mais à priori c'est le double ' après DEFAULT qui pose problème...J'ai essayé de le remplacer par un double " mais ce n'est pas mieux ;(

CREATE TABLE `store` (
  `key` varchar(100) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
  `value` longtext COLLATE utf8mb4_bin NOT NULL,
  PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

Une piste ?

Merci

Windows / Firefox 120.0

2 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     

    Bonjour

    Key est un mot clé réservé et ne peut pas être utilisé à moins de le back quoter


    1
  2. FredM
     

    En mettant autre chose que Key le problème reste entier ;(
    C'est un pb de quotes ou doubles quotes à priori...

    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       

      Tu as changé le "mot" partout ? y compris dans la définition de la primary ?

      Le message d'erreur reste le même ?

      Peux tu nous poster la requêtes que tu viens de tester et qui te retourne encore une erreur ?

      A noter que le mot "value" lui aussi est réservé..

      Voici le liste complète : https://dev.mysql.com/doc/refman/8.0/en/keywords.html#keywords-8-0-detailed-V

      0
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         

        Au passage, essaye de mettre des back slashes devant les backquotes

        CREATE TABLE \`store\` (
          \`key\` varchar(100) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
          \`value\` longtext COLLATE utf8mb4_bin NOT NULL,
          PRIMARY KEY (\`key\`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
        1
      2. Fred > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         

        Super, merci : en mettant des back slashes devant les backquotes cela fonctionne !
        Merci à toi.
         

        0