您的位置:首页 > 编程语言 > C语言/C++

MySQL与Transact SQL(MS SQL Server)的SQL语句区别点滴(C++)

2010-09-02 16:24 435 查看
最近在写一个数据访问层,要求能够使用MySQL和MS SQL Server。

烦劳从此开始,MySQL与MS SQL Server的大量不一致让人烦不胜烦,为了使其他人不再犯自己工作过程中犯下的错误,并且,有个地方记录自己的心得体会,特分享如下:

这里MySQL使用的是C API

MS SQL Server使用的是ADO

一.列类型问题

1.时间类型

真是不做不知道,做了才知道,MySQL存储日期时间的格式为:2010-09-02 15:01:01, 而MS SQL Server存储的日期时间格式为:2010-9-2 15:01:01

获取当前日期时间的日期时间函数,MySQL为NOW(),MS SQL Server为GetDate(),即:

MySQL:insert into(time) values(NOW());

MS SQL Server:insert into(time) values(GetDate());

MySQL中的相关函数为:

NOW()函数以`'YYYY-MM-DD HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。

CURDATE()以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。

CURTIME()以’HH:MM:SS’的格式返回当前的时间,可以直接存到TIME字段中。

2.二进制数组

存储二进制文件,SQL怎么写?

MySQL:insert into(binary) values('这里必须写经过mysql_real_escape_string转义后
的字符串,注意哦,左右可是有单引号的');

或者insert into(binary) values(0xABCDEF1234567890);

MS SQL Server:insert into(binary) values(0xABCDEF1234567890);

注意:0xABCDEF1234567890为经过转义后
的16进制串

当以上所有存储的数据取出后,结果直接为
转义前
的二进制字符串

如何将一个二进制字符串转化为0x......

long toX(char * pDst, long DstLen, const char * pSrc, long SrcLen)

{

if(NULL == pDst || NULL == pSrc)

{

return -1;

}

if(DstLen < 2*Src + 3)

{

return -1;

}

*pDst++ = '0';

*pDst++ = 'x';

const char tab[] = "0123456789ABCDEF";

for(int i=0;i<SrcLen;++i)

{

*pDst++ = tab[*pSrc>>4];

*pDst++ = tab[*pSrc&0x0F];

pSrc++;

}

*pDst = '/0';

return 2*Src + 3;

}

3.字符串

MySQL:insert into(binary) values('这里必须写经过mysql_real_escape_string转义后
的字符串,注意哦,左右可是有单引号的');

MS SQL Server:insert into(binary) values('这里直接写即可,但是,如果是特殊字符,需要记得数据库使用Unicode编码');

二.相关资源供查询

MySQL中文手册:http://dev.mysql.com/doc/refman/5.1/zh/index.html

MS SQL Server在MSDN上的资料:http://msdn.microsoft.com/zh-cn/library/ms203721%28v=sql.90%29.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: