mysql - 如何使用 DBIx 来使用 mysql 位

标签 mysql perl catalyst bit

我正在尝试访问我的 Catalyst 应用程序中的 mysql 位字段。这是表格信息:

SQL:

create table foo{
 ...
 mybitField bit(1) NOT NULL default b'0'
}

我的映射表:

...

mybitField
{
    data_type => "BIT",
    default_value => "b'0'",
    is_nullable => 0,
    size => undef,
  }
...

现在在我的 Controller 中,我做了一个简单的

$c->stash->{foos}=[$c->model('DB::foo')->all];

在我的模板中,我尝试了以下方法:

[% FOREACH foo IN foos -%]
  <tr>
      [%- IF int(foo.mybitField) %]
                <td>The field is True</td>
        [%- ELSE %]
                <td>The field is False</td>
        [% END %]
  </tr>
[% END -%]

我也试过了

[%- IF foo.mybitField %]

但这也不起作用。除了更改数据库字段类型本身之外,还有其他方法吗?

最佳答案

我刚刚对此进行了测试,MySQL BIT 字段返回为“原始”二进制值,正如预期的那样。 所以看来您遇到的是模板工具包问题。

我不明白你的意思:

[%- IF int(foo.mybitField) %]

我认为 TT 没有 int() 函数。 Perl 的 int() 函数也不会做你想做的事。我的建议是在 Perl 中编写一个函数,将打包值转换为常规整数,例如:

my $int = unpack( 'c', $bit_field );

另一种方法是向您的模式类添加一些列膨胀列。

__PACKAGE__->inflate_column('mybitField', {
    inflate => sub { unpack( 'c*', shift ) },
});

但是,更新仍然会失败,而且我不知道一个简单的解决方案。我自己从未在 MySQL 上使用过 BIT 数据类型——我通常使用 CHAR(1) 列。

此外,如果您通过 dbix-class@lists.scsys.co.uk 或在 irc.perl.org 上的#dbix-class channel 询问 DBIC 邮件列表,您可能会得到更好的答案。

关于mysql - 如何使用 DBIx 来使用 mysql 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1665812/

相关文章:

perl - 使用 Catalyst::Controller::REST 进行错误处理的最佳实践是什么

php mysqli 真正的转义字符串添加反斜杠

mysql - 选择额外的行数据

Perl : Standard Application development approach

linux - Perl 升级会破坏 Linux 上的旧版本吗?

perl - 在 Perl 中使用 OLE 遍历 Outlook 文件夹

perl - Catalyst 中的实用程序 (Perl)

php - SQL Query 找不到获取结果的方法

php - 将行数存储在数据库中或动态获取

perl - 尽管有 "no warnings qw(experimental::signatures)",签名仍产生警告消息