SQL语法; 这是什么?

miq*_*bal 30 mysql sql

我导出的sql文件包含下面的行;

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
Run Code Online (Sandbox Code Playgroud)

与CREATE TABLE不同,这些行是什么意思?INSERT INTO?

Ale*_*aho 35

它们是变量赋值.分配包含在可执行注释中,使得它们在使用MySQL时执行,如果使用其他RDBMS则单独执行.此外,40101表示注释不保留在数据库中,即如果执行行,则仅在执行sql文件时执行.


小智 6

在检查了文档https://dev.mysql.com/doc/refman/8.0/en/comments.html之后,这些特殊评论总是让我感到困惑

如果您在 ! 之后添加版本号 字符,仅当 MySQL 版本大于或等于指定版本号时才执行注释内的语法。以下注释中的 KEY_BLOCK_SIZE 关键字仅由 MySQL 5.1.10 或更高版本的服务器执行:

创建表 t1(a INT, KEY (a)) /*!50110 KEY_BLOCK_SIZE=1024 */;

这并不难理解。就 50110 而言,意味着 5(major)01(minor)10(revision) = 在 MySQL 版本 >= 5.1.10 或更高版本中运行