代码之家  ›  专栏  ›  技术社区  ›  membersound

如何在mysql视图中强制使用数据类型布尔

  •  1
  • membersound  · 技术社区  · 4 年前

    CREATE VIEW as SELECT ... FROM mytable

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

    但我想要的是 boolean tinyint 我的视图中的列数据类型。

    这可能吗?因为两者都不可能 CAST() 也没有 CONVERT() 似乎支持向 布尔值 类型

    如果我创建一个普通的表,下面的结果是 tinyint(1) :

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

    我不能在一个观点,一种方法上实现同样的目标吗 将列类型显式设置为 tinyint (1) ?

    0 回复  |  直到 4 年前
        1
  •  1
  •   Bill Karwin    4 年前

    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