2008-10-07 13 views
5

W naszej aplikacji internetowej używamy PHP5.2.6 + PDO do łączenia się z bazą danych SQL Server 2005 i przechowywania tekstów rosyjskich.Połączenie PHP/PDO i SQL Server oraz i18n numer:

Sortowanie bazy danych to Cyrillic_General_CI_AS, sortowanie według tabeli to Cyrillic_General_CI_AS, typ kolumny to NVARCHAR(MAX).

Próbowaliśmy połączyć się z bazą danych przy użyciu dwóch poniższych schematów, które powodują różne problemy.

  1. PDO mssql:

    $dbh = new PDO ('mssql:host='.$mssql_server.';dbname='.$mssql_db, $mssql_login, $mssql_pwd); 
    

    w tym przypadku wynika z prostej kwerendy tak:

    SELECT field1 FROM tbl1 WHERE id=1 
    

    pokazuje field1 dane obcinane do 255 bajtów.

  2. PDO odbc:

    $dbh = new PDO ('odbc:DSN=myDSN;UID='.$mssql_login.';PWD='.$mssql_pwd); 
    

    w tym przypadku wynika z tego samego zapytania pokazuje pełne dane nie okrojone, ale ze znakami zapytania zamiast rosyjskich symboli.


Uwagi:

  • W danych SQL Management Studio to nie obcięte i rosyjskie symbole są wyświetlane poprawnie, jak również.
  • Mamy Windows 2003 Enterprise Edition SP2

Więc co powinniśmy wybrać jako metodę połączenia i jak to naprawić odpowiadające problemy?

Odpowiedz

2

Po podłączeniu spróbuj wykonać SET NAMES "charset".

Nie wiem, jaki zestaw znaków pasuje do Cyrillic_General_CI_AS, ale spróbuj "Cyrillic"?

0

Zawsze miałem najlepsze szczęście, używając utf8_general_ci na całej tablicy - dla połączeń, sortowania - wszystkiego.

Jednak mam tylko to doświadczenie z MySQL i PostgreSql - nie z SQL Server.

Co do Twojego pytania DSN - nie jestem pewien.

Powodzenia!

+0

dzięki za odpowiedź, ale problem jest zdecydowanie w PHP/PDO - bo gdy łączymy się z tej samej bazy danych w .NET, wszystko działa dobrze. –

0

Jeśli nie jesteś ustawiony na ChNP, użyj FreeTDS - inaczej proceduralnych wywołań mssql *. Jest to jedna z zalecanych pracy do czasu, aż PDO będzie poprawiony. Od PHP 5.1.2, FreeTDS ma mssql.charset-option.

0

Zauważyłem ten sam problem, z implementacją SQL Server 2005 i PHP 5.x przy użyciu PDO. Kiedy zmieniłem pole nvarchar (MAX) na nvarchar (255) znaki przestankowe pojawiły się.Zdecydowanie uważam, że ma to związek ze sterownikami ODBC w PDO i serwerze MS SQL. Kiedy niejawnie określisz maks. Znaki w swoim varcharze, rozwiąże to problem.

1

Musiałem to zrobić, aby uzyskać użyteczne dane z moich pól nvarchar w MSSQL:

$_ = iconv('Windows-1252', 'UTF-8', $_); 
Powiązane problemy