[PHP] conserver les blancs en debut et fin dans une base mysql ? :-/

conserver les blancs en debut et fin dans une base mysql ? :-/ [PHP] - PHP - Programmation

Marsh Posté le 20-02-2004 à 13:03:26    

bonjour,
je parcours un fichier (récupéré ligne par ligne) et par exemple du caractère 10 au 22 je vais avoir le code_utilisateur, alors pour le recuperer je fais

Code :
  1. $code_util=substr($ligne,10,12);


et après je fous $code_util dans un champ de 12 caractères dans ma base MySQL.
Mon problème arrive quand je veux reprendre ce code de 12 caractères, si dans le fichier il ne faisait que 5 caractères avec 4 blancs avant et 3 blancs après ma variable quand je la ressort de la base me renvoie 5 quand je lui fait un strlen();
alors ma question est la suivante, comment stocker les blancs avec ma variable ?
merci d'avance ! ;)

Reply

Marsh Posté le 20-02-2004 à 13:03:26   

Reply

Marsh Posté le 20-02-2004 à 15:02:18    

up ? :/

Reply

Marsh Posté le 20-02-2004 à 15:12:34    

c'est bizarre, sur ma base, il n'insère pas les espaces de la fin de chaine :/ par contre je perds pas les espaces qui sont devant.
j'ai essayé avec des type TEXT et VARCHAR
la solution est surement du côté des CHAR, mais j'arrive même pas à créer une colonne de type CHAR(12) :heink: une spécifité mySQL :??:

Reply

Marsh Posté le 20-02-2004 à 15:20:09    

dropsy a écrit :

c'est bizarre, sur ma base, il n'insère pas les espaces de la fin de chaine :/ par contre je perds pas les espaces qui sont devant.
j'ai essayé avec des type TEXT et VARCHAR
la solution est surement du côté des CHAR, mais j'arrive même pas à créer une colonne de type CHAR(12) :heink: une spécifité mySQL :??:

ah oui c possible qu'il garde les espaces du debut en fait :) je v tester, en tout cas il en retire mais peut etre n'est-ce que ceux de la fin... je ne sais pas :/

Reply

Marsh Posté le 20-02-2004 à 18:39:34    

up ? :)

Reply

Marsh Posté le 20-02-2004 à 20:20:04    

Bonne solution : se débarasser de cette bouse de MySQL.
 
Mauvaise solution : ajouter des " autour de ta chaine.

Reply

Marsh Posté le 20-02-2004 à 20:34:48    

Kristoph a écrit :

Bonne solution : se débarasser de cette bouse de MySQL.
 
Mauvaise solution : ajouter des " autour de ta chaine.

pour passer à postgrsql ?
vu l'etat d'avancement du projet et les ressources dispo je crois que je vais être contraint d'employer la mauvaise solution,
 
peux tu m'expliquer ce que tu entends pas ajouter des " autour de ma chaine ?
voilà un exemple de requete, que dois-je rajouter ? :

Code :
  1. $sql="INSERT INTO BL_ENTETE_SORTIE (generation_acompte) VALUES ('".substr($line,340,14)."')";

Reply

Marsh Posté le 20-02-2004 à 20:41:10    

Les SGBD respectant la norme SQL doivent être interchangeables non ?
 
Si tu n'aime pas les " autour de ta chaine, tu peux toujours ajouter un 1 au debut et un 2 à la fin avant l'insertion. Pense juste à les retirer quand tu extrait tes chaines de la DB ;)

Reply

Marsh Posté le 20-02-2004 à 20:45:24    

Kristoph a écrit :

Les SGBD respectant la norme SQL doivent être interchangeables non ?
 
Si tu n'aime pas les " autour de ta chaine, tu peux toujours ajouter un 1 au debut et un 2 à la fin avant l'insertion. Pense juste à les retirer quand tu extrait tes chaines de la DB ;)

ah ok, la technique consiste uniquement à mettre un drapeau en debut et fin de chaine ;)
merci, ça va être super chiant pour moi d'implementer ça mais avec 2 ou 3 fonctions ça devrait le faire...
bon le tout c que je trouve 2 caractères qui ne risquent pas d'être dans mon fichier... genre # ou | peut etre...

Reply

Marsh Posté le 20-02-2004 à 21:03:18    

la caractère le moins chiant pour ça, c'est celui affiché par word pour les retours à la lignes... il est pas sur le clavier, il suffit de taper son code ascii :D
 
mais j'ai oublié le code [:ddr555]
 
sinon, ça m'étonne pour mysql, doit y avoir une option qque part :heink:

Reply

Marsh Posté le 20-02-2004 à 21:03:18   

Reply

Marsh Posté le 20-02-2004 à 21:27:11    

Shurik a écrit :

ah ok, la technique consiste uniquement à mettre un drapeau en debut et fin de chaine ;)
merci, ça va être super chiant pour moi d'implementer ça mais avec 2 ou 3 fonctions ça devrait le faire...
bon le tout c que je trouve 2 caractères qui ne risquent pas d'être dans mon fichier... genre # ou | peut etre...


 
Peux importe en fait. Tu assume que le premier et le dernier caratère de la chaine sont à jeter. Peux importe lesquels ils sont ou s'ils sont présents dans ton fichier.

