# پایگاه‌های داده > سایر پایگاه‌های داده > MySQL >  مرتب کردن به ترتیب حروف الفبای فارسی

## problem

قبلاً هم مشابه این سوال در همین تالار پرسیده شده، اما جواب اون کمکی به رفع مشکل من نکرد.

من دیتابیس و تمام جدول‌ها رو با collation مناسب (همون utf8_persian_ci خودمون) ساختم، و حتی در تمام queryهایی که به کار می‌برم (از توی صفحهٔ وب) دستور collate رو هم به کار می‌برم.

مثال:
select id, title from majors order by title COLLATE utf8_persian_ci

با این وجود، جدول مطابق الفبای فارسی مرتب *نمیشه*! دال قبل از ب می‌آد، بعد مثلاً ت و بعد میم و بعد از اون تازه کاف و بعد پ قرار می‌گیرن! (توجه کنید که من از کاراکتر درست ک و ی استفاده می‌کنم، نه از کاراکتر اشتباه ک و ی که مال عربی هست).

مشکل کار من چیه؟ راه حل شما براش چیه؟

----------


## I,Nobody

این راه حلی که شما استفاده میکنی، راه حلیه که یکی از دوستان توی همین انجمن، خیلی حق به جانب، ارائه کرده که به نظر من هیجوقت درست کار نمیکنه.
شما collation جدولت رو همون utf8_persian_ci بذار و کوئری رو اینجوری بگیر ببین مشکلت حل میشه :

select id, title from majors order by BINARY(title) ASC

----------


## mrrajabi

سلام
این مشکلی هست که Mysql نشخه های یکم قدیمیتر مثل mysql4.1 شاید داشته باشه.
نسخه های جدید تر این محصول مثل mysql5‌به بعد شاید این مشکلاتو نداشته باشه،شما mysql5 رو استفاده کن شاید کمکتون کنه.

----------


## cybercoder

جستحو پیش از پرسش
http://bugs.mysql.com/bug.php?id=30277
http://projects.foss.ir/frs/?group_id=13&release_id=67

موفق باشید.

----------


## problem

از پاسخ شما دوستان ممنون هستم. در جواب مورد اول، باید بگم که استفاده از BINARY رو نمی‌تونم بپذیرم، چون انتظار دارم که یا واقعاً مای سیکوئل در بارهٔ زبان فارسی ساپورت کامل داشته باشه (که در اون صورت قاعدتاً باید با همون collate و این‌ها حل شه) یا ساپورتش درست نباشه (که مجبور باشیم از طریق binary دورش بزنیم) که در این حالت باید مشکل رو خودشون رفع کنن.

در جواب مورد دوم، باید عرض کنم که البته این سایتی که باهاش کار می‌کنم هاست شده هست و من قادر به ارتقای نرم‌افزار نیستم، اما مطابق چیزی که در CPanel گزارش می‌شه، اون هاست داره از مای سیکوئل نسخهٔ 5.0.27 استفاده می‌کنه.

در مورد آخر باید عرض کنم که لینک مای سیکوئل که اصلا کمک نکرد، چون دقیقاً همون collation رو اشاره کرده که مشکل داره. اما لینک دوم در مورد نسخهٔ ۴ از مای سیکوئل بود، نه نسخهٔ ۵.

نهایتا مشکل من حل نشده موند.

----------


## I,Nobody

خوب من خواستم یه راه حلی بهت ارائه بدم که کارت راه بیفته.
حالا شما اگه خواستی استفاده کن، نخواستی هم می تونی منتظر رفع اساسی این مشکل بمونی و بعدش برنامه تونو بنویسی.
ضمناً شما اگه یکی از توابع مثلاً PHP با فارسی مشکل داشته باشه و شما بهش نیاز داشته باشی، یه تابع می نویسی یا منتظر رفع ایراد تابع اصلی توی نسخه های جدیدتر می مونی؟!

----------


## problem

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

اما درمورد راه حلی که شما فرمودید، باید بگم که کامل نیست. با کمک BINARY کماکان ترتیب الفبا درست رعایت نمی‌شه و مثلاً ک و پ بعد از بقیهٔ حروف می‌آن.

اما جناب vahidAM شما یک لینک دومی دادید، که اگر چه مال ورژن ۵ نیست، اما برام جالبه. توش انگار داره یک collation جدید تعریف می‌کنه. می‌شه لطفاً طرز استفاده از اون رو به من یاد بدید؟

----------


## oxygenws

به کل قضیه و این سوال آخر شما وابسته است، اما مطلقا به سوال شما وابسته نیست.

http://www.gaugeus.com/ramblings/200...stom-collation
http://bugs.mysql.com/file.php?id=6814

http://www.unicode.org/charts/

----------


## saeidejafari

سلام بر همگی،
من هم همین مشکل رو دارم. mysql ver :  5.0.51 هست و collation فیلد های جدول(g_name) هم utf8_unicode_ci هست.

order by BINARY `g_name` COLLATE utf8_persian_ci`ORDER BY BINARY `g_nameاین دو تا کد رو امتحان کردم  که مرتب سازی رو درست انجام میده ولی با حروف "گ چ پ ژ" مشکل داره :(
می خواستم بدونم دوستان برای حل این مشکل چیکار می کنن؟راه حلش چیه؟
ممنون از همگی :)

----------

