【SQL】 MySql与SqlServer差异比较(MySql踩坑全集)
2017-01-24 10:48
501 查看
本文主要记录将数据库从SqlServer移植到MySql的过程中,发现的各种坑爹问题。以SqlServer为主,记录MySql的差异性。
一.IF语句
首先MySql中的的IF语法不同。
其次,MySql中的IF语句,只能在存储过程或函数中执行,不能直接在查询中执行。(坑爹!!!)
二.变量与参数名称
1.存储过程中传入的参数必须要和查询的表中的字段不一样,否则会导致查询错误。
比如传入一个命名为userid的参数,在存储过程中查询:
查询的结果是将所有的user都给查询出来,而不是查询出指定的user。原因是条件语句:userid = userid ,mysql无法区分哪个是字段哪个是条件。
2.存储过程中变量名称同样不能和查询的表中的字段一样,原因同上。(坑爹!!!!)
三.SELECT子查询
在select子查询时,子查询语句中join关联时,不能用直接使用父表字段。
上述语句无法执行成功,原因在于红色标红的条件。
必须将关联父表的条件写在Where语句中,如下:
四.存储过程参数中文乱码
在使用存储过程中发现,如果存储过程的参数包含有中文,传到数据库时会变成乱码。
首先在数据库方面保证编码一致性。
1.数据库编码为UTF8
2.存储过程参数后面需设定编码格式:如 carnump VARCHAR(100) character set utf8
3.表字段的编码格式也需设定为UTF8
其次,在使用C#驱动调用存储过程的时候,数据库链接中需要明确编码格式,否则默认编码为:GB123
一.IF语句
首先MySql中的的IF语法不同。
IF Condition THEN -- todo ELSE IF Condition THEN -- todo ELSE -- todo END IF;
其次,MySql中的IF语句,只能在存储过程或函数中执行,不能直接在查询中执行。(坑爹!!!)
二.变量与参数名称
1.存储过程中传入的参数必须要和查询的表中的字段不一样,否则会导致查询错误。
比如传入一个命名为userid的参数,在存储过程中查询:
select * from user where userid = userid
查询的结果是将所有的user都给查询出来,而不是查询出指定的user。原因是条件语句:userid = userid ,mysql无法区分哪个是字段哪个是条件。
2.存储过程中变量名称同样不能和查询的表中的字段一样,原因同上。(坑爹!!!!)
三.SELECT子查询
在select子查询时,子查询语句中join关联时,不能用直接使用父表字段。
select ( SELECT COUNT(y.ID) FROM y INNER JOIN e ON e.AId = y.Id and e.Code =a.Code ) as carcount from a;
上述语句无法执行成功,原因在于红色标红的条件。
必须将关联父表的条件写在Where语句中,如下:
select ( SELECT COUNT(y.ID) FROM y INNER JOIN e ON e.AId = y.Id where e.Code =a.Code ) as carcount from a;
四.存储过程参数中文乱码
在使用存储过程中发现,如果存储过程的参数包含有中文,传到数据库时会变成乱码。
首先在数据库方面保证编码一致性。
1.数据库编码为UTF8
2.存储过程参数后面需设定编码格式:如 carnump VARCHAR(100) character set utf8
3.表字段的编码格式也需设定为UTF8
其次,在使用C#驱动调用存储过程的时候,数据库链接中需要明确编码格式,否则默认编码为:GB123
<add key="sqlConnectionString" value="Server=127.0.0.0.1;Port=3306;Charset=utf8;Uid=root;Pwd=123456;DataBase=TestDB"/>
相关文章推荐
- MySQL与Oracle SQL语言差异比较
- MySQL与Oracle SQL语言差异比较
- MySQL与Oracle SQL语言差异比较一览
- mysql和sql时间 字段比较大小的问题
- Sqlserver与access数据库sql语法十大差异
- sql 比较两数据库结构的差异
- [SQL] SQLServer Transact SQL全集--很实用
- MySQL和DB2建表SQL差异
- 主流数据库复制表结构(SqlServer/Mysql/Oracle/Sybase)[语法差异分析]
- access与SqlServer 之时间与日期及其它SQL语句比较
- Sqlserver与access数据库sql语法十大差异
- 分析Sqlserver与access数据库sql语法的10大差异
- 随机抽取n个记录的SQL(mysql和sqlserver)
- 一些Access与Sqlserver的sql的差异
- 为了初始化数据写了个sql,放入oracle中居然执行了40分钟,在sqlserver和mysql中居然几秒就完事了。
- mysql, sqlserver 2005 express, oracle xe轻量级免费数据库比较
- 记下一条使用SQLServer 2000 T-SQL中日期函数比较多的一个SQL语句
- access与SqlServer 之时间与日期及其它SQL语句比较
- access与SqlServer 之SQL语句比较
- ORACLE、SQLSERVER、MYSQL与DB2的比较