Reply

Marsh Posté le 20-02-2004 à 21:29:00    

dropsy a écrit :

la caractère le moins chiant pour ça, c'est celui affiché par word pour les retours à la lignes... il est pas sur le clavier, il suffit de taper son code ascii :D
 
mais j'ai oublié le code [:ddr555]
 
sinon, ça m'étonne pour mysql, doit y avoir une option qque part :heink:


 
http://sql-info.de/mysql/gotchas.html#1_6
 
L'option s'appelle PostGreSQL


Message édité par Kristoph le 21-02-2004 à 01:22:16
Reply

Marsh Posté le 21-02-2004 à 01:20:57    

T'as essayé de faire un "varchar(taille) binary"?
Il me semble que le rajout du mot binary à la création de la colonne à pour but d'empécher la disparition des espaces.

Reply

Marsh Posté le 21-02-2004 à 01:23:17    

omega2 a écrit :

T'as essayé de faire un "varchar(taille) binary"?
Il me semble que le rajout du mot binary à la création de la colonne à pour but d'empécher la disparition des espaces.


 
il a surtout pour option de stocker les données en binaire a mon avis  :p


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 21-02-2004 à 01:25:37    

ceci dit, ca m'étonne beaucoup que mysql te supprimes les blancs ...... t'es sur de ne pas les supprimer toi même a l'insertion ?


Message édité par simogeo le 21-02-2004 à 01:25:44

---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 21-02-2004 à 01:56:00    

simogeo a écrit :

ceci dit, ca m'étonne beaucoup que mysql te supprimes les blancs ...... t'es sur de ne pas les supprimer toi même a l'insertion ?


 

Citation :

As this is documented, this is most definitely not a bug:
... However, in contrast to CHAR, VARCHAR values are stored using only as many characters as are needed, plus one byte to record the length. Values are not padded; instead, trailing spaces are removed when values are stored. (This space removal differs from the SQL-99 specification.) ...
 
http://www.mysql.com/doc/en/CHAR.html

Reply

Marsh Posté le 21-02-2004 à 02:01:23    

Kristoph a écrit :


 

Citation :

As this is documented, this is most definitely not a bug:
... However, in contrast to CHAR, VARCHAR values are stored using only as many characters as are needed, plus one byte to record the length. Values are not padded; instead, trailing spaces are removed when values are stored. (This space removal differs from the SQL-99 specification.) ...
 
http://www.mysql.com/doc/en/CHAR.html




 
merci pour l'info .. putain c'est nul ça [:mlc]
 
donc ouais, essaies de stocker les infos en binary, ca devrait passer [:spamafote]  


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 21-02-2004 à 02:42:52    

je vais voir ce que ça donne en binary :) merci pour votre aide ! :)

Reply

Marsh Posté le 21-02-2004 à 02:58:11    

voilà mon champ : code_client_prive  varchar(13)  BINARY  
 
et mes ptites opérations :

Code :
  1. $sql="UPDATE BL_ENTETE_SORTIE SET code_client_prive='00000000     '"; //8 zero et 5 espaces
  2. $req=$db->query($sql);
  3. $sql="select code_client_prive from BL_ENTETE_SORTIE";
  4. $req=$db->query($sql);
  5. $res=mysql_fetch_object($req);
  6. echo strlen($res->code_client_prive);


 
et là j'ai 8 qui s'affichent donc il me retire les 5 espaces :/
 
par contre avec les espaces en debut de variable y a pas de probleme il les garde... c juste pour la fin de variable que ça marche pas :/ même en binary, si vous avec d'autres idées ça m'interresserait, parce que mettre une balise de fin ça me tente pas trop ça me prendrait facile une journée entière compte tenu du nombre de variables (je sais j'aurai du faire des fonctions :'() :/

Reply

Marsh Posté le 21-02-2004 à 03:02:00    

hey ? mais en mettant TEXT à la place de VARCHAR2 ça a l'air de marcher ! bon je peux pas specifier de longueur mais c pas grave !
 
from http://www.mysql.com/doc/fr/BLOB.html :
Il n'y a pas de suppression des espaces finaux lors du stockage de valeur dans des colonnes de type BLOB et TEXT, ce qui est le cas dans pour les colonnes de type VARCHAR.


Message édité par Shurik le 21-02-2004 à 03:04:58
Reply

Marsh Posté le 21-02-2004 à 07:18:08    

salut, tu peux aussi remplacer les blanc par un signe du style "<" quitte à les enlever aprés.

Reply

Marsh Posté le 21-02-2004 à 13:11:35    

dragonminus a écrit :

salut, tu peux aussi remplacer les blanc par un signe du style "<" quitte à les enlever aprés.

avce text c parfait (seul le manque de taille max fait chier mais comme j'avais deja fait des fonctions pour checker que la longueur etait bonne :)

Reply

Marsh Posté le 21-02-2004 à 13:18:06    

Shurik a écrit :

avce text c parfait (seul le manque de taille max fait chier mais comme j'avais deja fait des fonctions pour checker que la longueur etait bonne :)


tu peux aussi le détermnier ds tes input avec maxlength


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 21-02-2004 à 13:18:45    

simogeo a écrit :


tu peux aussi le détermnier ds tes input avec maxlength

ah ? :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed