2017-07-29 2 views
1

Je viens de mettre à jour mon serveur vers Debian 9.1 et pendant que j'y étais, je passais aussi de PHP 5.6 à PHP 7. Mon application a cessé de fonctionner, et après quelques recherches, constaté que lors de la récupération des données de la base de données, les données semblent être converti automagiquement en UTF-8. Dans ce cas particulier, je stocke des données binaires dans une colonne varchar (255) (charset latin1) et la conversion de Latin1 en UTF8 casse bien sûr les données binaires. Je suppose que j'aurais dû faire la colonne varbinary à la place, mais nous y sommes, et cela fonctionnait correctement dans PHP5.6. Je me demande pourquoi cela a changé, pourquoi je ne trouve aucune information sur ce changement incompatible n'importe où, et comment configurer PDO pour retourner les données inchangées.Mysql PDO conversion automagic utf8 après la mise à niveau vers PHP 7

Best,

Arno

+0

Cela vous donne-t-il une erreur sur la cause de l'échec? Est-ce lorsque vous essayez d'y accéder d'une manière particulière ou juste lorsque vous exécutez un 'select'? – chris85

Répondre

1

Je trouve moi-même solution: mettre explicitement le jeu de caractères à « latin1 » lors de la connexion à la base de données (je l'avais omis avant). Je me demande toujours pourquoi cela a été changé et pourquoi je l'ai manqué dans les notes de version.

+1

Je ne suis pas sûr - mais je suppose que PDO utilise 'default_charset' si vous ne le définissez pas explicitement dans' dsn'. La valeur par défaut pour 'default_charset' a déjà été' ''' UTF-8 '' dans 5.6 - C'est pourquoi vous ne trouverez rien dans les notes de version. Vérifiez donc les différences dans vos fichiers 'php.ini', si vous voulez savoir pourquoi. –