PDA

نسخه کامل مشاهده نسخه کامل : مشكل نام فايل فارسي در دستور select into outfile (dumpfile)



ircitizen
24-12-2012, 07:20
با سلام خدمت دوستان
سوال: من ميخوام محتويات يك سطر از يك جدول را در يك فايل ذخيره كنم. همونطور كه مي‌دونيد با استفاده از دستور
SELECT fields INTO OUTFILE "c:/fileName" FROM tableName

ميشه اين كار رو انجام داد. ولي مشكلي كه وجود داره اينه كه وقتي fileName فارسي باشه، نام فايلي كه ساخته ميشه قر و قاطي ميشه.
لازمه بگم كه من از NAVICAT براي مديريت ديتابيس استفاده مي‌كنم و قبل از اجراي اين دستور، دستور
SET NAMES UTF8

رو هم اجرا كردم.
ضمناً براي اينكه بتونيد سريع يك تست بزنيد؛ مي‌تونيد دستور زير رو كپي و اجرا كنيد:
SELECT "A" INTO OUTFILE "C:/سلام"

و چك كنيد ببينيد آيا فايلي به اسم "سلام" در درايو C ايجاد شده يا خير. من كه اجرا مي‌كنم يه فايل با اسم "ط³ظ„ط§ظ…" ساخته مي‌شه.

neopersia
24-12-2012, 16:54
سلام
چه دلیلی داره که اسم فارسی برای فایل خروجی بدید؟

ircitizen
25-12-2012, 08:12
سلام
چه دلیلی داره که اسم فارسی برای فایل خروجی بدید؟

در اداره ما از يك سيستم اتوماسيون اداري استفاده مي‌شه. متاسفانه اين سيستم امكانات محدودي ارائه ميده، به عنوان مثال هيچ راهي براي خروجي گرفتم از نامه‌ها و پيام‌ها و يا اضافه كردن اطلاعات جانبي به پيام‌ها و خيلي كارهاي ديگه رو انجام نمي‌ده.
حالا من اومدم و با صرف يك زمان زياد تعداد زيادي از اين پيامها رو تو يك ديتابيس وارد كردم. از جمله اين اطلاعات فايل‌هايي هستند كه پيوست پيامها بودند و من در يك جدول، نام، پسوند و محتويات اونها رو ذخيره كردم. حالا نياز دارم كه تعدادي از اون فايل‌ها رو از ديتابيس رو هارد ذخيره كنم. و اين مهمه كه نام فايل‌ها به درستي ايجاد بشه چون كپي اين فايل‌ها در سيستم اتوماسيون ضبط شده و دست افراد ديگه هم هست و براي ارجاع دادن به نام اون‌ها بايد نام درستشون رو بدونم و اين اختيار رو ندارم كه نام ديگه‌اي رو فايل‌ها بذارم.
و جداي از اين توضيحات، فكر مي‌كنم شما هم با بنده موافق باشيد كه دست و بال يك نرم‌افزار نويس نبايد با اين چيزا بسته بشه چون ممكنه الآن نياز نداشته باشيم ولي ممكنه در جاي ديگه مجبور شيم.

ضمناً شايد براي كمك به اذهان بد نباشه بگم:
يكي بهم‌گفت كه بايد علاوه بر set كردن charset در mySQL بايد سرور شبيه‌ساز آپاچي رو هم تنظيم كني (ايشون معتقد بود كه نويكت به هنگام نصب، آپاچي و يا يك شبيه‌ساز سرور ديگه رو نصب مي‌كنه). البته اون آقا تخصصش تو Microsoft SQL server بود و جزئيات اين كار رو نمي‌دونست. حالا من موندم كه آيا اين حرفش اصلاً درسته. آخه نويكت چه نيازي به آپاچي داره؟ مگه مي‌خواد مثل php كد HTML درست كنه؟

ممنون از توجه‌تون
لطفاً راهنماييم كنيد، گير افتادم

neopersia
25-12-2012, 15:34
این مشکل بیشتر برمیگرده به سیستم عامل و زیاد ارتباطی با mysql نداره که با تنظیم charset برای کوئری حل بشه. تنظیمات charset برای پردازش داخل mysql کار میکنه نه برای نام فایل خروجی از اون.
من در لینوکس بدون مشکل با php و همینطور از ترمینال فایل با نام فارسی میسازم. خروجی های mysql هم با نام فارسی در لینوکس ایجاد میشه و مشکلی هم نداره. اما ویندوز اجازه همچین کاری رو به php یا mysql نمیده.
برای مثال این دستور رو در یک اسکرپت batch قرار بدید و در ویندوز اجرا کنید (چون در ترمینال که کلاً حروف فارسی رو علامت سوال مینویسه!):

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
متوجه میشید که فایلی که ساخته میشه نامش "تست.txt" نخواهد بود بلکه چیزی شبیه "╪¬╪│╪¬.txt" میشه! همین اتفاق هم برای نام فایل خروجی از mysql میافته. من این کد رو از ترمینال لینوکس در فدورا اجرا میکنم و بدون مشکل کار میکنه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نام فایل خروجی هم فارسی هست. اما وقتی معادل همین رو در ویندوز استفاده میکنم نام فایل رو خراب میکنه

**
ضمناً فکر نمیکنم navicat با آپاچی کار کنه چون خودش مستقیماً به سرور دیتابیس متصل میشه و نیازی به آپاچی نیست.
برای حل مشکلتون هم یا باید فایلها رو دستی تغییر نام بدید. یا اینکه براشون کاتالوگ درست کنید که نام فایل انگلیسی و فارسی رو به هم مرتبط کنه. یا اینکه برای خروجی گرفتن یک راه دیگه پیدا کنید که با ویندوز مشکلی نداشته باشه!

ircitizen
26-12-2012, 15:04
ضمن تشكر از وقتي كه گذاشتين.
توضيحاتتون رو متوجه شدم ولي باز هم احياناً چنانچه تنظيمات مربوط به ويندوز رو كه در اين قضيه دخيل هست يافتين؛ ممنون مي‌شوم من رو هم در جريان بگذارين.

درود بر شما