Texthanteringsförmågan i MySQL är inte tillräckligt bra för vad du vill ha. En lagrad funktion är ett alternativ, men kommer förmodligen att vara långsam. Det bästa sättet att bearbeta data i MySQL är att lägga till en användardefinierad funktion . Om du ändå ska bygga en nyare version av MySQL kan du också lägga till en inbyggd funktion .
Det "korrekta" sättet är att bearbeta data utanför DB eftersom DB:er är för lagring, inte bearbetning, och all tung bearbetning kan belasta DBMS för mycket. Att beräkna antalet ord utanför MySQL gör det dessutom lättare att ändra definitionen av vad som räknas som ett ord. Vad sägs om att lagra ordantalet i databasen och uppdatera det när ett dokument ändras?
Exempel på lagrad funktion:
DELIMITER $$
CREATE FUNCTION wordcount(str LONGTEXT)
RETURNS INT
DETERMINISTIC
SQL SECURITY INVOKER
NO SQL
BEGIN
DECLARE wordCnt, idx, maxIdx INT DEFAULT 0;
DECLARE currChar, prevChar BOOL DEFAULT 0;
SET maxIdx=char_length(str);
SET idx = 1;
WHILE idx <= maxIdx DO
SET currChar=SUBSTRING(str, idx, 1) RLIKE '[[:alnum:]]';
IF NOT prevChar AND currChar THEN
SET wordCnt=wordCnt+1;
END IF;
SET prevChar=currChar;
SET idx=idx+1;
END WHILE;
RETURN wordCnt;
END
$$
DELIMITER ;