Filtrage efficace des caractères dans les chaînes MySQL
Lors de la comparaison des chaînes pour des raisons d'efficacité, il est crucial d'éliminer les caractères non alphanumériques. Au lieu d'utiliser plusieurs fonctions REPLACE, envisagez d'utiliser des solutions alternatives.
MySQL 8.0 et versions ultérieures
MySQL 8.0 prend en charge le remplacement d'expressions régulières, vous permettant de remplacer les caractères non alphanumériques par une chaîne vide :
UPDATE {table} SET {column} = REGEXP_REPLACE({column}, '[^0-9a-zÀ-ÿ ]', '')
MySQL 5.7 et Ci-dessous
Comme les expressions régulières ne sont pas prises en charge dans MySQL 5.7, vous pouvez créer une fonction personnalisée telle que la suivante :
DROP FUNCTION IF EXISTS alphanum; DELIMITER | CREATE FUNCTION alphanum( str CHAR(255) ) RETURNS CHAR(255) DETERMINISTIC BEGIN DECLARE i, len SMALLINT DEFAULT 1; DECLARE ret CHAR(255) DEFAULT ''; DECLARE c CHAR(1); IF str IS NOT NULL THEN SET len = CHAR_LENGTH( str ); REPEAT BEGIN SET c = MID( str, i, 1 ); IF c REGEXP '[[:alnum:]]' THEN SET ret=CONCAT(ret,c); END IF; SET i = i + 1; END; UNTIL i > len END REPEAT; ELSE SET ret=''; END IF; RETURN ret; END | DELIMITER ;
En utilisant cette fonction, vous pouvez effectuer un filtrage de caractères comme suit :
select 'This works finally!', alphanum('This works finally!');
Sortie :
+---------------------+---------------------------------+ | This works finally! | alphanum('This works finally!') | +---------------------+---------------------------------+ | This works finally! | Thisworksfinally | +---------------------+---------------------------------+
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!