【SQL】 MySql与SqlServer差异比较(MySql踩坑全集)

本文主要记录将数据库从SqlServer移植到MySql的过程中,发现的各种坑爹问题。以SqlServer为主,记录MySql的差异性。

 

一.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语句中,如下:

1
2
3
4
5
6
7
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"/>

 

  

    

  

  

posted @   のんきネコ  阅读(683)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2013-01-24 B*寻路算法与A*算法比较
点击右上角即可分享
微信分享提示