Получил ошибку «нечего повторять по смещению 1» из регулярного выражения - PullRequest
0 голосов
/ 27 июня 2019

Я использую php для отправки и получения данных из базы данных MySQL мой запрос

SELECT 
 *
FROM (

  SELECT 
   *
  FROM
   test
  WHERE
   MATCH(word) AGAINST('+hello ')      
) AS fulltext_scan
WHERE 
 fulltext_scan.word REGEXP '^hello '

когда я ищу английское слово, оно работает хорошо но когда я ищу шведское (ä, ö, å) слово, я получаю эту ошибку

Got error 'nothing to repeat at offset 1' from regexp

У меня есть array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'") в моем соединении и header('Content-Type: text/html; charset=utf-8');

когда я тестирую запрос напрямую из phpmyadmin, он работает хорошо даже со шведскими словами

Я хочу использовать AS для сортировки как

SELECT  pages.*, MATCH (head, body) AGAINST ('some words') AS
      AND  column REGEXP '^hello ' relevance,
        MATCH (head) AGAINST ('some words') AS title_relevance
    FROM  pages
    WHERE  MATCH (head, body) AGAINST ('some words')
    ORDER BY  title_relevance DESC, relevance DESC

чтобы получить {привет} первым

как я могу это исправить на своей странице php?

1 Ответ

0 голосов
/ 28 июня 2019

Какова цель?Чтобы узнать, начинается ли word с ögon? Эта задача может быть очень эффективно выполнена с

WHERE word LIKE 'ögon %';

вместе с INDEX(word), при условии, что это VARCHAR, а не TEXT.

Пожалуйстапредоставить SHOW CREATE TABLE test.Могут быть проблемы с CHARACTER SET.

Что вы получаете с SELECT HEX(word) ...?Если вы правильно используете utf8 / utf8mb4, должно отображаться C3B6 67 6F 6E (без пробелов).

Если вы не используете MySQL 8.0, не ожидайте, что REGEXP правильно поймет буквы с акцентом.

Возможно, нет необходимости в дополнительных SELECT;просто сделайте

SELECT ...
    WHERE MATCH(word) AGAINST(...)
      AND word LIKE ...

Сначала произойдет MATCH, затем LIKE проверит несколько строк, которые MATCHed.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...