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
烦劳从此开始,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
相关文章推荐
- MySQL / SQL Server / Oracle / MS Access的sql语句联系区别总结
- MySQL / SQL Server / Oracle / MS Access的sql语句联系区别总结
- MS SQL Server和MySQL区别
- MS SQL Server和MySQL区别
- MS SQL Server,Oracle 和 MySQL 有哪些区别
- MS SQL Server和MySQL区别
- MS SQL Server 和 MySQL的区别
- MS SQL Server和MySQL区别
- (MS SQL Server)SQL语句导入导出大全
- 简单的SQL Server语句转换为Mysql。
- MS SQL Server将数据导出Insert语句的几种方案
- sqlserver&amp;&amp;mysql分页sql语句总结
- MS SQLserver mysql
- SQL语句select随机调取10行数据 Access/SQL Server/Mysql等数据库
- (MS SQL Server)SQL语句导入导出大全
- MySQL、SQL Server 、 Oracle、Access的sql语句区别
- MYSQL和MS SQL SERVER对比分析表
- 数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)
- MySQL 5.5 m2 VS MS Sql Server 2000 SE BenchMark
- MS SQLServer 操作XML语句的存储过程