Pages : 1
#1 Le 30/08/2014, à 20:24
- Spirale21
[Résolu] Mysql et les champs dates
Bonjour,
Voilà je me mets dans les base de données et donc bêtement je suis le tutoriel (dont le point de départ est içi). Comme je suis sous linux (Débian) au lieu d'un fichier text je vais un fichier CSV pour pas que mysql confonde la valeur NULL avec la fin d'une ligne (\n). Je veux l'entrée dans la table pet de la base de donnée ménagerie
~$cat pets.csv
Fluffy;Harold;cat;f;1993-02-04;
Claws;Gwen;cat;m;1994-03-17;
Buffy;Harold;dog;f;1989-05-13;
Fang;Benny;dog;m;1990-08-27;
Bowser;Diane;dog;m;1979-08-31;1995-07-29
Chippy;Gwen;bird;f;1998-09-11;
Whistler;Gwen;bird;;1997-12-09;
Slim;Benny;snake;m;1996-04-29;
ensuite je lance mysql avec l'option de compilation --local-infile=1 pour pouvoir faire un LOAD DATA LOCAL
mysql -u user_name menagerie --local-infile=1
mysql> describe pet;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| owner | varchar(20) | YES | | NULL | |
| species | varchar(20) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| birth | date | YES | | NULL | |
| death | date | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
Jusque là c'est comme le tutoriel et je veux ajouter mon fichier CSV
mysql> LOAD DATA LOCAL INFILE '~/pets.csv' INTO TABLE pet FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n';
Query OK, 8 rows affected, 7 warnings (0.06 sec)
Records: 8 Deleted: 0 Skipped: 0 Warnings: 7
mysql> show warnings;
+---------+------+--------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------+
| Warning | 1265 | Data truncated for column 'death' at row 1 |
| Warning | 1265 | Data truncated for column 'death' at row 2 |
| Warning | 1265 | Data truncated for column 'death' at row 3 |
| Warning | 1265 | Data truncated for column 'death' at row 4 |
| Warning | 1265 | Data truncated for column 'death' at row 6 |
| Warning | 1265 | Data truncated for column 'death' at row 7 |
| Warning | 1265 | Data truncated for column 'death' at row 8 |
+---------+------+--------------------------------------------+
7 rows in set (0.00 sec)
mysql> select * from pet;
+----------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat | f | 1993-02-04 | 0000-00-00 |
| Claws | Gwen | cat | m | 1994-03-17 | 0000-00-00 |
| Buffy | Harold | dog | f | 1989-05-13 | 0000-00-00 |
| Fang | Benny | dog | m | 1990-08-27 | 0000-00-00 |
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
| Chippy | Gwen | bird | f | 1998-09-11 | 0000-00-00 |
| Whistler | Gwen | bird | | 1997-12-09 | 0000-00-00 |
| Slim | Benny | snake | m | 1996-04-29 | 0000-00-00 |
+----------+--------+---------+------+------------+------------+
8 rows in set (0.00 sec)
mysql> INSERT INTO pet VALUES('Puffball','Diane','hamster','f','1999-03-30',NULL);
Query OK, 1 row affected (0.04 sec)
mysql> select * from pet;
+----------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat | f | 1993-02-04 | 0000-00-00 |
| Claws | Gwen | cat | m | 1994-03-17 | 0000-00-00 |
| Buffy | Harold | dog | f | 1989-05-13 | 0000-00-00 |
| Fang | Benny | dog | m | 1990-08-27 | 0000-00-00 |
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
| Chippy | Gwen | bird | f | 1998-09-11 | 0000-00-00 |
| Whistler | Gwen | bird | | 1997-12-09 | 0000-00-00 |
| Slim | Benny | snake | m | 1996-04-29 | 0000-00-00 |
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+--------+---------+------+------------+------------+
9 rows in set (0.00 sec)
C'est là que je comprends plus rien... même si je met NULL à la fin de mes ligne de mon CSV j'obtiens des 0000-00-00 à la place de la valeur NULL et si je mets des \n comme sur le tuto il me met des 0000-00-00 et le \n du sex de Whistler qui veut dire NULL, mysql l’interprète comme un retour à la ligne..
Alors comment faire pour avoir des valeurs NULL dans la colonne death, c'est un bug? comme c'est un champs DATE j'ai oublié qqch parce que j'ai parcouru la documentation et j'ai rien trouvé sauf que si on mettait une valeur erronée ça mettrait automatiquement 0000-00-00.
PS: j'ai la version 5.5.38 du serveur mysql
Merci
Dernière modification par Spirale21 (Le 30/08/2014, à 21:30)
il y a trois manière de faire: la bonne, la mauvaise et la mienne
Hors ligne
#2 Le 30/08/2014, à 20:53
- Spirale21
Re : [Résolu] Mysql et les champs dates
Si le CSV ressemble à
Fluffy;Harold;cat;f;1993-02-04
Claws;Gwen;cat;m;1994-03-17
Buffy;Harold;dog;f;1989-05-13
Fang;Benny;dog;m;1990-08-27
Bowser;Diane;dog;m;1979-08-31;1995-07-29
Chippy;Gwen;bird;f;1998-09-11
Whistler;Gwen;bird;;1997-12-09
Slim;Benny;snake;m;1996-04-29
il me met bien des NULL dans le champs date mais en warning il me mets
Level | Code | Message |
+---------+------+--------------------------------------------+
| Warning | 1261 | Row 1 doesn't contain data for all columns |
c'est pareil pour les lignes 2,3,4,6,7,8
et pourtant la ligne
mysql> INSERT INTO pet VALUES('Puffball','Diane','hamster',NULL,'1999-03-30',NULL);
Query OK, 1 row affected (0.04 sec)
me provoque aucun warning, aucune erreur
Dernière modification par Spirale21 (Le 30/08/2014, à 20:55)
il y a trois manière de faire: la bonne, la mauvaise et la mienne
Hors ligne
#3 Le 30/08/2014, à 21:29
- Spirale21
Re : [Résolu] Mysql et les champs dates
Bonsoir,
J'suis trop bête je sais même pas lire.... la valeur NULL c'est \N pas \n, pourtant je le sais de faire attention à la casse!!!
Fluffy;Harold;cat;f;1993-02-04;\N
Claws;Gwen;cat;m;1994-03-17;\N
Buffy;Harold;dog;f;1989-05-13;\N
Fang;Benny;dog;m;1999-08-27;\N
Bowser;Diane;dog;m;1979-08-31;1995-07-29
Chippy;Gwen;bird;f;1998-09-11;\N
Whistler;Gwen;bird;\N;1997-12-09;\N
Slim;Benny;snake;m;1996-04-29;\N
La ligne devient :
LOAD DATA LOCAL INFILE '~/pets.csv' INTO TABLE pet fields terminated by ';';
et là aucune erreur, aucun warning..la plénitude
4h de "perdue" pour une histoire de casse.
.
.Elle t'a cassé !!!!!
Ok je sors
Dernière modification par Spirale21 (Le 30/08/2014, à 21:33)
il y a trois manière de faire: la bonne, la mauvaise et la mienne
Hors ligne
Pages : 1