Bonjour,
Sous Delphi 2007, l'utilisation des composants TSQLConnection et TSQLStoredProc (de DBExpress) connectés à une base MySQL me ramène des enregistrements avec un jeu de caractère autre que Latin1 souhaité
Procédure stockée sous MySQL :
Cet exemple retourne l'enregistrement suivant : Référence au lieu de Référence!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `APPLISTART`() BEGIN Select 'Référence' from dual; END $$ DELIMITER ;
Avec les composants TADOConnection et TADOStoredProc travaillant avec un pilote ODBC, je n'ai pas ce problème!
Par ailleurs l'outil MySQL Query Bowser donne un résultat correct lors de l'execution d'un CALL APPLISTART().
Pour Info, les variables interne de la BD MySQL sont les suivantes:
character_set_client : latin1
character_set_serveur : latin1
character_set_database : latin1
character_set_client : latin1
character_set_results : latin1
character_set_system : utf8
Le problème vient-il de DBExpress, ou vient-il de la manière dont la procédure stockée est enregistrée dans la base?
L'exemple suivant corrige l'anomalie (ajout _utf8 dans le select)
Pour éviter de répéter cet ajout pour chaque chaine de caractères inclue dans le select, peut-on intervenir sur les composants DBExpress ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `APPLISTART`() BEGIN Select _utf8'Référence' from dual; END $$ DELIMITER ;
Sinon peut-on positionner (et comment) un "Character set" par défaut en début de procédure stockée pour influencer les enregistrements retournés en fin d'exécution de la procédure ?
Quelqu'un peut-il me dépanner ?
Merci pour toute réponse
Partager