Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/01/2008, 11h03   #1
Invité de passage
 
Inscription : octobre 2007
Messages : 20
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 20
Points : 3
Points : 3
Par défaut Formatage de chaine avant insertion dans BDD MySQL

Bonjour à tous !
J'ai un problème de format de caratères d'une chaine insérées dans la BDD MySQL. EN effet si les catères de la chaines sont accentués, ils sont transformés en d'autres caratères bizarre.
En effet dans le champ Collation de cette colonne, j'ai choisi utf8_general_ci.
Quelqu'un pourrait il me dire ce qu'il est lieu de faire ?
Merci d'avance
kdson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 11h32   #2
Membre Expert
 
Homme
Expert Datawarehouses + BO (sur BDD Oracle et SQL Server)
Inscription : mars 2003
Messages : 645
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 41
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Expert Datawarehouses + BO (sur BDD Oracle et SQL Server)

Informations forums :
Inscription : mars 2003
Messages : 645
Points : 1 165
Points : 1 165
Je connais très mal les collations.

ou bien dans ton extraction tu convertis dans la bonne collation, ce que je ne sais pas faire, ou bien tu lances sur ta table source la commande suivante et tu lances ensuite l'extraction comme tu avais fait:


Code :
1
2
3
ALTER TABLE Ta_Table ALTER COLUMN Ta_Colonne
            varchar(50) COLLATE Latin1_General_CI_AS NOT NULL
GO
où varchar(50) sera le type déjà utilisé dans ton CREATE TABLE existant
où NOT NULL (ou NULL) sera ta contrainte déjà utilisée dans ton CREATE TABLE existant
où Latin1_General_CI_AS sera la collation correspond au jeu de caractère que tu as attends dans MySQL, à toi de voir laquelle il te faut
msdn sql server: Selecting a SQL Collation

Peut-être qu'à l'inverse tu peux aussi essayer de modifier le jeu de caractère dans MySQL

Tout en ayant bien soin auparavant de sauvegarder la table SQL Server, ou de créer de nouveaux champs pour ne pas que ta base SQL Server impacte les applications existantes.
phili_b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 12h32   #3
Invité de passage
 
Inscription : octobre 2007
Messages : 20
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 20
Points : 3
Points : 3
Citation:
Envoyé par phili_b Voir le message
Je connais très mal les collations.

ou bien dans ton extraction tu convertis dans la bonne collation, ce que je ne sais pas faire, ou bien tu lances sur ta table source la commande suivante et tu lances ensuite l'extraction comme tu avais fait:


Code :
1
2
3
ALTER TABLE Ta_Table ALTER COLUMN Ta_Colonne
            varchar(50) COLLATE Latin1_General_CI_AS NOT NULL
GO
où varchar(50) sera le type déjà utilisé dans ton CREATE TABLE existant
où NOT NULL (ou NULL) sera ta contrainte déjà utilisée dans ton CREATE TABLE existant
où Latin1_General_CI_AS sera la collation correspond au jeu de caractère que tu as attends dans MySQL, à toi de voir laquelle il te faut
msdn sql server: Selecting a SQL Collation

Peut-être qu'à l'inverse tu peux aussi essayer de modifier le jeu de caractère dans MySQL

Tout en ayant bien soin auparavant de sauvegarder la table SQL Server, ou de créer de nouveaux champs pour ne pas que ta base SQL Server impacte les applications existantes.
Merci Phili pour ta promtitude. J'ai modifié directement dans la table déjà crée mais malheureusement ça fait pareil
kdson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 13h43   #4
Membre Expert
 
Inscription : juin 2007
Messages : 1 056
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 056
Points : 1 078
Points : 1 078
Bonjour,

si je comprends bien, il s'agit de transférer des données mysql vers sql server ou l'inverse ? Par quel moyen le faites-vous ?

Si vous pouviez-préciser un peu ...merci
__________________
Emmanuel T.
kagemaru est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 13h07   #5
Invité de passage
 
Inscription : octobre 2007
Messages : 20
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 20
Points : 3
Points : 3
Citation:
Envoyé par kagemaru Voir le message
Bonjour,

si je comprends bien, il s'agit de transférer des données mysql vers sql server ou l'inverse ? Par quel moyen le faites-vous ?

Si vous pouviez-préciser un peu ...merci
Bonjour Kagemaru
En effet il s'agit dans un permier temps de récupérer des valeurs à partir d'un formulaire, de les insérer temporairement dans une table sous MySQL, en attendant de les récupérer à nouveau de la base de données pour des traitements. Déjà le problème se pose à la première phase (Formulaire---->MySQL). Je travaille sous PHP. Lorsque l'utilisateur met des valeurs de champs avec des caractères accentués, dès leur insertion dans la base de données ces caratères deviennent "bizarres". Du coup je reste bloqué en ce sens que dans cet état, si je les récupère ils ne peuvent m'être utiles pour traitement. Je recherche alors à éviter les accents. Donc par exemple avant insertion dans la base de données je dois faire en sorte que les caratères accentées soient transformés dans leur équivalent non accentués. J'ai essayé des possibiltés qui pour lors sont pas concluantes.
En tout merci d'avance de tout apport.
kdson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 17h49   #6
Membre Expert
 
Inscription : juin 2007
Messages : 1 056
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 056
Points : 1 078
Points : 1 078
En fait il faudrait tout d'abord s'adresser au forum MySQL pour votre premier problème ... je déplace le post.
__________________
Emmanuel T.
kagemaru est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2008, 00h45   #7
Futur Membre du Club
 
Inscription : novembre 2005
Messages : 34
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 34
Points : 19
Points : 19
Verifie que l'encodage de ta page html sur laquelle se trouve ton formulaire est bien en
Code :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
autre hypothese si tu formates tes donnees avec php avec htmlentities() ou htmlspecialchars() par exemple, par defaut c'est de l'iso 8859-1, il faut specifier style
Code :
1
2
htmlentities($str, ENT_QUOTES,"utf-8");
En gros si tu inseres des caracteres au format iso 8859-x ou cp ou autres dans des champs de table MySQL en UTF8 , c'est normal

++
Jean Fi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2008, 01h01   #8
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Pour comprendre de quoi il s'agit exactement, je vous conseille la lecture de mon article sur le sujet (lien en signature).

Plus généralement, il n'est PAS nécessaire que la page PHP et la base MySQL aient le même jeu de caractères. S'ils sont différents, MySQL fera automatiquement les conversions. La seule chose importante est que le jeu de caractère déclaré à chaque niveau corresponde bien au jeu réel des données.

Enfin, les problèmes d'affichages peuvent être de simples problèmes d'affichage ou bien dus à des erreurs de données. Pour faire la différence, il faut utiliser les fonctions ord() de MySQL et PHP pour connaître le code des caractères. Avec de l'Unicode (utf8 par exemple), il est souvent utile de comparer le nombre de caractères (CHAR_LENGTH dans MySQL) avec le nombre d'octets (OCTET_LENGTH). Par exemple, le 'é' en utf8 est codé sur deux octets, il doit donc y avoir un caractère et deux octets. S'il y a deux et deux, c'est que le 'é' a été mal interprété et transformé en é.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h17.


 
 
 
 
Partenaires

Hébergement Web