2008-10-07 28 views
5

Trong ứng dụng web của chúng tôi, chúng tôi sử dụng PHP5.2.6 + PDO để kết nối với cơ sở dữ liệu SQL Server 2005 và lưu trữ văn bản tiếng Nga.Kết nối PHP/PDO và SQL Server và các sự cố i18n

Đồng bộ hóa cơ sở dữ liệu là Cyrillic_General_CI_AS, bảng đối chiếu là Cyrillic_General_CI_AS, loại cột là NVARCHAR(MAX).

Chúng tôi đã thử kết nối với cơ sở dữ liệu bằng hai sơ đồ sau, cả hai đều gây ra các vấn đề khác nhau.

  1. PDO MSSQL:

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

    trong trường hợp kết quả của một truy vấn đơn giản như thế đó:

    SELECT field1 FROM tbl1 WHERE id=1 
    

    lãm field1 dữ liệu cắt ngắn đến 255 byte.

  2. PDO odbc:

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

    trong trường hợp này là kết quả của cùng một truy vấn cho thấy đầy đủ dữ liệu không cắt ngắn nhưng với dấu hỏi thay vì biểu tượng của Nga.


Ghi chú:

  • Trong dữ liệu SQL Management Studio không phải là những biểu tượng cắt ngắn và Nga đang hiển thị đúng là tốt.
  • Chúng tôi có Windows 2003 Enterprise Edition SP2

Vì vậy, những gì chúng ta nên chọn như một phương pháp kết nối và làm thế nào để sửa chữa các vấn đề tương ứng?

Trả lời

2

Hãy thử thực hiện SET NAMES "charset" sau khi bạn kết nối.

Tôi không biết bộ mã nào phù hợp với Cyrillic_General_CI_AS là gì, nhưng thử "Cyrillic"?

0

Tôi luôn có may mắn nhất khi sử dụng utf8_general_ci trên bảng - cho các kết nối, collations - mọi thứ.

Tuy nhiên, tôi chỉ có trải nghiệm đó với MySQL và PostgreSql - không phải với SQL Server.

Đối với câu hỏi DSN của bạn - Tôi không chắc chắn.

Chúc may mắn!

+0

Cảm ơn trả lời của bạn, nhưng vấn đề là definetely trong PHP/PDO - bởi vì khi chúng ta kết nối với cơ sở dữ liệu tương tự ở .NET, mọi thứ đều hoạt động tốt. –

0

Nếu bạn không được đặt trên PDO, hãy sử dụng FreeTDS - còn gọi là thủ tục mssql_ *. Đây là một trong những công việc được đề xuất xung quanh cho đến khi PDO là cố định. Kể từ PHP 5.1.2, FreeTDS có một số mssql.charset-option.

0

Tôi cũng nhận thấy cùng một vấn đề, với việc triển khai SQL server 2005 và PHP 5.x bằng PDO. Khi tôi thay đổi nvarchar (MAX) lĩnh vực để nvarchar (255) các ký tự dấu chấm hỏi lẻ ngừng xuất hiện.Tôi chắc chắn tin rằng nó đã làm với các trình điều khiển ODBC trong PDO và MS SQL server. Khi bạn ngầm định rõ các ký tự tối đa trong VARCHAR của bạn, nó giải quyết được vấn đề.

1

tôi phải làm điều này để có được dữ liệu có thể sử dụng từ lĩnh vực NVARCHAR tôi trong MSSQL:

$_ = iconv('Windows-1252', 'UTF-8', $_); 
Các vấn đề liên quan