- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
В 2023 году Одноклассники пресекли более 9 млн подозрительных входов в учетные записи
И выявили более 7 млн подозрительных пользователей
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Нужна помощь!
Имеется таблица, данные хранятся в cp1251_general_ci.
Мне нужно сделать поиск по имени человека, причем так, чтобы буквы е и ё считались одинаковыми.
Сейчас есть пользователь с фамилией "Рублев", но если задать ее в запросе как "Рублёв" (нужно, чтобы они считались одинаковыми) - возвращает ноль рядов.
Промониторил СЕРП Гугла и попробовал так:
затем запросы на бд:
Результат - ноль рядов(((
Я вас уверяю, что UTF8 тут воооообще не при чём.
Имеется таблица, данные хранятся в cp1251_general_ci.
Все данные MySQL хранит в UTF-8. А то, о чём вы говорите, называется кодировка сопоставления. Что это такое, вы можете узнать из документации.
При работе с базой данных нужно использовать ту кодировку, в которой работает ваш сайт.
Т.е. если сайт в CP1251, то и при работе с базой нужно сделать
SET CHARACTER SET CP1251
И никаких iconv не нужно, база всё сделает сама.
Ну как? Объясните? Пока понял одну вещь - в utf буквы е и ё идут одинаковые.
Можно, конечно делать REGEXP-запрос, вроде:
но это же ни FULLTEXT-поиска в перспективе, ни других возможностей...
У меня задача - задать SELECT запрос, допустим, name="Ёлка" и получить 2 ряда, где 1) "Ёлка" и 2) "Елка". Это реально?
e_moon добавил 23.11.2011 в 16:46
;9698872']Все данные MySQL хранит в UTF-8. А то, о чём вы говорите, называется кодировка сопоставления. Что это такое, вы можете узнать из документации.
При работе с базой данных нужно использовать ту кодировку, в которой работает ваш сайт.
Т.е. если сайт в CP1251, то и при работе с базой нужно сделать
SET CHARACTER SET CP1251
И никаких iconv не нужно, база всё сделает сама.
Я ж говорю, что пытаюсь применить рекомендации которые удалось найти. Видимо чего-то не догоняю. У меня сейчас получается только буквальный поиск:
вернет одну запись с именем Рублёв.
вернет одну запись с именем Рублев.
А мне нужно одним запросом получить обе записи...
А... я сразу не воткнул :) Проблема в буквах "е" и "ё".
Это реально и у меня вот на тестовой таблице такой результат получается и при использовании сопоставления utf-8 и cp1251.
Т.е. на один запрос выдаёт 2 ряда.
А phpmyadmin поиск не работает?)
;9698919']А... я сразу не воткнул :) Проблема в буквах "е" и "ё".
Это реально и у меня вот на тестовой таблице такой результат получается и при использовании сопоставления utf-8 и cp1251.
Т.е. на один запрос выдаёт 2 ряда.
А как Вы этого добились? Т.е. какой у Вас предварительный запрос на SET NAMES и т.д?
e_moon добавил 23.11.2011 в 16:59
А phpmyadmin поиск не работает?)
В phpMyAdmin поиск работает точно так же - буквы е и ё считает разными.
А как Вы этого добились? Т.е. какой у Вас предварительный запрос на SET NAMES и т.д?
Сорри, я соврал.
Для каждого поля таблицы может быть указана своя кодировка сопоставления.
Если у поля name установлено сопоставление cp1251_general_ci, то выдаётся только одна строка с точным соответствием буквы, но если сопоставление установлено utf8_general_ci, то выдаются обе строки.
А при чём здесь кодировки?
Может просто SELECT * FROM register WHERE name="Рублёв" or name="Рублев"
А при чём здесь кодировки?
Может просто SELECT * FROM register WHERE name="Рублёв" or name="Рублев"
Тогда уж проще REGEXP. Мне нужно универсальный способ поиска, пример - это частный случай. В базе штук 1000 пользователей. Есть Фёдоров и т.п...
Для каждого поля таблицы может быть указана своя кодировка сопоставления.
Если у поля name установлено сопоставление cp1251_general_ci, то выдаётся только одна строка с точным соответствием буквы, но если сопоставление установлено utf8_general_ci, то выдаются обе строки.
Попробую покопать в этом направлении. Наверняка можно в запросе динамически менять сопоставление. Или временную таблицу пробовать создавать. Что-то должно же быть!
Попробую покопать в этом направлении. Наверняка можно в запросе динамически менять сопоставление. Или временную таблицу пробовать создавать. Что-то должно же быть!
Так просто поменяйте на таблице кодировку сопоставления на utf8_general_ci и всё.
Динамически её менять смысла нет, т.к. в зависимости от неё перестраивается индекс.