现在的位置: 首页 > 综合 > 正文

复习mysql的c编程

2014年03月09日 ⁄ 综合 ⁄ 共 784字 ⁄ 字号 评论关闭

 

    06年上半年负责IM项目的时候就搞过很是一段时间嵌入式mysql, 那个时候被温瑞云老是打击我,

比如代码不够美型,老是数据库嵌入c的时候,怎么美观之类问题纠结我。(那个时候总是鄙视

在oracle中用sql写单元测试的历史)。也很是纠结mysql内部的数据类型如此奇怪。

    今天又遇到需要和数据库打交道。记一下笔记:

    1、只有sb才会在需要中文的场合建gbk编码的表

    2、中文必须用utf8来存,这个时候c-api在建立连接的时候,需要配置为utf8

    3、在建立连接的时候最好关闭自动提交事务。

    4、在建立连接时候需要配置,让数据库自动重连。

    5、在建立连接的时候需要配置支持多行语句。

    6、每一句语句后面都自动提交的话,性能最多会慢100倍。

    7、若干条语句后提交一次,其实和自己写sql执行队列按照策略,拼接成多行数据库语句的性能是一模一样。

    8、可以的话,必须要求自己写sql执行队列。这样更灵活,比如做持久化的需求。

    9、包装MYSQL指针的时候尽量避免对该资源上锁,应该post的同一线程来操作数据库。上锁的话,

    在压力测试出现过一个问题,异步io的多次调用,导致同一个线程的定时器得不到cpu时间。而独立线程

    的定时器又由于锁也得不到资源。虽然不是问题,因为可以在每次执行语句的时间检查连接。可是其他类

    似的场合也会有类似的问题。

    10、看到网上好多好多的代码几乎没有看mysql的c文档,居然直接用返回值来检查错误状态。

    其实mysql的c函数基本的形式是,返回0,代表成功,返回非0,代表不成功。然后mysql_errno才是真正的最

    最近一个的错误。

    11、包装接口要考虑: 1)是否语句中含有/0之流的情况; 2)是否需要存blob。

 

    好久没用的东西不能不用,不用就忘记了。

 

抱歉!评论已关闭.