Биллинговая система Nodeny
22 Ноября 2024, 04:22:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: ї/і  (Прочитано 4309 раз)
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« : 05 Марта 2021, 22:05:30 »

Некоторое время назад заметил такую особенность: при поиске в NoDeny считает украинские буквы "ї" и "і" одинаковыми. Для примера, сделайте поиск по фрагменту "ї" и в результате будет искать и те поля, в которых "ї"может и не быть, но будет "і".

В инете есть решения на эту тему. В частности там предлагают заменить COLLATE на utf8_unicode_ci. Это, грубо говоря, правила, по которым происходят сравнения. По дефолту (в доках и кажется в коде) указано utf8_general_ci, что и есть проблемой. Я попытался изменить utf8_general_ci на utf8_unicode_ci в
1) конфиге mysql сервера
2) в файле Db.pm
3) конкретно у базы данных NoDeny
4) конкретно у таблицы data0 (в ней хранятся допполя)

Не помогло. Кстати, может вам поможет, может это от версии mysql зависит. Лично мне помогло изменение COLLATE у конкретного поля data0. Вот такой командой можно посмотреть параметры таблицы:
Код:
show create table data0; 
покажет типа такого:
Код:
 CREATE TABLE `data0` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `uid` int unsigned NOT NULL,
  `_adr_telefon` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '',
  `_adr_street` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '',
 ...
Вот для каждого поля, где вы хотите чтоб "ї" не было равно "і", делаем такое:
Код:
alter table data0 change `_adr_city` `_adr_city` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '';
здесь я изменил COLLATE  у поля город (_adr_city). Обратите внимание, что _adr_city дважды указывается. Такой синтаксис.

Конечно предварительно нужно сделать бекап базы данных. Его нужно делать при любых изменениях. Я, кстати, не делал)

Возможно вам помогут и более простые действия:
Код:
ALTER DATABASE nodeny CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE data0 CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Записан
gen PSI
NoDeny
Пользователь
*

Карма: -5
Offline Offline

Сообщений: 55


Просмотр профиля
« Ответ #1 : 31 Марта 2021, 12:40:13 »

Спасибо за решение.
Записан
Jovani
NoDeny
Постоялец
*

Карма: -9
Offline Offline

Сообщений: 234


Просмотр профиля
« Ответ #2 : 01 Апреля 2021, 11:12:43 »

Точно так с русской и украинской "е" / "є"
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!