• MySql学习之 Data Too long for column bit


    今天项目从SqlServer转移到了MySql,转移过程中发现了一些问题,以前没遇到过,在网上查了查,总算是解决了,但是问题的根源还弄明白,暂且记录下来:

    Mysql 对于bool类型,拼接sql语句时:(1)insert、update、select值两边不带引号(2)delete时值两边带引号

    insert into tb_test(ID,Name,IsSelected) values('111','old',false);

    update tb_test set Name='new',IsSelected=true where ID='111';

    首先有个tb_paymentmethod表,表中有几条数据如下:

    DAO层获取Model时这样:

    if (row["IsDefault"] != null && row["IsDefault"].ToString().Trim() != "")
    {
      model.IsDefault = Convert.ToBoolean(Convert.ToInt32(row["IsDefault"]));
    }

    IsDefault为bool型,在插入数据时Mysql默认给的值是 0(false)  和 1(true);

    因此导致下面的问题:

    /// <summary>
    /// 根据IsDefault获取,默认的、或非默认的实体集合List
    /// </summary>
    public static List<PaymentMethod> GetListByIsDefault(bool Value)
    {
      StringBuilder safesql = new StringBuilder();
      safesql.Append("select ID,Name,IsDeleted,IsDefault from tb_paymentmethod");
      safesql.Append(" where IsDefault=" + Value + " order by Name DESC");
      return GetListBySql(safesql.ToString());
    }

    以往我都是这样写的:='" + Value + "' order         在value两边带了引号,但是用了mysql后由于初始值变为了0/1,当传个bool value=true,进来时,查询永远得不到想要的结果,去掉引号就可以了,网上给出的说法是:true和false是保留值;

    那么问题又来了,我在做删除的时候:

    /// <summary>
    /// 根据名字和默认选项删除记录
    /// </summary>
    public static bool DeleteByName(string Name)
    {
      StringBuilder safesql = new StringBuilder();
      safesql.Append("delete from tb_paymentmethod ");
      safesql.Append("where Name=@Name and IsDefault='" + false + "'");
      MySqlParameter[] parameters = {
                        new MySqlParameter("@Name",Name)
                      };
      int rows = DBUtility.DbHelperMySQL.ExecuteSql(safesql.ToString(), parameters);
      if (rows > 0)
      {
        return true;
      }
      else
      {
        return false;
      }
    }

    删除的时候,我先是没有在false两边加单引号,结果删除出了问题,但是当我加上引号时,OK没问题。

    综上所述:对于Mysql的bit类型处理bool值时,由于true和false是保留值,查询时不加单引号,删除时要加(为什么?)。

  • 相关阅读:
    函数的逻辑读成零
    SQL逻辑读变成零
    体系结构中共享池研究
    执行计划基础 动态采样
    执行计划基础 统计信息
    识别低效率的SQL语句
    oracle 知识
    XPATH 带命名空间数据的读取
    ACTIVITI 研究代码 之 模版模式
    ACTIVITI 源码研究之命令模式执行
  • 原文地址:https://www.cnblogs.com/gnsds/p/3704077.html
Copyright © 2020-2023  润新知