Create table Mysql dans un bash via EOF

Résolu
FredM - 10 déc. 2023 à 22:11
 Fred - 14 déc. 2023 à 23:02

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

jordane45 Messages postés 38161 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 657
10 déc. 2023 à 22:35

Bonjour

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


1

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

0
jordane45 Messages postés 38161 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 657
11 déc. 2023 à 00:03

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
jordane45 Messages postés 38161 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 657 > jordane45 Messages postés 38161 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024
11 déc. 2023 à 00:19

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
Fred > jordane45 Messages postés 38161 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024
14 déc. 2023 à 23:02

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

0