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

      

        

      

      

  • 相关阅读:
    POJ 2923 Relocation (状态压缩,01背包)
    HDU 2126 Buy the souvenirs (01背包,输出方案数)
    hdu 2639 Bone Collector II (01背包,求第k优解)
    UVA 562 Dividing coins (01背包)
    POJ 3437 Tree Grafting
    Light OJ 1095 Arrange the Numbers(容斥)
    BZOJ 1560 火星藏宝图(DP)
    POJ 3675 Telescope
    POJ 2986 A Triangle and a Circle
    BZOJ 1040 骑士
  • 原文地址:https://www.cnblogs.com/nonkicat/p/6346614.html
Copyright © 2011-2022 走看看