如果我有一个带有TINYINT(1)
列的表,并使用DataReader选择此列,则MySQL会创建一个布尔列。
var query = "SELECT column FROM table";
using (var reader = ExecuteReader(query))
{
var schemaTable = reader.GetSchemaTable();
var row = schemaTable.DefaultView[0];
Assert.AreEqual(typeof(bool), row["DataType"]);
}
但是,如果我的查询不起作用。
var query = "SELECT false";
using (var reader = ExecuteReader(query))
{
var schemaTable = reader.GetSchemaTable();
var row = schemaTable.DefaultView[0];
Assert.AreEqual(typeof(bool), row["DataType"]);
}
此测试失败,因为DataType是System.Int64
是否可以强制查询返回TINYINT(1)值?在大图中我让实体框架生成我的模型,我有一些布尔列创建为System.Int64的视图,我想这可以解决问题。
答案 0 :(得分:0)
您是否尝试过使用CONVERT或CAST?
var query = "SELECT CONVERT(0,TINYINT(1))"
var query = "SELECT CAST(0 AS TINYINT(1))"
编辑:这似乎是MySQL中CAST / CONVERT函数的限制。建议的解决方案是创建一个执行转换的函数
CREATE FUNCTION x_cast_to_tinyint(number bigint) RETURNS tinyint
BEGIN return number;
END
然后调用函数
select x_cast_to_tinyint(d.tiny_int*1) as tiny