conserver les blancs en debut et fin dans une base mysql ? :-/ [PHP] - PHP - Programmation
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) une spécifité mySQL
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. |
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
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.
Marsh Posté le 20-02-2004 à 20:34:48
Kristoph a écrit : Bonne solution : se débarasser de cette bouse de MySQL. |
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 :
|
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
Marsh Posté le 20-02-2004 à 20:45:24
Kristoph a écrit : Les SGBD respectant la norme SQL doivent être interchangeables non ? |
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...
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
mais j'ai oublié le code
sinon, ça m'étonne pour mysql, doit y avoir une option qque part
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 |
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.
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 |
http://sql-info.de/mysql/gotchas.html#1_6
L'option s'appelle PostGreSQL
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.
Marsh Posté le 21-02-2004 à 01:23:17
omega2 a écrit : T'as essayé de faire un "varchar(taille) binary"? |
il a surtout pour option de stocker les données en binaire a mon avis
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 ?
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: |
Marsh Posté le 21-02-2004 à 02:01:23
Kristoph a écrit :
|
merci pour l'info .. putain c'est nul ça
donc ouais, essaies de stocker les infos en binary, ca devrait passer
Marsh Posté le 21-02-2004 à 02:42:52
je vais voir ce que ça donne en binary merci pour votre aide !
Marsh Posté le 21-02-2004 à 02:58:11
voilà mon champ : code_client_prive varchar(13) BINARY
et mes ptites opérations :
Code :
|
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 )
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.
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.
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
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
Marsh Posté le 21-02-2004 à 13:18:45
Reply
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
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 !