我用
mysqlbinlog -f -v --base64-output=DECODE-ROWS mysql-bin.00001 > res.000001
我的表有一个列是varbinary。所以像这样res.000001
### UPDATE db.tbl
### WHERE
### @1=967540772
### @2='\x10\x00c\x01\x00%...'
### SET
### @1=967540772
### @2='\x10\x001\x00\x00,...'
我发现binlog会将不可见字符转换为十六进制(例如"\n", "\r"
),将直接打印普通字符(例如"%", "a"
)。有些不对劲。如果此列为"\x10"
,则binlog将输出"\x10"
(我们称之为案例1),如果此列是这些十六进制也是"0x10"
的字符,则binlog将输出"\x10"
TOO (我们称之为案例2)。所以我不能说出这些字符串之间的区别。
在案例1中,我认为binlog应该输出"\x10"
以逃避反斜杠。这是mysql binlog的错误吗?