PDA

View Full Version : سوال: obdc & php & sql-server & utf-8



بمب منطقی
یک شنبه 22 تیر 1393, 16:05 عصر
سلام دوستان.
من یک odbc dsn رو برای اتصال به sql server2008R2 ایجاد کردم.collation دیتابیسم Arabic_ci_as است.ودر php به طریق ذیل عمل کردم:


$conn=odbc_connect($dsnName,$un,$pw,SQL_CUR_USE_OD BC);
$stmt=odbc_prepare($conn, '{CALL myProc(?,?)}');
if(odbc_execute($stmt, array($param1,$param2)))
while(odbc_fetch_row($stmt))
{
$record=array();
$record['col1']=odbc_result($stmt,"col1");
$record['col2']=odbc_result($stmt,"col2");
$value[]=$record;
}
odbc_free_result($stmt);
odbc_close($conn);
echo json_encode($value);
که در اینصورت چون مقادیر col1 وcol2 فارسی هستن رو null نشون میده و اگر بجای خط 7 و 8 بنویسم:

$record['col1']=utf8_encode(odbc_result($stmt,"col1"));
$record['col2']=utf8_encode(odbc_result($stmt,"col2"));

ایندفعه هر کراکتر در فیلد رو چیزی شبیه به u233543\ نشون میده. encoding فایل php هم utf-8 with bom است
با تشکر از راهنماییهای شما عزیزان.

MMSHFE
دوشنبه 23 تیر 1393, 10:07 صبح
قبل از فیلدهای فارسی یک 'N اضافه کنید ببینید درست میشه یا نه (به کوتیشن تک بعد از N دقت کنید). مثال:
INSERT INTO `table` (`field`) VALUES (N'علی');

MMSHFE
دوشنبه 23 تیر 1393, 10:09 صبح
این لینک (http://stackoverflow.com/questions/5263293/sql-server-2005-what-does-the-letter-n-for-where-name-like-nf) رو هم ببینید.

بمب منطقی
دوشنبه 23 تیر 1393, 10:56 صبح
خیلی ممنون از پاسختون.ولی من در این SP دارم Select میکنم و N رو کجاش بزارم؟ مثل زیر که می نویسم SQL خطا میده:
SELECT N col1,N col2 FROM tbl1

بمب منطقی
دوشنبه 23 تیر 1393, 11:00 صبح
من حتی اومدم یک SELECT ساده مثل دستور زیر زدم که ببینم ایراد از SQL هست یا نه، ولی باز NULL نشون داد
SELECT N'سلام' col1 FROM tbl1

MMSHFE
دوشنبه 23 تیر 1393, 11:08 صبح
توی اینترنت دنبال Use unicode characters in SQL Server query جستجو کنید. زیاد درموردش بحث میشه.