D'après mes expériences, il ne semble pas en être ainsi. Si cela est vrai, quelle est la meilleure méthode pour supprimer les sauts de ligne? Je teste actuellement les paramètres que TRIM accepte du caractère à supprimer, en commençant par rogner \n
et \r
.
Trim()
dans MySQL supprime uniquement les espaces.
Je ne crois pas qu'il existe un moyen intégré pour supprimer toutes sortes d'espaces de début et de fin dans MySQL, à moins d'utiliser de manière répétée Trim()
.
Je vous suggère d'utiliser une autre langue pour nettoyer vos données actuelles et vous assurer simplement que vos entrées sont désinfectées à partir de maintenant.
Mes sauts de ligne étaient au milieu de la chaîne et je n'avais aucun contrôle sur les données source. La commande mysql suivante a fonctionné pour moi:
REPLACE(FIELD,'\r\n',' ')
Oui, Trim()
fonctionnera dans MySQL. Vous avez deux choix.
1) sélectionnez-le:
select trim(BOTH '\n' from [field_name]) as field
Si cela ne fonctionne pas, essayez '\r'
, si cela ne fonctionne pas, essayez '\n\r'
.
2) remplacez les mauvaises données de votre tableau par une mise à jour ...
update [table_name] set [field_name] = trim(BOTH '\n' from [field_name])
Je recommande d’abord une sélection pour déterminer votre saut de ligne (\ r ou\n).
La fonction MySQL trim
standard ne ressemble pas aux fonctions de trim dans les autres langues que je connais, car elle supprime uniquement les correspondances exactes, plutôt que les caractères de la chaîne. Cette fonction stockée ressemble plus à un trim normal que vous trouveriez en PHP, ou un strip en python, etc.
CREATE FUNCTION `multiTrim`(string varchar(1023),remove varchar(63)) RETURNS varchar(1023) CHARSET utf8
BEGIN
-- Remove trailing chars
WHILE length(string)>0 and remove LIKE concat('%',substring(string,-1),'%') DO
set string = substring(string,1,length(string)-1);
END WHILE;
-- Remove leading chars
WHILE length(string)>0 and remove LIKE concat('%',left(string,1),'%') DO
set string = substring(string,2);
END WHILE;
RETURN string;
END;
Vous devriez alors pouvoir faire:
select multiTrim(string,"\r\n\t ");
et il devrait supprimer toutes les nouvelles lignes, les onglets et les espaces.
select trim(both '\r\n' from FIELDNAME) from TABLE;
devrait fonctionner si select trim(both '\n' from FIELDNAME) from TABLE;
ne fonctionnait pas.
select trim(both '\n' from FIELDNAME) from TABLE;
je ne pouvais le faire fonctionner qu'en faisant char
;
trim(both char(13) from fieldname)
J'ai rencontré le même problème avec l'un des champs. Il n'y a pas de solution parfaite. Dans mon cas, j’ai eu de la chance que la longueur du champ soit supposée être de 6. Donc j’ai utilisé une requête comme
update events set eventuniqueid = substring(eventuniqueid, 1, 6) where length(eventuniqueid) = 7;
Il vous suffira de choisir la meilleure option en fonction de vos besoins. Le remplacement '\ n' et '\ r\n' ne fonctionnait pas pour moi et finissait par me faire perdre mon temps.
Les réponses ci-dessus, une fois combinées, fonctionnent. Voici un exemple complet de remplacement des sauts de ligne au début et à la fin du champ:
UPDATE table SET field=REPLACE(field, field, TRIM(BOTH '\r\n' FROM field))