SQL语法;这是什么?

时间:2011-06-07 13:27:13

标签: 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 */;

与CREATE TABLE不同,这些行的含义是什么?INSERT INTO?

4 个答案:

答案 0 :(得分:33)

他们是variable assignments。分配是wrapped in executable comments,使得它们在使用MySQL时执行,如果使用其他RDBMS则单独执行。此外,40101表示注释不保留在数据库中,即如果执行行,则仅在执行sql文件时执行它们。

答案 1 :(得分:2)

这是条件注释中包含的变量赋值。代码的执行取决于相关MySQL的版本,请参阅comments

答案 2 :(得分:0)

这些行是评论。 SQL注释可以从--开始直到行结束,或者可以被/* ... */

包围

我认为这些行与导出的sql文件的文件编码有关。

答案 3 :(得分:0)

在检查文档https://dev.mysql.com/doc/refman/8.0/en/comments.html

之后,那些特别的评论总是使我感到困惑。
  

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

     

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

这并不难理解。用50110表示5(主要)01(次要)10(修订)=在MySQL版本> = 5.1.10或更高版本中运行