Bonjour,
Je souhaite écrire en local et en purebasic un éditeur de données pour un site web (pour gagner du temps par rapport à la saisie sur le web).
MySQL code la base en UTF8MB4. Purebasic gère de l'UTF8.
Mon problème est le suivant :
J'affiche des données avec des caractères étranges avec mon programmes sous purebasic.
Si je modifie et enregistre, lorsque je reprends les données en php c'est maintenant illisible sur le site web.
Je ne trouve pas comment expliquer à purebasic que les données sont en utf8mb4.
Merci de vos lumières
Base MySQL UTF8MB4
Re: Base MySQL UTF8MB4
Qu'est ce que ça donne si tu lis ou saisis dans le shell mysql (mysql.exe)?
(en ayant au préalable mis le shell en Utf-8 (chcp 65001 si fenêtre Windows avant de lancer mysql))
Dans une autre application (ex: https://www.heidisql.com/)
Tu as surement déjà vérifié, mais au cas ou:
- MySQL < 5.50 était UTF8MB3, d'où les caractères comme les smiley peuvent être bizarres
- Les pages PHP doivent avoir un entête spécial pour afficher de l'Utf-8
- L'encodage des bases de données peut concerner Base, Table, Colonne
PB gérant l'Utf-8 jusqu'à 4 octets (donc bien MB4), créé une mini application en mettant un caractère (codé sur 4 octets) et teste l'ouverture avec un éditeur (ou le shell) puis en PHP.
Utilises bien-sur SetDataBaseString()
(en ayant au préalable mis le shell en Utf-8 (chcp 65001 si fenêtre Windows avant de lancer mysql))
Dans une autre application (ex: https://www.heidisql.com/)
Tu as surement déjà vérifié, mais au cas ou:
- MySQL < 5.50 était UTF8MB3, d'où les caractères comme les smiley peuvent être bizarres
- Les pages PHP doivent avoir un entête spécial pour afficher de l'Utf-8
- L'encodage des bases de données peut concerner Base, Table, Colonne
PB gérant l'Utf-8 jusqu'à 4 octets (donc bien MB4), créé une mini application en mettant un caractère (codé sur 4 octets) et teste l'ouverture avec un éditeur (ou le shell) puis en PHP.
Utilises bien-sur SetDataBaseString()
Re: Base MySQL UTF8MB4
Vérifie aussi si le serveur php renvoie l'entête html qui définie l'encodage du fichier. (C'est prioritaire sur l'encodage renseigné dans le fichier html).
Re: Base MySQL UTF8MB4
Bonsoir,
J'ai vérifié.
J'utilise DatabaseUpdate(#MySql_0, SQL) avec ma chaine SQL contenant les SET libelle = '+MonLibellé+' ...
Avec heidisql, la base contient une chaine correctement écrite (à partir du php). Dans les préférences, je retrouve le codage utf8mb4.
Lorsque je reprends ma chaine dans l'appli purebasic, j'ai des losanges noirs sur les caractères accentués.
Je corrige la chaine, je sauvegarde dans la base.
Avec heidisql, la base contient une chaine avec des smileys.
Je charge la chaine dans l'appli purebasic, elle est correctement écrite. Mais dans l'appli web (php), elle contient les smileys ...
Je ne comprends rien ...
J'ai vérifié.
J'utilise DatabaseUpdate(#MySql_0, SQL) avec ma chaine SQL contenant les SET libelle = '+MonLibellé+' ...
Avec heidisql, la base contient une chaine correctement écrite (à partir du php). Dans les préférences, je retrouve le codage utf8mb4.
Lorsque je reprends ma chaine dans l'appli purebasic, j'ai des losanges noirs sur les caractères accentués.
Je corrige la chaine, je sauvegarde dans la base.
Avec heidisql, la base contient une chaine avec des smileys.
Je charge la chaine dans l'appli purebasic, elle est correctement écrite. Mais dans l'appli web (php), elle contient les smileys ...
Je ne comprends rien ...
Re: Base MySQL UTF8MB4
Je viens de faire un test dans les deux sens et avec les entêtes: effectivement avec UTF8MB4 les saisies ou lecture PB effectuées dans MySQL (ici MariaDB 10.4), ne fonctionnent pas avec les accents et autres caractères quand on lit/écrit sous PHP ou autre gestionnaire.
(taper par exemple Alt+1 (pavé) pour avoir le smiley standard ☺)
idem en utilisant la dernière lib (UseMySQLDatabase("libmariadb.dll"))
(taper par exemple Alt+1 (pavé) pour avoir le smiley standard ☺)
idem en utilisant la dernière lib (UseMySQLDatabase("libmariadb.dll"))