PhP MySQL и Кирилица


0
Значи имам една база данни с фирми. В нея има българско и английско наименование. С проста SQL заявка "SELECT * FROM Companies ORDER BY Name_Eng" ми се сортира нормално - A, B, C и т.н. Z.
НО....... ако се опитам да сортирам по българското име .... пордержда ми ги така :
К, П, О, А, Н, Р, С, Т, У.............да не изреждам цялата азбука.
Някой да има идея защо става така?




Отговори



2

Преди заявката за селектиране сложи mysql_query('SET NAMES utf8');

Ако не стане mysql_query('SET NAMES cp1251');

Но би трябвало с utf8 да става. Съо така провери дали базата ти е с енкодинг utf8_unicode_ci. Не си играй много с други енкодинги, защщото става голяма каша понякога.

http://goo.gl/4cG1x


от kirov (4821 точки)


0
Благодаря ти много, вече бях на път да звъня в БАН да питам да не са пренаредили азбуката и аз да съм пропуснал! Ще го тествам и ще пиша какво е станало. И....научих се вече да не си играя с енкодинга..... по трудния начин. След като въвеждах всички кирилски текстове повторно вече не го пипам :)


0
Както е казал колегата ibalistix, винаги ползвай utf8_unicode_ci, защото после е много досадно да оправяш енкодинги.

от kirov (4821 точки)


2

Всъщност единсвеното което трябва да поправиш е колацията - тя трябва да бъде utf8_general_ci (винаги използвай тази колация в базите си)
Ето ти и един прост пример който направих набързо за прегледност:
(подразбиращото се подреждане е asc, но има и desc което ще ти ги подреди в обратен ред (от Я към А)) - синтаксиса (най-елементарния) е както следва select * from таблица order by колона asc / desc

EDIT:
забравих да уточня, че използването на utf8_general_ci и utf8_unicode_ci има разлика. За кирилски символи използвай  utf8_general_ci защото е по-бързо, но ако използваш македонски, сръбски, украйнски и т.н. ползвай utf8_unicode_ci. Поначало аз винаги ползвам general_ci но ти си избери кое от двете да ползваш.

 

  1. mysql> select * from потребители order by презиме;
  2. +----+-----------+----------+-----------+
  3. | id | име       | презиме  | фамилия   |
  4. +----+-----------+----------+-----------+
  5. |  5 | Бобои     | Борисов  | Борисов   |
  6. |  1 | Георги    | Иванов   | Петров    |
  7. |  4 | Иван      | Иванов   | Киров     |
  8. |  3 | Антоанета | Кирова   | Петрова   |
  9. |  2 | Стефан    | Симеонов | Зографски |
  10. +----+-----------+----------+-----------+
  11. 5 rows in set (0.00 sec)
  12.  
  13. mysql> select * from потребители order by фамилия;
  14. +----+-----------+----------+-----------+
  15. | id | име       | презиме  | фамилия   |
  16. +----+-----------+----------+-----------+
  17. |  5 | Бобои     | Борисов  | Борисов   |
  18. |  2 | Стефан    | Симеонов | Зографски |
  19. |  4 | Иван      | Иванов   | Киров     |
  20. |  1 | Георги    | Иванов   | Петров    |
  21. |  3 | Антоанета | Кирова   | Петрова   |
  22. +----+-----------+----------+-----------+
  23. 5 rows in set (0.00 sec)
  24.  
  25. mysql> select * from потребители order by име;
  26. +----+-----------+----------+-----------+
  27. | id | име       | презиме  | фамилия   |
  28. +----+-----------+----------+-----------+
  29. |  3 | Антоанета | Кирова   | Петрова   |
  30. |  5 | Бобои     | Борисов  | Борисов   |
  31. |  1 | Георги    | Иванов   | Петров    |
  32. |  4 | Иван      | Иванов   | Киров     |
  33. |  2 | Стефан    | Симеонов | Зографски |
  34. +----+-----------+----------+-----------+
  35. 5 rows in set (0.00 sec)
  36.  
  37. mysql>

от ibalistix (0 точки)


1

Отваряш си файл my.cnf и търсиш следните редове.

 

[client]
default-character-set=utf8

[mysql] default-character-set=utf8
[mysqld] default-character-set = utf8 collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' character-set-server = utf8

За да съм 100% сигурен, че всичко ще е наред винаги си настройвам на UTF-8. Това би трябвало да се настрои още при създаване на базата данни, но поради някаква причина ми се е случвало да не става така и съм си научил урока, винаги да проверявам.




0

Първо благодаря на всички, които се опитаха да помогнат. Не ми е ясно дали аз съм идиот или базата е осрана още при създаването но.....

Мъките продължават.

Таблицата си беше utf8_general_ci когато сортираше неправилно. 

Смених на utf8_unicode_ci - има леко подобрение. Демек сорта сега започва от Р,И,Я,З,С.

Пробвай и съвета на kirov : mysql_query('SET NAMES utf8') или mysql_query('SET NAMES cp1251') : резултата беше на китайски.

Не съм пробвал "лекарството" на krasimir.krustev86 : не мога да намеря къде живее този файл.




0
Качи я тази база някъде и дай линк да я сваля за преглед (ако не е секретна информация де).

от ibalistix (0 точки)

0
Where is my.cnf?
http://forum.directadmin.com/showthread.php?t=22252

от Dobromir (777 точки)