Php / ODBC kodlama sorunu

3 Cevap php

I use ODBC to connect to SQL Server from PHP. In PHP I read some string (nvarchar column) data from SQL Server and then want to insert it to mysql database. When I try to insert such value to mysql database table I get this mysql error:

Incorrect string value: '\xB3\xB9ow...' for column 'name' at row 1

(Bazı Avrupa dillerinden) ASCII olmayan karakterler var olduğunda her şey gayet tüm ASCII karakter dizesi için sorun oluşur.

Yani, daha genel anlamda: PHP yalak ODBC tarafından alınan MS SQL Server veritabanı bir Unicode dizesi vardır. Sonra MySQL veritabanı için yürütüldüğü (utf-8 varchar sütun için değer olarak) sql insert sorgusu konur.

Birisi kodlama açısından bu durumda ne oluyor bana açıklayabilir misiniz? Hangi kodlama convertions yer alabilir ne karakter adım at?

Ben kullanın: PHP 5.2.5, MySQL5.0.45-toplum-nt, MS SQL Server 2005.

PHP Linux platformda çalıştırmak zorunda.

UPDATE: hata ben bu dizesi utf8_encode ($ s) çağırdığınızda oluşur ve mysql insert sorguda bu değeri kullanın, ancak daha sonra eklenen dize böylece UTF8 (MySQL veritabanı doğru göstermez değil kodlama sadece uygun utf8 dizesini uygulamak için çalıştı, ama o) doğru karakterleri kaybeder.

3 Cevap

Öncelikle DB kodlama var. Sonra ODBC istemci tarafından kullanılan kodlama var.

ODBC istemci bağlantısının kodlama DB uyuşmuyor ise, ODBC katman otomatik olarak bazı durumlarda, veri dönüştürmek olacak.

Burada hile ODBC istemci bağlantısının kodlama zorlamaktır.

Bir "all UTF-8" kurulum için:

$conn=odbc_connect(DB_DSN,DB_USR,DB_PWD);
odbc_exec($conn, "SET NAMES 'UTF8'");
odbc_exec($conn, "SET client_encoding='UTF-8'");

// processing here

This works perfectly with PostgreSQL + Php 5.x. The exact syntax and options depends on the DB vendor.

MySQL için çok kullanışlı ve net ek bilgi burada bulabilirsiniz: http://dev.mysql.com/doc/refman/5.0/fr/charset-connection.html

Bu yardımcı olur umarım.

Ben PHP ile ODBC ile hiçbir deneyimi var, ama mysql fonksiyonları ile PHP sorun önlemek istiyorsanız açık yapılması gerekmektedir ASCII ve UTF8 bağlantıları varsayılan görünüyor.

Are you sure PHP and the MySQL server are communicating in UTF8? PHP 6 kadar Unicode desteği gibi rahatsız edici inconistent olma eğilimindedir.

Ben MySQL docs Unicode kodlamayı çimdik bir bağlantı dizesi parametresi söz hatırlıyorum.

PHP yalnızca ASCII olarak bağlantıyı tedavi edilir gibi açıklamasından geliyor.