【问题标题】:How to force datatype boolean in mysql view如何在 mysql 视图中强制数据类型为布尔值
【发布时间】:2022-01-18 00:28:58
【问题描述】:

CREATE VIEW as SELECT ... FROM mytable

这将创建一个带有 int unsiged 列的视图。

但在我看来,我想要的是 booleantinyint 列数据类型。

这可能吗,因为CAST()CONVERT() 似乎都不支持转换为boolean 类型。

如果我创建一个普通表,则以下结果为tinyint(1)

CREATE TABLE test (
  Id        int(10)      unsigned NOT NULL auto_increment,
  myflag    boolean      default false,
  PRIMARY KEY (Id)
);

我不能在视图中实现相同的功能,意味着将列类型显式设置为tinyint(1)

【问题讨论】:

  • MySQL 并没有真正的布尔类型。
  • 当然 1 = true 和 0 = false,但我更想研究如何在视图中强制执行列的 数据类型,而不是逻辑。跨度>
  • 不能转换为 tinyint,afaicr
  • 请包括确切的视图定义和产生您要解决的问题的插入/更新。

标签: mysql sql sql-view


【解决方案1】:

MySQL 视图确实返回 TINYINT,但前提是您查询该类型的列。所有其他整数表达式都返回 BIGINT。

我运行mysql --column-type-info 以获取有关结果的调试信息。

mysql> create table t ( b bool );

mysql> create or replace view v as select b from t;

mysql> select b from v;
Field   1:  `b`
Catalog:    `def`
Database:   `test2`
Table:      `v`
Org_table:  `v`
Type:       TINY
Collation:  binary (63)
Length:     1
Max_length: 0
Decimals:   0
Flags:      NUM 

mysql> select NOT b from v;
Field   1:  `NOT b`
Catalog:    `def`
Database:   ``
Table:      ``
Org_table:  ``
Type:       LONGLONG
Collation:  binary (63)
Length:     1
Max_length: 0
Decimals:   0
Flags:      BINARY NUM 

mysql> create or replace view v (b) as select NOT b from t;

mysql> select b from v;
Field   1:  `b`
Catalog:    `def`
Database:   ``
Table:      `v`
Org_table:  `v`
Type:       LONGLONG
Collation:  binary (63)
Length:     1
Max_length: 0
Decimals:   0
Flags:      BINARY NUM 

【讨论】:

    猜你喜欢
    • 2015-12-17
    • 1970-01-01
    • 2015-08-25
    • 2012-07-01
    • 1970-01-01
    • 2018-09-24
    • 2010-09-22
    相关资源
    最近更新 更多