Salut à tous.
Merci CinePhil, vous êtes d'une grande aide, en envoyant lire la documentation MySql.
Mais cela ne répond pas à la demande de "Jojo 51".
Concernant l'outil "load data local infile", il y a eu quelques changements dans la version MySql 8.0.
La docmentation MySql n'est pas très clair à ce sujet.
1) Quand vous avez l'erreur :
ERROR 1148 (42000) at line 40: Cette commande n'existe pas dans cette version de MySQL
cela signifie que vous utilisez encore "load data local infile".
Il faut maintenant écrire : "load data infile", c'est-à-dire sans le "local".
2) Quand vous avez l'erreur :
ERROR 1290 (HY000) at line 40: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
Vous devez paramétrer votre fichier "my.ini", en ajoutant dans la section "[mysqld]" :
1 2 3 4 5 6 7
| # ------------------------ #
# Load data infile #
# ------------------------ #
local-infile = 1
secure-file-priv = E:/30.MySql
loose-local-infile = on |
Avez-vous remarqué le chemin que j'utilise (E:/30.MySql) ?
Il n'est pas nécessaire de mettre exactement le répertoire où se trouve le fichier à charger, mais un répertoire englobant le sous-répertoire où va se trouver votre fichier à télécharger.
3) Si ça persister encore, vous ne devez plus utiliser des chemins relatifs, mais des chemins absolues pour charger vos fichiers.
Par exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| --------------
SET AUTOCOMMIT = 0
--------------
--------------
START TRANSACTION
--------------
--------------
SHOW VARIABLES LIKE 'secure_file_priv'
--------------
+------------------+--------------+
| Variable_name | Value |
+------------------+--------------+
| secure_file_priv | E:\30.MySql\ |
+------------------+--------------+
--------------
DROP DATABASE IF EXISTS `base`
--------------
--------------
CREATE DATABASE IF NOT EXISTS `base`
DEFAULT CHARACTER SET `latin1`
DEFAULT COLLATE `latin1_general_ci`
--------------
--------------
DROP TABLE IF EXISTS trav
--------------
--------------
CREATE TABLE trav (
col_num integer null default null,
col_date datetime null default null,
col_char varchar(255) null default null
) ENGINE=InnoDB
DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
ROW_FORMAT=COMPRESSED
--------------
--------------
LOAD DATA INFILE 'E:/30.MySql/40.Load/Ex_01/fichier.txt'
INTO TABLE `trav`
CHARACTER SET latin1
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '\"'
ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'
IGNORE 0 LINES
(@F1, @F2, @F3)
set col_num = trim(@F1),
col_date = str_to_date(trim(@F2), '%d/%c/%Y %H:%i:%s'),
col_char = trim(@F3)
--------------
--------------
select * from trav
--------------
+---------+---------------------+--------------------+
| col_num | col_date | col_char |
+---------+---------------------+--------------------+
| NULL | 2014-05-10 15:33:17 | web |
| 125 | 2014-05-15 23:53:59 | alpha; beta; gamma |
| -247 | NULL | zéro |
+---------+---------------------+--------------------+
--------------
COMMIT
--------------
--------------
SET AUTOCOMMIT = 0
--------------
Appuyez sur une touche pour continuer... |
Dans cet exemple, le paramètre de "secure_file_priv" est "E:\30.MySql\".
Par contre, le fichier que je charge se trouve dans "E:/30.MySql/40.Load/Ex_01/fichier.txt", c'est-à-dire un sous-répertoire.
Indiquer un chemin absolue me gène car je préfère mettre un chemin relatif.
Et si je dois déplacer mon répertoire, je suis obligé d'intervenir dans le script. C'est pas bon du tout !!!
En espérant vous avoir répondu à votre demande.
Envoyé par
CinePhil
Vu la syntaxe des autres variables présentes dans le my.cnf, il faut y écrire secure_file_priv avec des underscore.
Encore une connerie de votre part. Dans le fichier "my.ini", on met des tirets et non des soulignés.
Comment pouvez-vous le savoir si vous n'avez pas encore installé MySql sur votre ordinateur ?
Envoyé par
CinePhil
Si ça ne fonctionne toujours pas, essayez aussi dans le my.ini avec des \\ au lieu des /.
Encore une autre connerie. On met des "/" pour les chemins dans le fichier "my.ini".
@+
Partager