2009-08-05 11 views
5

J'ai le code suivant:Insérer des caractères Unicode avec PHP -> ODBC -> MS SQL?

$sql = "update tbl_test set category = N'resumé'; 

echo $sql; 

$rs=odbc_exec($conn,$sql); 

Où $ conn est une connexion ODBC DSN à un serveur MSSQL. Le problème semble être que quelque part entre PHP et MySQL (peut-être ODBC?) Les caractères Unicode sont convertis en ordure. Si je copie exactement ce que l'écho dit directement dans Enterprise Manager, je l'insère dans MS SQL. Si je cours le code cependant, il va toujours dans MSSSQL comme résumée. Une idée de ce qui me manque ici?

Répondre

4

Le problème n'était pas ODBC, mais la solution PHP ... était d'utiliser utf8_decode() sur les chaînes renvoyées par la base de données.

0

Je voudrais marcher prudemment ici. Dans le passé, lorsque je traitais l'intégration de SQL Server et PHP, j'ai rencontré des cas où SQL Server utilise entre 3 et 5 fois plus d'espace de stockage que nécessaire pour les caractères Unicode. Selon la façon dont vous vous connectez à la base de données et comment les données sont encodées. Ma compréhension est que MSFT travaille sur un nouveau pilote (ou il a peut-être été sorti pendant un certain temps) qui résout le problème et améliore généralement l'intégration de PHP. Avec certaines piles plus anciennes, vous pourriez avoir des problèmes. Je recommande de regarder la taille des données dans la base de données pour vérifier que la connexion ne remballe pas vos données.

Jacob

1

Si vous êtes sous Windows et en cours d'exécution PHP 5.3, en utilisant PDO_ODBC avec SQL Native Client et votre texte d'entrée est UTF-8, cela devrait fonctionner automatiquement.

Questions connexes