En appelant MySQL SELECT @@VERSION; ou SELECT VERSION();, j'obtiens par exemple '5.7.11-log'. Existe-t-il un moyen "bien connu" de vérifier si la version est supérieure (ou inférieure) à une version major.minor.patch ? Si ce n'est pas un moyen bien connu, y a-t-il un moyen sans utiliser une table temporaire ou une fonction définie par l'utilisateur (il y en a probablement, mais pour une raison ou une autre m'échappe actuellement)? Je l'utiliserais pour vérifier s'il existe une prise en charge du type JSON type qui a été introduit dans la version 5.7.8 .

En recherchant davantage, il semble que ce soit un écrou un peu plus difficile à craquer pour mes compétences. Par exemple, je pourrais écrire quelque chose comme

SELECT
    SUBSTRING_INDEX(@@VERSION, '.', 1) AS major, 
    SUBSTRING_INDEX(SUBSTRING_INDEX(@@VERSION,'.', 2), '.', -1) AS minor, 
    SUBSTRING_INDEX(SUBSTRING_INDEX(@@VERSION,'.', -2), '.', -1) AS patch;

Mais ce n'est pas entièrement satisfaisant (par exemple, voir -log) et cela ne vérifie pas directement l'existence de la fonctionnalité.

J'ai posté ceci sur le débordement DBA Comment faire vérifier si la fonctionnalité (JSON) existe et / ou la version.

1
Veksi 16 janv. 2017 à 14:59

2 réponses

Meilleure réponse

Je ferai référence à la réponse de Rick ici. Plus précisément, il existe une syntaxe spéciale de commentaires dans MySQL dans laquelle MySQL interprète un bloc de code soit comme un SQL MySQL efficace, soit comme une simple section de commentaires. Voici un lien vers la documentation: http://dev.mysql.com /doc/refman/5.7/en/comments.html et quelques exemples notables:

SELECT /*!JSON_TYPE*/('["a", "b", 1]');

Et

/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;.

0
Community 13 avril 2017 à 12:42

Utiliser la condition if avec la version

mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.7.14    |
+-----------+
1 row in set (0.00 sec)

mysql> select if(VERSION() > '5.7.14' ,1,0);
+-------------------------------+
| if(VERSION() > '5.7.14' ,1,0) |
+-------------------------------+
|                             0 |
+-------------------------------+
1 row in set (0.00 sec)

mysql> select if(VERSION() > '5.7.13' ,1,0);
+-------------------------------+
| if(VERSION() > '5.7.13' ,1,0) |
+-------------------------------+
|                             1 |
+-------------------------------+
1 row in set (0.00 sec)
0
Mahesh Madushanka 16 janv. 2017 à 12:03