2009-08-05 9 views
5

Mam następujący kod:Wstawianie znaków Unicode za pomocą PHP -> ODBC -> MS SQL?

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

echo $sql; 

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

Gdzie $ conn jest połączenie DSN ODBC do serwera MSSQL. Problem wydaje się, że gdzieś pomiędzy PHP i MySQL (być może ODBC?) Znaki Unicode są konwertowane do śmieci. Jeśli skopiuję wklej dokładnie to, co echo mówi bezpośrednio do Enterprise Manager, wstawi się ono do MS MSI. Jeśli jednak uruchomię ten kod, zawsze przejdzie on do MSSSQL jako resumé. Masz pojęcie, czego tu brakuje?

Odpowiedz

4

Problem nie był ODBC, ale PHP ... rozwiązaniem było użycie utf8_decode() na łańcuchach zwróconych z bazy danych.

0

Chciałbym stąpać ostrożnie tutaj. W przeszłości, kiedy zajmowałem się integracją z SQL Server i PHP, napotkałem przypadki, w których SQL Server używa od 3 do 5 razy więcej miejsca, niż jest to potrzebne w przypadku znaków Unicode. W zależności od sposobu połączenia z bazą danych i sposobu kodowania danych. Rozumiem, że MSFT pracuje nad nowym sterownikiem (lub prawdopodobnie nie był dostępny przez jakiś czas), który rozwiązuje ten problem i ogólnie poprawia integrację PHP. W przypadku niektórych starszych stosów możesz napotkać kłopoty. Zalecam przejrzenie rozmiaru danych w DB, aby sprawdzić, czy połączenie nie wypełnia danych.

Jacob

1

Jeśli jesteś na Windows i działa PHP 5.3, używając PDO_ODBC SQL Native Client, a tekst wejściowy jest UTF-8, to powinien po prostu działać automatycznie.