mysql нечувствительный к акценту и точечный нечувствительный поиск

Проблема : Я пытаюсь реализовать алгоритм поиска, который показывает результаты, даже если Предусмотрены пунктирные символы. Другими словами: SELECT 'über' = 'uber' или SELECT 'mas' = 'maş' эти результаты вернут истину. Это применимо к каждому отдельному символу в следующем массиве:

$arr = array('ş' => 's', 'ç' => 'c', 'ö' => 'o', 'ü' => 'u' and so on ...);

The Solution In My Mind : Наряду с исходным столбцом я могу иметь конкретный столбец, в котором хранятся английские имена. Поэтому перед сохранением «über» в базе данных я также конвертирую его в «uber» в php, а затем сохраню как «über» (как оригинал), так и «убер» (как доступный для поиска) в базе данных.

Но, несмотря на то, что я искал это целый день, я все же считаю, что должен быть более простой и понятный способ выполнить задачу, поскольку это означало бы (более или менее) хранить одни и те же данные дважды в база данных. Итак, ребята, как вы думаете, какое решение является единственным выходом, или вы знаете подход получше?

РЕДАКТИРОВАТЬ

Для нечувствительности к акценту Я видел сообщения на SO, они работают, но, поскольку я также рассматриваю пунктирные символы, мне пришлось задать этот вопрос.

EDIT2

По некоторым причинам я не могу опубликовать всю структуру таблицы и код в точности, но я приведу более близкий пример.

myusers | CREATE TABLE `myusers` (
id int auto_increment not null primary key,
email varchar(100) COLLATE latin1_general_ci not null,
fullname varchar(75) COLLATE latin1_general_ci not null)
PRIMARY KEY('id')
) ENGINE=MyISAM AUTO_INCREMENET=2 DEFAULT CHARSET=latin1 COLLATE latin1_general_ci |

Выше представлена ​​структура таблицы. Вот вставки и выборки:

INSERT INTO myusers (fullname) VALUES ('Agüeda');
INSERT INTO myusers (fullname) VALUES ('Agueda');

SELECT * FROM myusers WHERE fullname = 'Agüeda' COLLATE latin1_general_ci 

+----+-------+----------+
| id | email | fullname |
+----+-------+----------+
|  1 |       | Agüeda   |
+----+-------+----------+
1 row in set (0.00 sec)

SELECT * FROM myusers WHERE fullname = 'agueda' COLLATE latin1_general_ci 

+----+-------+----------+
| id | email | fullname |
+----+-------+----------+
|  2 |       | Agueda   |
+----+-------+----------+
1 row in set (0.00 sec)

Очевидно, что желаемый результат - при поиске agueda возвращаются как «Agueda», так и «Agüeda», но это не так. Как я уже упоминал выше, я создал новый столбец и сохранил все имя английскими символами и также выполняю поиск оттуда. Но все же это стоит мне двухкратного поиска (потому что я также ищу из исходных столбцов, которые занимают более высокое место в результатах поиска). Должен быть способ получше ...

6
задан Shaokan 10 October 2011 в 10:20
поделиться