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

phpboy 2015-01-08 08:48:18
以下是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/*!*/;
/*!\C utf8 *//*!*/;
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/*!*/;
/*!\C binary *//*!*/;
SET @@session.character_set_client=63,@@session.collation_connection=28,@@session.collation_server=8/*!*/;
BEGIN
/*!*/;
# at 87931529


数据库编码是这样的:
...全文
177 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

56,940

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