我用
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"
(我们称之为 case 1),如果这一列是这些 hex 也是 的字符"0x10"
,binlog 会输出"\x10"
TOO(我们称之为 case 2)。所以我不能谈论这些字符串之间的区别。
在情况 1 中,我认为 binlog 应该输出"\x10"
以转义反斜杠。这是mysql binlog的bug吗?