Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/08/2014, à 21: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, à 22:30)


il y a trois manière de faire: la bonne, la mauvaise et la mienne

Hors ligne

#2 Le 30/08/2014, à 21: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, à 21:55)


il y a trois manière de faire: la bonne, la mauvaise et la mienne

Hors ligne

#3 Le 30/08/2014, à 22:29

Spirale21

Re : [Résolu] Mysql et les champs dates

Bonsoir,
J'suis trop bête roll sad je sais même pas lire.... la valeur NULL c'est \N pas \n, pourtant je le sais de faire attention à la casse!!! roll

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 big_smile
4h de "perdue" pour une histoire de casse.
.

Brice de Nice a écrit :

.Elle t'a cassé !!!!!

Ok je sors

Dernière modification par Spirale21 (Le 30/08/2014, à 22:33)


il y a trois manière de faire: la bonne, la mauvaise et la mienne

Hors ligne