PDA

View Full Version : مرتب کردن به ترتیب حروف الفبای فارسی



problem
دوشنبه 05 شهریور 1386, 23:38 عصر
قبلاً هم مشابه این سوال در همین تالار پرسیده شده، اما جواب اون کمکی به رفع مشکل من نکرد.

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

مثال:

select id, title from majors order by title COLLATE utf8_persian_ci

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

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

I,Nobody
سه شنبه 06 شهریور 1386, 15:41 عصر
این راه حلی که شما استفاده میکنی، راه حلیه که یکی از دوستان توی همین انجمن، خیلی حق به جانب، ارائه کرده که به نظر من هیجوقت درست کار نمیکنه.
شما collation جدولت رو همون utf8_persian_ci بذار و کوئری رو اینجوری بگیر ببین مشکلت حل میشه :


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

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

cybercoder
سه شنبه 06 شهریور 1386, 19:10 عصر
جستحو پیش از پرسش
http://bugs.mysql.com/bug.php?id=30277
http://projects.foss.ir/frs/?group_id=13&release_id=67

موفق باشید.

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

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

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

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

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

problem
چهارشنبه 07 شهریور 1386, 16:42 عصر
خوب، من الان مشکل حادی ندارم، و اگر داشته باشم راه حل شما رو استفاده خواهم کرد. بحث من اینه که مشکل رو دقیقاً بشناسم، مطمئن شم که واقعاً راه حلی نداره، بعد هم دنبال رفعش برم.

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

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

oxygenws
چهارشنبه 07 شهریور 1386, 19:11 عصر
به کل قضیه و این سوال آخر شما وابسته است، اما مطلقا به سوال شما وابسته نیست.

http://www.gaugeus.com/ramblings/2007/7/20/sorting-dzongkha-and-tibetan-unicode-in-mysql-through-a-custom-collation
http://bugs.mysql.com/file.php?id=6814

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

saeidejafari
دوشنبه 19 اسفند 1387, 08:45 صبح
سلام بر همگی،
من هم همین مشکل رو دارم. 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این دو تا کد رو امتحان کردم که مرتب سازی رو درست انجام میده ولی با حروف "گ چ پ ژ" مشکل داره :(
می خواستم بدونم دوستان برای حل این مشکل چیکار می کنن؟راه حلش چیه؟
ممنون از همگی :)