Dans le cadre d’un petit développement, je devais générer une séquence aléatoire hexadécimale stockée sous la forme d’une chaîne de caractère dans une base MySQL.
L’ensemble des chiffres hexadécimaux à utiliser était ’0′-’9′, ‘a’-'f’ (minuscules).
La longueur de la chaîne pouvait être arbitrairement longue. Afin d’avoir une longueur finie, elle a été fixée à 256 caractères au maximum.
J’ai décidé de faire une fonction MySQL pour générer cette chaîne directement depuis le moteur de base de données.
For a small personal development, I had to generate a random hexadecimal sequence stored as a string in a MySQL database.
The set of hexadecimal digits to be used was ’0′-’9′ and ‘a’-'f’ (lower case).
The string may have an arbitrary long length. It was fixed to a maximum of 256 characters.
I decided to code it as a MySQL function, in order to be directly executed from the DB engine.
delimiter | CREATE FUNCTION randomHexSequence(_length INT) RETURNS VARCHAR(256) BEGIN SET @hexSet := '0123456789abcdef'; SET @hexStr := ''; SET @i := 0; WHILE @i < _length DO SET @car := SUBSTRING(@hexSet, ROUND(RAND() * 15) + 1, 1); SET @hexStr := CONCAT(@hexStr, @car); SET @i := @i + 1; END WHILE; RETURN @hexStr; END| delimiter ;
Je ne détaille pas le fonctionnement de la fonction, cette dernière étant très simple.
Je souhaite néanmoins rappeller que cette fonction sera exécutée par le moteur de base de données. S’il est souhaité d’optimiser au maximum les performances de la base de données, il faut bien réfléchir si une fonction de ce type doit être réalisée sur le serveur de base de données ou sur le serveur applicatif. Si cette fonction doit être appelée souvent – et à plus forte raison, si elle doit générer de longues chaînes hexadécimales – il peut être préférable de laisser l’application réaliser cette tâche.
I don’t explain how the function works, as it is a simple code.
I would like to remind that this function will be executed by the DB engine. If it is expected to optimize the DB performance, it must be seriously considered if this function is better run on the DB system or on the application one. If this function has to be frequently called – and even worse if it has to generate long hexadecimal strings – it could be better to let the application perform this task.


