Автор Гілка: MySQL, UTF-8 та літери Іі, Її  (Прочитано 2552 раз)

Відсутній vitalis

  • Кореспондент
  • ***
  • дописів: 112
  • Карма: +0/-0
  • Як воно?
Власне, наскільки я розумію, тут проблема самого юнікоду: літери І, Ї йдуть в кодовій таблиці раніше за всю іншу українську абетку.
Відповідно при виборці із сортуванням за абеткою виходить не дуже гарно (І,Ї,А,Б,В...)

Чи можна якось вирішити цю проблему в MySQL? Може задати якийсь інший тип порівняння? (utf8_ukrainian_ci на жаль немає)

MySQL 4.1
MySQL Charset: UTF-8 Unicode (utf8)
MySQL connection collation: utf8_general_ci

PHP 4.4 + mbstring



Вирішення потрібно для сортування творів нет-бібліотеки.

Допоможіть, ге? :)


P.S. Ця ж тема на іншому форумі.
«Чтиво» - е-бібліотека україномовної літератури на всі смаки
Домівка.net - національний портал

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: MySQL, UTF-8 та літери Іі, Її
« Відповідей #1 : 2006-07-31 11:33:17 »
[vlisivka@apollo ~]$ locale
LANG=uk_UA.UTF-8
LC_CTYPE="uk_UA.UTF-8"
LC_NUMERIC="uk_UA.UTF-8"
LC_TIME="uk_UA.UTF-8"
LC_COLLATE="uk_UA.UTF-8"
LC_MONETARY="uk_UA.UTF-8"
LC_MESSAGES="uk_UA.UTF-8"
LC_PAPER="uk_UA.UTF-8"
LC_NAME="uk_UA.UTF-8"
LC_ADDRESS="uk_UA.UTF-8"
LC_TELEPHONE="uk_UA.UTF-8"
LC_MEASUREMENT="uk_UA.UTF-8"
LC_IDENTIFICATION="uk_UA.UTF-8"
LC_ALL=
[vlisivka@apollo ~]$ mysql -u root -e "drop database if exists test_locale; create database test_locale default charset utf8 collate utf8_unicode_ci; use test_locale; create table test_locale_table (txt varchar(10));" ; for I in й ц у к е н г ґ ш щ з х ї ф і в а п р о л д ж є я ч с м и т ь б ю ; do mysql -u root test_locale -e "insert into test_locale_table values('$I');" ; done ; mysql -u root test_locale -e "select * from test_locale_table order by txt; show variables like '%char%'; show variables like '%collation%';"
+------+
| txt  |
+------+
| а    |
| б    |
| в    |
| ґ    |
| г    |
| д    |
| е    |
| є    |
| ж    |
| з    |
| и    |
| і    |
| ї    |
| й    |
| к    |
| л    |
| м    |
| н    |
| о    |
| п    |
| р    |
| с    |
| т    |
| у    |
| ф    |
| х    |
| ц    |
| ч    |
| ш    |
| щ    |
| ь    |
| ю    |
| я    |
+------+
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
« Змінено: 2006-07-31 11:36:44 від lvm »
[Fedora Linux]

Відсутній Sergii Galashyn

  • Новачок
  • *
  • дописів: 40
  • Карма: +0/-0
Re: MySQL, UTF-8 та літери Іі, Її
« Відповідей #2 : 2006-07-31 16:05:03 »
... utf8_unicode_ci; ...
Дякую, пане Володимире. Ваша підказка разом із лікбезом на форумі PHP допомогли вирішити проблему.
Ubuntu 10.10 @ Dell Latitude E6500

Відсутній vitalis

  • Кореспондент
  • ***
  • дописів: 112
  • Карма: +0/-0
  • Як воно?
Re: MySQL, UTF-8 та літери Іі, Її
« Відповідей #3 : 2006-07-31 16:15:55 »
Отже, і я дякую за допомогу.

Єдине "але"... чи не закралась тут помилка...
+------+
| txt  |
+------+
| а    |
| б    |
| в    |
| ґ    |
| г    |
| д    |
| е    |
...чи не повинно бути "г, ґ"?
« Змінено: 2006-07-31 16:25:47 від vitalis »
«Чтиво» - е-бібліотека україномовної літератури на всі смаки
Домівка.net - національний портал

Відсутній Sergii Galashyn

  • Новачок
  • *
  • дописів: 40
  • Карма: +0/-0
Re: MySQL, UTF-8 та літери Іі, Її
« Відповідей #4 : 2006-07-31 16:26:43 »
Гм, цікаво щодо "г,ґ". Принаймні в мене ось що дав тест:
Цитата
абвгґдеєжзиіїйклмнопрстуфхцчшщьюя
Тобто порядок.
Ubuntu 10.10 @ Dell Latitude E6500

Відсутній vitalis

  • Кореспондент
  • ***
  • дописів: 112
  • Карма: +0/-0
  • Як воно?
Re: MySQL, UTF-8 та літери Іі, Її
« Відповідей #5 : 2006-07-31 18:24:18 »
Досить цікава штука вийшла...

Ось зформований список за абеткою:
Цитата
Вінграновський
Вовчок
Гоголь
Головко
Гончар
Грабовський
Гребінка
Ґренджа-Донський
Гриневичева
Грінченко
Грушевський
Гуцало
Давидов
І якого біса там Ґґ поміж Гг затесалось? Чудасія...
«Чтиво» - е-бібліотека україномовної літератури на всі смаки
Домівка.net - національний портал

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: MySQL, UTF-8 та літери Іі, Її
« Відповідей #6 : 2006-08-01 16:37:50 »
Досить цікава штука вийшла...

Ось зформований список за абеткою:
Цитата
Вінграновський
Вовчок
Гоголь
Головко
Гончар
Грабовський
Гребінка
Ґренджа-Донський
Гриневичева
Грінченко
Грушевський
Гуцало
Давидов
І якого біса там Ґґ поміж Гг затесалось? Чудасія...

Людина, яка писала сортування для MySQL, вирішила що Г і Ґ - це одна й та ж літера, тільки з акцентом. Треба напевно когось накопати, але не знаю кого. В мене MySQL 4.1.
[Fedora Linux]