十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
以mysql数据库为例,判断类型应该用tinyint类型。
永顺网站建设公司创新互联,永顺网站设计制作,有大型网站制作公司丰富经验。已为永顺上1000家提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的永顺做网站的公司定做!
解释:
mysql是不支持布尔类型的,当把一个数据设置成布尔类型的时候,数据库会自动转换成tinyint(1)的数据类型,其实这个就是变相的布尔。
工具:mysql
5.6
步骤:
1、创建表:
create table test
(id int,
col varchar(10),
if_true tinyint(1))2、插入数据:
insert into test values (1,'真',1);
insert into test values (2,'假',0);3、插入后结果:
总结:默认值也就是1,0两种,分别对应了布尔类型的true和false。
其实mysql是用tinyint(1)来代替bool类型的true
用tinyint(0)来代替bool类型的false
mysql是不支持bool类型的,所以,当把一个数据设置成bool类型的时候,数据库会自动转换成tinyint(1)的数据类型,其实这个就是变相的bool。 默认值也就是1,0两种,分别对应了bool的true和false
数据有一个字段,用的是 tinyint 长度是1 默认值为0 ,
当用vs2013中的 EF5来生成 实体模型之后,看到这个列被标识为 bool 类型
Mysql官方参考文档关于布尔类型的说明:
BOOL, BOOLEAN
These types are synonyms(同义词) for TINYINT(1). A value of zero is considered(认为是) false. Nonzero(不为0) values are considered true
下面是一个老外的文章,MySQL :: MySQL Connector/Net for EF binds TINYINT(1) incorrectly 他用的是EF4.3版本,我用的是EF5版本
I believe I've discovered a bug in the way the MySQL Connector for .NET maps fields of type TINYINT(1) within Entity Framework.
The database I'm working with has a number of fields used to store "enumeration values" - basically an integer that represents a specific .NET enumeration value. ie/ Open = 1, Closed = 2
Since the enumerations contain a small number of possible values (2-5), the majority of these fields are declared as the MySQL datatype TINYINT(1). In other words, we want an integer with a minimal amount of storage space and a maximum of "one character".
When we use Entity Framework 4.3 to map these TINYINT(1) fields to an "int" data type, the integer value *always* comes back as "1", regardless of the underlying storage value. The integer values 2, 3, 4, etc all get converted to 1.
If I convert the entity property's type to "string", it receives a value of "True".
It appears as though the MySQL Connector for .NET is hardcoded to treat TINYINT(1) as a boolean, regardless of the data type it's eventually bound to. TINYINT(1) should only be converted to a boolean when it's bound to a "bool" property, and nothing else. It appears as though it's trying to simulate the behavior of the "BIT" field in SQL Server, which is a completely different thing (it's not an integer, while TINYINT is).
Is this a known issue? Should I file a bug report?
翻译过来如下
他说,在EF4.3中,他用一个字段 Tinyint(1) 想去存一个 int类型的值,不管是存 1还是2,3,4 他都是变成了1
如果他在Ef的实体中把类型改为string,到了数据库却变成了 “True”
这个问题好像是发生在,通过 MySql Connector For .Net这个组件来链接Mysql的时候发生的 .
表打开之后看到的是数据列表,没法看字段的类型。要查看表中每个字段的类型,选择表之后,上面有个“设计表”,点击之后就看到所有字段的类型了。
布尔值。
MySQL数据库存储布尔值,在Java编程中,我们经常会遇到将boolean值写入到mysql数据库的情况,但是,mysql数据库是没有boolean类型的,它的boolean值是用数字0和1来表示的。
mysql是不支持bool类型的,所以,当把一个数据设置成bool类型的时候,数据库会自动转换成tinyint的数据类型,其实这个就是变相的bool。