L'excellente réponse de Vincent pour les majuscules Premier Letter fonctionne très bien pour la première lettre uniquement capitalisation d'une chaîne de colonnes entière..
Mais que faire si vous voulez mettre en majuscule la première lettre de CHAQUE mot ? dans les chaînes d'une colonne de tableau ?
ex : "Lycée d'Abbeville"
Je n'avais pas trouvé de réponse à cette question dans Stackoverflow. J'ai dû bricoler quelques réponses que j'ai trouvées sur Google pour fournir une solution solide à l'exemple ci-dessus. Il ne s'agit pas d'une fonction native mais d'une fonction créée par l'utilisateur que MySQL version 5+ autorise.
Si vous avez le statut d'utilisateur Super/Admin sur MySQL ou si vous avez une installation mysql locale sur votre propre ordinateur, vous pouvez créer une FONCTION (comme une procédure stockée) qui se trouve dans votre base de données et peut être utilisée dans toutes les futures requêtes SQL sur n'importe quelle partie de la base de données.
La fonction que j'ai créée me permet d'utiliser cette nouvelle fonction que j'ai appelée "UC_Words" tout comme les fonctions natives intégrées de MySQL afin de pouvoir mettre à jour une colonne complète comme ceci :
UPDATE Table_name
SET column_name = UC_Words(column_name)
Pour insérer le code de la fonction, j'ai modifié le délimiteur standard MySQL ( ;) pendant la création de la fonction, puis je l'ai remis à la normale après la création de la fonction script. Personnellement, je voulais aussi que la sortie soit en CHARSET UTF8.
Création de fonctions =
DELIMITER ||
CREATE FUNCTION `UC_Words`( str VARCHAR(255) ) RETURNS VARCHAR(255) CHARSET utf8 DETERMINISTIC
BEGIN
DECLARE c CHAR(1);
DECLARE s VARCHAR(255);
DECLARE i INT DEFAULT 1;
DECLARE bool INT DEFAULT 1;
DECLARE punct CHAR(17) DEFAULT ' ()[]{},.-_!@;:?/';
SET s = LCASE( str );
WHILE i < LENGTH( str ) DO
BEGIN
SET c = SUBSTRING( s, i, 1 );
IF LOCATE( c, punct ) > 0 THEN
SET bool = 1;
ELSEIF bool=1 THEN
BEGIN
IF c >= 'a' AND c <= 'z' THEN
BEGIN
SET s = CONCAT(LEFT(s,i-1),UCASE(c),SUBSTRING(s,i+1));
SET bool = 0;
END;
ELSEIF c >= '0' AND c <= '9' THEN
SET bool = 0;
END IF;
END;
END IF;
SET i = i+1;
END;
END WHILE;
RETURN s;
END ||
DELIMITER ;
Cela fonctionne très bien pour sortir les premières lettres en majuscules de plusieurs mots dans une chaîne.
En supposant que votre nom d'utilisateur de connexion MySQL dispose de privilèges suffisants - si ce n'est pas le cas et que vous ne pouvez pas créer une base de données temporaire sur votre machine personnelle pour convertir vos tables, demandez à votre fournisseur d'hébergement mutualisé s'il peut mettre en place cette fonction pour vous.