2009-08-05 10 views
5

Tengo el siguiente código:Insertar caracteres Unicode con PHP -> ODBC -> MS SQL?

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

echo $sql; 

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

Donde $ conn es una conexión DSN de ODBC a un servidor MSSQL. El problema parece ser que en algún lugar entre PHP y MySQL (¿Tal vez ODBC?) Los caracteres Unicode se convierten en basura. Si copio, pegue exactamente lo que el eco dice directamente en Enterprise Manager, se inserta en MS SQL fino. Sin embargo, si ejecuto el código, siempre entra en MSSSQL como resumen. ¿Alguna idea de lo que me falta aquí?

Respuesta

4

El problema no era ODBC, pero PHP ... la solución era usar utf8_decode() en las cadenas devueltas desde la base de datos.

0

Me gustaría pisar con cuidado aquí. En el pasado, al tratar con la integración SQL Server y PHP, he encontrado casos en los que SQL Server utiliza entre 3 y 5 veces más espacio de almacenamiento que el que realmente se necesita para los caracteres Unicode. Dependiendo de cómo te conectas a la base de datos y cómo se codifican los datos. Tengo entendido que MSFT está trabajando en un nuevo controlador (o posiblemente haya estado fuera por un tiempo) que resuelve el problema y generalmente mejora la integración de PHP. Con algunos de los stacks más antiguos, podrías tener problemas. Recomiendo mirar el tamaño de los datos en el DB para verificar que la conexión no esté rellenando sus datos.

Jacob

1

Si está en Windows y se ejecuta PHP 5.3, utilizando PDO_ODBC con SQL Native Client, y el texto de entrada es UTF-8, esto sólo debe funcionar de forma automática.

Cuestiones relacionadas