10/10/2018, 09:49

Unicode trong PHP - Ms SQL

Số là em dùng script php insert dữ liệu Unicode vào Ms SQL. Vào SQL Quẻy Analyzer xem, nó ra 1 đống rác. Nhưng khi dùng script php SELECT để lôi ra web page thì nó vẫn ra dúng nội dung lúc Insert.
Tui nhiên database trong project của em làm chung với bên software. Bên đó nếu người ta insert dữ liệu Unicode vào và hiển thị tốt trong Ms SQL thì khi bên em SELECT ra nó ra tè le, toàn dấu hỏi.
Có bác nào biết bệnh này xin cứu giúp.

(Apache Server của em chạy trên WinXP)
VuongChieuQuan viết 12:02 ngày 10/10/2018
Khi insert từ script bạn thêm cái sau vào:

PHP Code:

$link 
mysql_connect('_mysql_sever' ,'_mysql_name''_mysql_pass');
mysql_set_charset('utf8'$link); 
nhunet viết 11:54 ngày 10/10/2018
Em đang làm Ms SQL, không phải My SQL pác ơi, và quan trọng là SELECT dữ liệu ra chứ ko fải INSERT
VuongChieuQuan viết 11:58 ngày 10/10/2018
Cái trên nếu bạn dùng với MySQL thì INSERT hay SELECT đều ổn, chả sao. Nhìn qua thấy PHP tưởng dùng với MySQL chứ dùng với Ms SQL thì mình chịu thua, mình chưa dùng PHP với cái đó bao giờ, và cũng chưa thấy ai dùng với nó, không biết có ưu điểm gì không nhỉ.
zoejoe viết 11:51 ngày 10/10/2018
Được gửi bởi VuongChieuQuan
Cái trên nếu bạn dùng với MySQL thì INSERT hay SELECT đều ổn, chả sao. Nhìn qua thấy PHP tưởng dùng với MySQL chứ dùng với Ms SQL thì mình chịu thua, mình chưa dùng PHP với cái đó bao giờ, và cũng chưa thấy ai dùng với nó, không biết có ưu điểm gì không nhỉ.
Với MsSQL hình như mạnh hơn MySQL, csdl chứa cũng nhiều hơn hẳn thì phải, với lại quản lí cũng tốt hơn
VuongChieuQuan viết 11:59 ngày 10/10/2018
Hì, MsSQL mạnh hơn MySQL thì không nói làm gì rồi, quan trọng là khi dùng với PHP nó có hơn không thôi, cũng như sao không dùng PHP với Oracle.
mickeyit2005 viết 11:57 ngày 10/10/2018
Hiện tại mình select dữ liệu từ MS SQL, nhưng font hiển thị lên web(viết bằng PHP) lại ra chữ kèm dấu ?, đang không biết giải quyết sao đây.

Các bạn ai gặp qua tình trạng này xin chỉ giúp heng, mình post code cho các bạn tham khảo
Code:

<?php
$myServer = "tames";
$myUser = "sa";
$myPass = "tsql";
$myDB = "test";
/connection to the database
$dbhandle = mssql_connect($myServer, $myUser, $myPass)
or die("Couldn't connect to SQL Server on $myServer");

//select a database to work with
$selected = mssql_select_db($myDB, $dbhandle)
or die("Couldn't open database $myDB");

//declare the SQL statement that will query the database
$query = "SELECT top 10 id , name ";
$query .= "FROM consultant ";



//execute the SQL query and return records
$result = mssql_query($query);

$numRows = mssql_num_rows($result);
echo "<h1>" . $numRows . " Row" . ($numRows == 1 ? "" : "s") . " Returned </h1>";

//display the results
while($row = mssql_fetch_array($result))
{
echo "<li>" . $row["id"] . $row["name"] . $row["year"] . "</li>";
}
//close the connection
mssql_close($dbhandle);


Đoạn code này thực thi hiển thị dữ liệu dưới dạng sau:


10 Rows Returned
# 153 Luong Th? Kim Chi
# 154 Ph?m Th? Bích Loan
# 013 Nguy?n Th? Ð?c Di?u
# 154 Tr?n Tr?ng An
# 171 Lê Thanh Tu?n
# 191 H? Ti?n Dung
# 201 Tr?n Th? Thanh Thu?
# 219 Lê Quang Hung
# 232 Tr?n Th? Hoàng Liên
# 268 Tr?n Van Trà

Vấn đề mình gặp là vậy đó, mong các bạn ai gặp rồi chỉ giúp cách khắc phục, cảm ơn các bạn
(Nếu mình post sai box,admin chuyển giúp mình heng!)
tuananhbuon viết 12:04 ngày 10/10/2018
Mình cũng gặp tình trạng tương tự. Không select ra tiếng việt được.
Ngoài ra nếu để trường dữ liệu kiểu ntext hoặc nvachar(max) thì không thể select ra được. nó báo lỗi:
Warning: mssql_query() [function.mssql-query]: message: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. (severity 16) in ...
A.K.A.Y viết 12:02 ngày 10/10/2018
Bên MySQL tui hay thêm dòng bên dưới, không biết MSSql thế nào, bác thử xem.

Code:
mssql_query("SET NAMES 'utf8'", $dbhandle);
pcdinh viết 11:56 ngày 10/10/2018
Thôi bỏ đi các cu. Mấy cái driver đó ko hỗ trợ UTF8 hay UCS2 gì cả.

MS SQL driver bản 1.1 thì có hỗ trợ đấy. Build lên mà dùng. Chỉ chạy trên Windows thôi. Không bao giờ chạy trên Linux cả.

Nếu ko cài được extension lên server thì dùng COM/DCOM mà xử lý (thông qua ADO). Tôi có kinh nghiệm handon trong việc chuyển đổi dữ liệu từ MS SQL 2005 sang MySQL nên có thể xác nhận là cách này làm được
Bài liên quan
0