zoukankan      html  css  js  c++  java
  • 【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语句中,如下:

    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"/>

      

        

      

      

  • 相关阅读:
    编程实现SQL Server备份和还原
    [推荐]asp.net string与color互换
    ASP.NET执行SQL超时的解决方案
    Starling 环形进度条实现
    [转]列举好游戏应具备的10个要素
    基于Starling的mask实现
    一直以来最头痛的问题:怎么样才能行之有效的解决游戏中后期枯燥的问题呢?求解
    [转]战棋系统的分析
    [转] java开源游戏
    设计模式(基础篇)软件设计七大设计原则(续一)
  • 原文地址:https://www.cnblogs.com/nonkicat/p/6346614.html
Copyright © 2011-2022 走看看