MySQL转储文件和注释行

25

我在一个MySQL的.sql文件(通过phpMyAdmin导出)的顶部有以下这些行:

/*!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 */;

但是它们似乎都被注释掉了,那么当文件重新加载到数据库时,MySQL会忽略它们吗?如果是这样的话,为什么要生成这些行呢?

2个回答

37

这些是针对特定版本的MySQL的条件注释。

来自这里这里

  • MySQL 版本特定的注释以 /*! 开始
  • 并以 */ 结束
  • 版本号始终为 5 位数字
  • 版本号格式为主要发布号、次要发布号、修订号,其中主号是1位数,次要和修订号使用0左填充2位数
  • 版本特定注释将针对等于或高于所列版本号的任何版本

@Unicron,这可能并不总是针对特定版本的,因为我尝试使用mysql视图转储文件,该视图被定义为注释掉的,与mysql版本无关。 - pahnin

8
MySQL将解析和执行这些代码行,我相信是为了本地化和字符编码等问题,因为注释以/*!(带有感叹号)开头,而不仅仅是C样式的/*
类似于条件注释和Internet Explorer,其他浏览器会将<!--[if IE]><![endif]-->视为普通的HTML注释,但IE会识别此特殊注释并根据需要进行解析。同样,/*! */对其他SQL DBMS来说就像任何其他注释一样,但对于MySQL来说是特殊的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接