fans_wei 2015-01-15 01:34 采纳率: 0%
浏览 871

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

数据库编码是这样的:

图片说明

展开全部

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 22:47
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在MySQL中,二进制日志文件用于记录MySQL服务器的所有操作和事务。这些记录通常包含以下字段:

    1. 日志类型(例如,"Query", "Change"等)
    2. SQL语句及其参数
    3. 操作时间戳
    4. 错误代码(如果有的话)
    5. 状态代码(如果有的话)

    第一个问题:“/*!\C binary /!/;”

    这个格式表示MySQL正在读取UTF-8字符集中的文本,并将其转换为系统使用的字符集。这通常用于处理非标准或特殊字符时。

    第二个问题:

    1. 乱码出现在存储SQL语句时。
    2. 当设置字符集为"binary"时,可能会导致存储错误,因为"binary"字符集不支持某些编码的字符串。
    3. 解决方案包括设置正确的字符集来存储和解析SQL语句。

    示例代码

    -- 假设我们需要将一段带有乱码的SQL插入数据库
    INSERT INTO your_table (your_column)
    SELECT 'SELECT /*!\C binary */!*/;' FROM your_source;
    
    -- 查询插入的SQL语句
    SELECT * FROM inserted_sql;
    

    在这个示例中,我们将SQL插入到一个表中,然后查询它以获取实际插入的SQL语句。

    注意:确保你的源数据和目标数据具有相同的字符集,或者使用合适的字符串转义方法(如\\uXXXX\\UXXXXXXXX)。

    评论
    编辑
    预览

    报告相同问题?

    手机看
    程序员都在用的中文IT技术交流社区

    程序员都在用的中文IT技术交流社区

    专业的中文 IT 技术社区,与千万技术人共成长

    专业的中文 IT 技术社区,与千万技术人共成长

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    客服 返回
    顶部