PDA

View Full Version : سوال: مشکل نمایش فارسی در mysql



anejat
جمعه 16 مهر 1389, 22:11 عصر
با عرض سلام و خسته نباشید به همه برو بچ پر تلاش این بخش و تمام بخش های سایت ، یه مشکلی برام پیش اومده نیاز به یک راه حل دارم :

سلام

من Collation ديتابيس رو در PHPMyAdmin
utf8_persian_ci انتخاب كردم ولي وقتي
يك داده به زبان فارسي از طريق اسكريپتم در ديتابيس ذخيره
مي كنم ، به حروف نامعلومي تبديل ميشه
و حتي در phpMyAdmin هم به صورت فارسي ديده
نميشه!
مثلاً اين شكلي ديده ميشه : نقل قول:
ضد حریق
وقتي داده رو از طريق صفحه وب اسكريپتم لود مي كنم به زبان فارسي
به خوبي ديده ميشه و فقط در PHPMyAdmin و Mysql عجيب غريب ديده
ميشه! پس اين Collation به چه درد ميخوره! http://forum.majidonline.com/majidonline/smiley_new/majidonline_sad.gif
من ميخوام از طريق ODBC داده هاي Mysql رو تو Excel
لود كنم و الان با اين شرايط تمامي كلمات فارسي با همون
حروف نامأنوس در Excel لود ميشن (دقيقاً همونجور كه در Mysql
يا phpMyAdmin ديده ميشن)
راهي نيست كه كاراكترهاي فارسي در Mysql ، بدون تبديل شدن
به كاراكتر ديگري به همون شكل فارسي خودشون ذخيره بشن ؟
اصلاً چنين چيزي امكان داره ؟

:متعجب:

funpatogh
جمعه 16 مهر 1389, 22:32 عصر
بعد از اینکه کانکت شدی به mysql و دیتابیست رو سلکت کردی این کد ها رو زیرش بنویس


mysql_query("SET NAMES utf8");
mysql_set_charset("utf8");

Keramatifar
سه شنبه 20 مهر 1389, 15:00 عصر
دوست عزیز
در فولدر phpMyAdmin در فولدر libraries فایل database_interface.lib.php را باز کنید و کد:


if (! empty($GLOBALS['collation_connection'])) {
PMA_DBI_query("SET CHARACTER SET 'utf8';", $link, PMA_DBI_QUERY_STORE);
$mysql_charset = explode('_', $GLOBALS['collation_connection']);
PMA_DBI_query("SET collation_connection = '" . PMA_sqlAddslashes($GLOBALS['collation_connection']) . "';", $link,

PMA_DBI_QUERY_STORE);
} else {
PMA_DBI_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci';", $link, PMA_DBI_QUERY_STORE);
}

پیدا و کامنت کنید.
در نسخه های قدیمی تر فقط این کد ها را کامنت کنید:



PMA_DBI_query("SET collation_connection = '" . PMA_sqlAddslashes($GLOBALS['collation_connection']) . "';", $link,

PMA_DBI_QUERY_STORE);




PMA_DBI_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci';", $link, PMA_DBI_QUERY_STORE);

abdollah110110
دوشنبه 10 آبان 1389, 18:04 عصر
سلام
تابع PMA_DBI_query چیست؟:متفکر:
متشکرم

funpatogh
دوشنبه 10 آبان 1389, 21:50 عصر
این تابع یکی از متد های استفاده شده در برنامه phpmyadmin هست و از توابع خود php نیست

mohammad-gh
سه شنبه 18 آبان 1389, 18:39 عصر
ببخشید آقای مدیر

در فولدر phpMyAdmin در فولدر libraries فایل database_interface.lib.php را باز کنید و کد
من منظورتون رو از فولدر نفهمیدم
این تنظیم رو تو phpmy admin روی هاست داریم یا localhost
اگر روی هاست همچین کاری باید انجام بدیم میشه راهنمایی کنید که باید کجا بریم

funpatogh
سه شنبه 18 آبان 1389, 21:42 عصر
توی لوکال هم دارید به شرطی که از نرم افزار های wampp lampp xampp و.. استفاده کرده باشید یا phpmyadmin رو جدا نصب کرده باشید

mohammad-gh
چهارشنبه 19 آبان 1389, 17:48 عصر
نه من منظورم دقیقا برعکس بود
من از کجای هاستی با cpanel به فولدر phpmyadmin برم
یعنی چطور تنظیماتی که گفته شده رو تو cpanel اعمال کنم

funpatogh
چهارشنبه 19 آبان 1389, 19:29 عصر
تو هاست شما دسترسی ندارید و فقط ادمین سرور دسترسی داره

