日期:2014-05-16  浏览次数:20766 次

与MySQL的注释、Query_cache有关的一个bug

今天有同学问了一个关于注释的问题,顺藤摸瓜发现一个bug,简要说明下。

有关注释的一些QA

Q MySQL注释有哪些格式

AMySQL的注释格式有三种,分别是 /**/ -- #。具体参见手册

????????

Q:在一些导出文件中见过/*! xxx*/,是不是注释?

A:? 需要注意的是/*! */ 这种格式,对于MySQL来说不是注释,是能够直接执行的。同时这个格式还支持指定版本号,比如/*!50518 xxxx*/ 表示,若server端版本大于5518,则后续的xxxx作为语句的一部分执行,否则忽略。

?

Q:语句中的注释会不会发给server

A:默认是不会的。一种方法是在mysql连接中加-c (--comments)参数,则会强制将注释部分也发给Server端。 另一种方法与上一条答案有关,指定一个超过server端的版本号。如果比如指定 /*!121221 xxxx*/,也可以发给server

?

Q: 慢查询日志会不会记录注释部分

A: 慢查询会记录语句原文,如果用上面说到的两种方法将注释发给server,若记录到慢查询日志中,就会显示。(也许可以用这种方法来加入语句来源,做业务慢查询分析)

?? 不只是慢查询,如果使用statement格式的binlog,注释部分也会写入到binlog中。

?