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 :
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 ;
Cet exemple retourne l'enregistrement suivant : Référence au lieu de Référence!


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)
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 ;
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 ?
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