2017-01-16 3 views
1

При вызове MySQL SELECT @@VERSION; или SELECT VERSION();, я получаю, например, '5.7.11-log'. Есть ли «известный» способ проверить, больше ли версия (или меньше), чем версия major.minor.patch? Если это не общеизвестный способ, существует ли способ без использования временной таблицы или пользовательской функции (вероятно, есть, но по той или иной причине в настоящее время ускользает от меня)? Я использовал бы это, чтобы проверить, есть ли поддержка для JSON type типа, которая была введена в версии 5.7.8.Как проверить версию больше чем базовое значение?

При изучении этого больше, кажется, это немного более жесткий гайка, чтобы мои навыки взломались. Например, я мог бы написать что-то вроде

 
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; 

, но это не вполне удовлетворительным (например, см -log) и не непосредственно проверить существование функции.

Я перекрестился с этим переполнением DBA How to check if feature (JSON) exists, and/or version.

ответ

0

Я перекрестная ссылка на answer by Rick here. В частности, в MySQL существует специальный синтаксис комментариев, в котором MySQL интерпретирует блок кода как эффективный MySQL SQL или как просто раздел комментариев. Вот ссылка на документацию: http://dev.mysql.com/doc/refman/5.7/en/comments.html и несколько примечательных примеров:

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

и

/*!40103 SET @[email protected]@TIME_ZONE */;.

0

используется, если это условие с версии

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

Хм, это выглядит как 'if ('5.10.8'> '5.7.8', 1, 0) AS Version;' будет одним примером-экземпляром, где выражение должно оцениваться как true и выбрать '1'. Вместо этого выбирается «0». – Veksi

Смежные вопросы