Page 1 sur 2

remplacer caractère

Posté : 30 mars 2007, 09:32
par Invité
Bonjour,

Je voudrais remplacer tous les caractères "é" par "é" dans ma bdd. Y a til une instruction sql qui permet de faire ça en 1 fois sur tout le contenu de la bdd?

Posté : 30 mars 2007, 09:46
par Hubert Roksor
Pas vraiment, mais il existe une fonction qui permet d'effectuer des remplacement. Regarde dans le manuel de MySQL dans les fonctions de chaînes, ça doit ressembler à

Code : Tout sélectionner

UPDATE matable SET champ = REPLACE(champ, 'é', 'é')

Posté : 30 mars 2007, 10:02
par zeus
La base de données ne devrait pas contenir de données encodées, seulement des données brutes, c'est à dire avec accents.

J'imagine que le but de cette opération est d'avoir des données prêtes à l'affichage, non ? Imagine que tu veuilles désormais les enregistrer dans un fichier, cet encodage va te poser des soucis.

Le remplacement des caractères spéciaux est de l'ordre de l'affichage, pas de la mémorisation. ;)

Posté : 30 mars 2007, 18:20
par Invité
ben mon pb est que lorsque j'insère du contenu brut, les caractères spéciaux deviennent illisibles, commme
"é" pour "é",
"ê" pour "ê",
"ï" pour "Ï",...

Ce que je ne comprends pas, c'est que ma version du site en local n'a pas ce pb. Pourtant pour la mise en ligne, je fais un transfert par copier/coller du sql, d'une bdd à l'autre.

Encore plus étrange, quand je suis sur hotmail, mes caractères spéciaux sont illisibles de la même manière.

Je sais pas d'ou vien ce pb de bdd mais ça m'est arrivé juste avant une présentation de site et j'ai du me taper tous les caractères à la mano. Arrgh.

Posté : 30 mars 2007, 18:33
par Hubert Roksor
Codage de caractères. Ton "é" c'est un "é" encodé en UTF-8 mais visualisé en ISO-8859-1 (ou assimilé). Si tu déclares le bon codage dans la page web tes problèmes disparaissent. Pareil pour MySQL, il faut lui préciser quel codage tu utilises, sinon tu as ce genre de problèmes. Je n'ai pas de lien sous la main, si quelqu'un a quelque chose qu'il se dénonce.

Pour résumer, dans la page HTML

Code : Tout sélectionner

meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
ET/OU en PHP (y'a même une option dans php.ini)
header('Content-Type: text/html;charset=utf-8');
Et dans my.ini,

Code : Tout sélectionner

[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8
Félicitations, maintenant tout ton système est en UTF-8. Mauvaise nouvelle, strtolower(), substr() et d'autres fonctions ne fonctionneront plus correctement...* voir mb_substr() ou iconv_substr() pour plus d'infos.

* jusqu'à ce que tu upgrades vers PHP 6 l'année prochaine

Posté : 30 mars 2007, 19:30
par Invité
super, ça marche bien. Tu viens de m'enlever un poteau de l'orteil. Et que dois-je utiliser comme fonction de traitement pour importer du code et html et des caractères comme { } dans une bdd mysql?

Posté : 30 mars 2007, 19:33
par Invité
j'ai tenté addslashes() qui me renvoie des erreurs de syntaxe. C'est tout le contenu d'une bdd joomla que j'essaye d'importer en une fois.

ça marchait bien en local, mais pas moyen d'exporter. Pourtant c'est une exportation zippée de ma bdd, j'y ai pas touché.

Posté : 30 mars 2007, 19:37
par Invité
voici l'essentiel de l'erreur:
Il semble qu'il y ait une erreur dans votre requête SQL. Le message ci-bas peut vous aider à en trouver la cause.

ERROR: Ponctuation invalide @ 1
STR: \\
SQL: \\r\\n\', 1, 0, \'0000-00-00 00:00:00\', NULL, 6, 0, 0, \'\'); INSERT INTO `jos_categories` (`id`, `parent_id`, ....................

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '\\r\\n\', 1, 0, \'0000-00-00 00:00:00\', NULL, 6, 0, 0, \'\');
Ce que vous voyez ci dessus est passé dans un stripslashes(), qui ne marche pas mieux qu'addslashes().

Posté : 30 mars 2007, 20:47
par Expreg
Le remplacement des caractères spéciaux est de l'ordre de l'affichage, pas de la mémorisation. ;)
Je plussoies cette remarque remplie de bon sens !
Cette remarque qui devrait être affichée partout comme règle générale sur tous les sites traitant de Php/Mysql

Posté : 30 mars 2007, 22:39
par Invité
dans mon message d'erreur, mysql tente de localiser le passage qui gêne. Je remarque que les clauses INSERT INTO et VALUES de ma requête sont en gras, pas de pb.

Mais dans mon contenu, il y a du texte en anglais, contenant le mot "to".
Il est formaté comme les deux instructions citées précédemment.
Se pourrait-il que mysql considère ce mot comme une instruction, alors que c'est juste du texte?

Posté : 31 mars 2007, 00:04
par Invité
Bon je confirme, il n'ya que les requetes contenant du html qui buggent.
Comment dois-je traiter du html brut avant de l'insérer dans mysql?

Posté : 31 mars 2007, 01:24
par Invité
et quand j'affiche mon fichier .sql avec php, j'ai ceci
CREATE TABLE `jos_content` (\n `id` int(11) unsigned NOT NULL auto_increment,\n `title` varchar(100) NOT NULL default \'\',\n `
On voit des \n en plein milieu de la requete. Pourtant cette requete vient directement d'un export phpmyadmin zippé, g pas touché.

J'ai vraiment besoin d'aide, déjà 8 heures que j'appuie sur enter en testant toutes les fonctions imaginables:
addslashes, stripslashes, mysql_escape_string, mysql_real_escape_string, nl2br...sans compter les combinaisons imbriquées de toutes ces fonctions.

ça devrait pas être tout simple de passer d'une bdd à l'autre, surout si c'est la même vesoin de mysql en ligne et en local?

Posté : 31 mars 2007, 01:28
par Invité
je précise que toutes les requetes fonctionnent sauf celles qui contiennent du html...

Posté : 31 mars 2007, 01:44
par Invité
comment un éditeur wysiwyg fait pour enregistrer du html dans une bdd?

Posté : 31 mars 2007, 09:31
par Hubert Roksor
Normalement c'est mysql_real_escape_string() que l'on doit utiliser (et par "normalement" je veux dire "absolument tout le temps") mais quelque chose me dit que tu utilises une surcouche pour communiquer avec la base de données. Montre les 5 lignes de PHP qui génèrent/exécutent la requête pour voir ?