Comment changer le codage de caractères d'une connexion PDO / SQLite en PHP?
Question
J'ai un petit problème avec une application php-gtk qui continue de tourner dans des chaînes non-utf8. J'avais constaté que le problème venait de la connexion à la base de données, même lorsque la base de données était supposée être en UTF-8.
J'ai essayé avec "SET CHARACTER SET utf8" (méthode MySQL) et "SET NAMES UTF8". et rien ne se passe (il n'y a aucune information à propos de ces commandes dans le langage de requête compris par SQLite " page non plus, donc je ne suis pas surpris de cela).
PD: Peut-être que la connexion est déjà en UTF-8 et que les données ne le sont pas, mais s’il existe un moyen de changer la connexion encodant cette question serait toujours utile.
La solution
Autant que je sache, SQLite ne dispose que d'un paramètre pour le jeu de caractères , qui est à un niveau par base de données. Vous ne pouvez pas modifier le codage sur la connexion.
L’API C dispose des deux manières différentes d’ouvrir une connexion, en tant que UTF- 8 ou UTF-16. Je m'attendrais à ce que le module SQLite de PHP (et donc PDO) utilise simplement la version UTF-8. Si cela est correct, une connexion SQLite devrait toujours être UTF-8. Cela signifie que vous devez manuellement encoder / décoder les chaînes avec utf8_encode . / utf8_decode .
Voir aussi: http://www.alberton.info/dbms_charset_settings_explained.html