MySQL Toolkit

7 mars 2019

J’ai finalement fait mon premier vrai commit sur GitHub, MySQL Toolkit.  Ce repository, avec un peu de temps, deviendra une collection de scripts, de fonctions, de procédures stockées et d’un tas d’autres choses utiles lorsque vous travaillez avec MySQL.  Pour l’instant toutefois, il n’y a que des fonctions.

Ce premier commit comprend:

collapse_blanks : Replaces multiple blanks with a single space.
collapse_spaces : Replaces multiple spaces with a single space.
initcap : Returns a character string with the first letter of each word converted to uppercase. This function EXACTLY mimics INITCAP of Oracle.
occurrences : Returns the number of occurrences of a search string inside a source string.
rot5 : Encodes/decodes a string with the ROT5 substitution cipher.
rot13 : Encodes/decodes a string with the ROT13 substitution cipher.
rot18 : Encodes/decodes a string with the ROT18 substitution cipher.
rot47 :Encodes/decodes a string with the ROT47 substitution cipher.
shuffle : Randomly shuffle the characters of a string using the Fisher-Yates (aka Knuth shuffle) algorithm.
to_roman : Converts an integer to its Roman numeral representation.

En attendant mon prochain commit, laissez-moi savoir en commentaire s’il y a des fonctions que vous trouveriez utiles dans MySQL!

 

 

 


Compression et MySQL : la suite

27 février 2019

Voici la suite de l’article dont je parlais précédemment ici.


MySQL 5.7 vs MySQL 8.0

2 février 2019

Quelles sont les différences de performance entre les 2?  C’est tout expliqué ici.


Your ORM and SELECT FOR UPDATE

25 janvier 2019

Les ORM (Object-relational mapping), une solution magique?  Pas vraiment!  Voici pourquoi !


MySQL Partition pruning Explained

25 janvier 2019

Toutes les subtilités du partition pruning dans MySQL expliquées ici.


Les surprises de RAND() !

16 janvier 2019

Le fait que RAND() soit une fonction non-déterministe (nondeterministic) peut causer certaines surprises et certains problèmes.  Un aperçu ici!


Compression et MySQL

16 janvier 2019

La compression des données avec MySQL, est-ce performant?  Est-ce utile? Est-ce rapide?

La réponse dans cet excellent papier.


GRANT, REVOKE et MySQL 8.0

16 janvier 2019

Si vous comptez prochainement utiliser MySQL 8.0, vous devriez réviser tout ce que vous savez sur les droits d’accès, les commandes GRANT, REVOKE, CREATE USER et les rôles! Un excellent résumé ici.

 


collapseSpaces

20 novembre 2018

Besoin d’éliminer les espaces multiples pour les remplacer par un seul?  J’ai ce qu’il vous faut!

 

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='STRICT_TRANS_TABLES';
DROP FUNCTION IF EXISTS collapseSpaces;

DELIMITER //
CREATE FUNCTION collapseSpaces ( stringparam VARBINARY(255))
RETURNS VARBINARY(255)
DETERMINISTIC
LANGUAGE SQL
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'Returns a string with all spaces replaced/merged by/into a single space character'

BEGIN
DECLARE newString VARBINARY(255);
DECLARE hasChanged TINYINT UNSIGNED;
DECLARE oldLength TINYINT UNSIGNED;

SET hasChanged = 1;
SET newString = stringparam;
SET oldLength = CHAR_LENGTH(stringparam);

WHILE hasChanged DO
SET newString = REPLACE(newString, ' ', ' ');
SET hasChanged = (oldLength != CHAR_LENGTH(newString));
SET oldLength = CHAR_LENGTH(newString);
END WHILE;

RETURN newString;
END
//

DELIMITER ;
SET SQL_MODE=@OLD_SQL_MODE;


occurrencesOf

20 novembre 2018

Comment trouver le nombre d’occurrences d’une chaîne de caractères dans MySQL?  J’en avais déjà parlé ici en français et aussi en anglais.

Pour se faciliter la vie, rien de mieux qu’une fonction pour faire le travail!

 

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='STRICT_TRANS_TABLES';

DROP FUNCTION IF EXISTS occurrencesOf;

DELIMITER //
CREATE FUNCTION occurrencesOf ( sourceString VARBINARY(255), searchString VARBINARY(255))
RETURNS MEDIUMINT UNSIGNED
DETERMINISTIC
LANGUAGE SQL
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'Returns the number of occurrences of <searchString> inside <sourceString>'

BEGIN
DECLARE occ MEDIUMINT UNSIGNED;

SELECT FLOOR(( CHAR_LENGTH(sourceString) - CHAR_LENGTH(REPLACE(sourceString, searchString, '')) ) / (CHAR_LENGTH(searchString))) INTO occ;

RETURN occ;
END
//

DELIMITER ;
SET SQL_MODE=@OLD_SQL_MODE;

P.S.  J’ai l’intention de publier plusieurs fonctions utilitaires du genre.  D’ici à ce que je m’organise sur GitHub, je publierai le code de ces procédures et/ou fonctions ici en attendant!

Mise à jour (2019-03-07)