fans_wei 2015-01-15 09:34 采纳率: 30%
浏览 869

MySQL二进制日志使用遇到的编码问题

以下是MySQL的二进制日志数据,其中
问题1:日志中/*!\C binary //!*/; 和 /*!\C utf8 //!*/;是什么作用?

使用场景:
解析二进制日志,存储到数据库中
再调取出来执行到别一个数据库

问题2:
存储SQL的时候会出现乱码,如
alter table lezhi_app.tmp
change etid etid int(11) NOT NULL comment '编号'
其中“编号”就成乱码了,SQl调取出来执行的时候就会报错,无法执行?(数据库默认使用了set names gbk,不使用set names的话也是乱码)

解决方案:
解析 /*!\C utf8 //!*/ 中的utf8,加上set names utf8 后,可以正常存储执行

问题2:
很多SQL是在 /*!\C binary //!*/; 下面
执行 set names binary 后,有部分中文SQL存储出现乱码(存储出现 ???)。
(我们数据编码用的是GBK)

 COMMIT
/*!*/;
# at 87931309
#150108 20:08:13 server id 5  end_log_pos 87931465     Query    thread_id=2649685    exec_time=0    error_code=0
use `lezhi_app`/*!*/;
SET TIMESTAMP=1420718893/*!*/;
<span style="color: #FF0000;">/*!\C utf8 *//*!*/;</span>
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;
alter table `lezhi_app`.`tmp` 
   change `etid` `etid` int(11) NOT NULL comment '编号'
/*!*/;
# at 87931465
#150108 20:08:13 server id 5  end_log_pos 87931529     Query    thread_id=2649874    exec_time=0    error_code=0
SET TIMESTAMP=1420718893/*!*/;
<span style="color: #FF0000;">/*!\C binary *//*!*/;</span>
SET @@session.character_set_client=63,@@session.collation_connection=28,@@session.collation_server=8/*!*/;
BEGIN
/*!*/;
# at 87931529

数据库编码是这样的:

图片说明

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 对于相关问题的求解与代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
    • ¥15 保护模式-系统加载-段寄存器
    • ¥15 电脑桌面设定一个区域禁止鼠标操作