mohammad-gh
پنج شنبه 20 آبان 1389, 18:53 عصر
پس با این حساب مشکل ؟؟؟ به جای فارسی راه حلی نداره !
چون من هر چی تو این فروم گفته شده اعمال کردم اما نشد که نشد
راستی من دارم از یه برنامه تحت ویندوز (.Net) به بانک my sql روی هاست اطلاعات اضافه می کنم

funpatogh
پنج شنبه 20 آبان 1389, 19:39 عصر
شما اگه صفحت رو utf-8 ذخیره کرده باشید و collation تیبل هاتون رو utf8_persian_ci بگزارید و اون 2 خط کد که دادم رو هم بعد از اتصال به دیتبایس بگزارید هم توی phpmyadmin هم توی برنامه فارسی و قابل خواندن میشود

mohammad-gh
پنج شنبه 20 آبان 1389, 20:09 عصر
سلام دوست عزیز ، ممنون از توجهت به تاپیک
متاسفانه این مشکل چند روزی است کل وقتم رو گرفته و به نتیجه ای نمیرسه
ببینید ، من تمام مواردی که گفتید رو انجام ، اون دو تا کد رو با روش .net نوشتم
حتی تک اونها رو هم امتحان کردم (برای جلوگیری ار خنثی کردن اثر هم) و یه خط کد(کانکشن) رو هم اضافه کردم
این کدهام است که به زبان vb.net نوشته شده


For i = 0 To Val(stutable.Rows.Count) - 1
'------------------------------------
Dim objComm1 As MySqlCommand = New MySqlCommand()
objComm1.Connection = webcon
objComm1.CommandText = "SET character_set_connection='utf8'"
'------------------------------------
Dim objComm2 As MySqlCommand = New MySqlCommand()
objComm2.Connection = webcon
objComm2.CommandText = "SET NAMES 'utf8'"
'------------------------------------
Dim objComm3 As MySqlCommand = New MySqlCommand()
objComm3.Connection = webcon
objComm3.CommandText = "SET CHARACTER SET 'utf8'"
'---------------------§«¢ي© ي©ي§ §ں§ى ىں----------------
Dim objCommandp As MySqlCommand = New MySqlCommand()
objCommandp.Connection = webcon
objCommandp.CommandText = "INSERT INTO stuinfo(idstu,namestu,idnum,sexstu) VALUES(@idstu,@namestu,@idnum,@sexstu)"
objCommandp.Parameters.AddWithValue("@idstu", stutable.Rows(i).Item("id"))
objCommandp.Parameters.AddWithValue("@namestu", stutable.Rows(i).Item("name") + "-" + stutable.Rows(i).Item("family"))
objCommandp.Parameters.AddWithValue("@idnum", CStr("N" & stutable.Rows(i).Item("fname")))
objCommandp.Parameters.AddWithValue("@sexstu", "ë§ں©§")
webcon.Open()
objComm1.ExecuteNonQuery()
objComm2.ExecuteNonQuery()
objComm3.ExecuteNonQuery()
objCommandp.ExecuteNonQuery()

webcon.Close()
Next i

حال در اینطرف قضیه یعنی نمایش روی وب
صفحه رو با utf-8 ذخیره کردم (تو نت پد با زکردم و ...)
ابتدای صفحه کد مربوط به charset رو utf گذاشتم
تمام بانک، جدول و فیلدها رو به کلکشن گفته شده درآوردم
و این هم فیلدهام که تو my sql گذاشتم (سعی کردم از هر نوعی بزارم تا شاید جواب بده)

http://barnamenevis.org/forum/attachment.php?attachmentid=60093&stc=1&d=1289495040
و در نهایت این هم نتیجه خروجی :
http://www.afc90.ir/test.php

mohammad-gh
شنبه 22 آبان 1389, 17:26 عصر
امبدورا وار بودم از اساتید یا جناب funpatogh (http://barnamenevis.org/forum/member.php?u=54136) کسی به دادم برسه تا شاید این مشکل رو حل کنم
حتما راه و چاره ای داره این مشکل

funpatogh
شنبه 22 آبان 1389, 19:31 عصر
اخه عزیز شما کدهاتون به زبان php نیست که بخوام تستش کنم و من سر رشته به vb.net ندارم

mohammad-gh
یک شنبه 23 آبان 1389, 12:14 عصر
شرمنده
طرف وب رو ببینید درست تنظیم شده
و یه سوال
میشه طرف وب رو طوری تنظیم کرد که قبل از هر ورود داده خودش این دو خط کد (set names utf , ....) رو اجرا کنه (مثل sql )