我导出的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?
答案 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或更高版本中运行