我在 MySQL 中有 IsTrial 类型的 bit(1) 字段 NULL 设置为 No 并且 默认值为 0
现在这个条件:
if(!empty($subscription['IsTrial']) && (bool)$subscription['IsTrial'] == TRUE )
{
echo ' (Trial)';
}
.. 结果总是 true,因为 mysql 实际上并没有设置默认值 0,它使字段保持空白?为了使上述条件有效,我必须将 MYSQL 中的默认值从 0 设置为 null,但我不想这样做。
我真的很困惑这是怎么回事,为什么没有设置默认值 0 并且该字段保持空白?
重申一下,问题是,当没有手动指定值时,mysql 不会使用默认值
0 保存字段,它会保留导致条件失败的字段 BLANK。
最佳答案
该字段不是空白。它的二进制值为 0。
您没有将默认值定义为 0,即 ASCII 码为 48 的字符。您将默认值定义为二进制值 0,即 nul ASCII 字符。当您尝试将 ASCII nul 打印为字符串时,没有可见的表示形式。同样,值 1 是二进制值 1,或 Control-A,它也不是打印字符。
mysql> create table t (isTrial bit(1) not null default 0);
mysql> insert into t () values ();
mysql> insert into t (isTrial) values (DEFAULT);
mysql> insert into t (isTrial) values (0);
mysql> insert into t (isTrial) values (1);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t;
+---------+
| isTrial |
+---------+
| |
| |
| |
| |
+---------+
mysql> pager cat -v
PAGER set to 'cat -v'
mysql> select * from t;
+---------+
| isTrial |
+---------+
| |
| |
| |
| ^A |
+---------+
但是 PHP 做了大多数用户可能想要的,即将这些 BIT 值分别映射到 string 值“0”和“1”。下面是一些测试代码(使用 PHP 5.3.15,MySQL 5.5.30):
$stmt = $dbh->prepare("select isTrial from t");
$result = $stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
var_dump($row);
if(!empty($row['isTrial']) && (bool)$row['isTrial'] == TRUE )
{
echo "isTrial is true\n";
} else {
echo "isTrial is false\n";
}
echo "\n";
}
输出:
$ php bit.php
array(1) {
["isTrial"]=>
string(1) "0"
}
isTrial is false
array(1) {
["isTrial"]=>
string(1) "0"
}
isTrial is false
array(1) {
["isTrial"]=>
string(1) "0"
}
isTrial is false
array(1) {
["isTrial"]=>
string(1) "1"
}
isTrial is true
回复你的评论:
对于 PHP,使用 BIT(1) 应该可以正常工作,但是当我们直接在查询工具中查看数据时,它会造成混淆。如果想让数据更清晰,可以使用TINYINT。另一种选择是 CHAR(1) CHARACTER SET ASCII。两者都需要 1 个字节用于存储。
BIT(1) 的唯一优点是它拒绝除 0 或 1 之外的任何值。但是这种数据类型的存储要求无论如何都向上舍入到 1 个字节。
关于php - 默认值不在 mysql 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15323798/
这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
两者都可以defsetup(options={})options.reverse_merge:size=>25,:velocity=>10end和defsetup(options={}){:size=>25,:velocity=>10}.merge(options)end在方法的参数中分配默认值。问题是:哪个更好?您更愿意使用哪一个?在性能、代码可读性或其他方面有什么不同吗?编辑:我无意中添加了bang(!)...并不是要询问nobang方法与bang方法之间的区别 最佳答案 我倾向于使用reverse_merge方法:option
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
路由有如下代码:resources:orders,only:[:create],defaults:{format:'json'}resources:users,only:[:create,:update],defaults:{format:'json'}resources:delivery_types,only:[:index],defaults:{format:'json'}resources:time_corrections,only:[:index],defaults:{format:'json'}是否可以使用1个字符串为所有资源设置默认格式,每行不带“默认值”散列?谢谢。
我是ruby的新手,正在配置IRB。我喜欢pretty-print(需要'pp'),但总是输入pp来漂亮地打印它似乎很麻烦。我想做的是默认情况下让它漂亮地打印出来,所以如果我有一个var,比如说,'myvar',然后键入myvar,它会自动调用pretty_inspect而不是常规检查。我从哪里开始?理想情况下,我将能够向我的.irbrc文件添加一个自动调用的方法。有什么想法吗?谢谢! 最佳答案 irb中默认pretty-print对象正是hirb被迫去做。Theseposts解释hirb如何将几乎所有内容转换为ascii表。虽
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin
我正在尝试将一个资源属性的默认值设置为另一个属性的值。我正在为我正在构建的tomcat说明书定义一个资源,其中包含以下定义。我想要可以独立设置的“名称”和“服务名称”属性。当未设置服务名称时,我希望它默认为为“名称”提供的任何内容。以下不符合我的预期:attribute:name,:kind_of=>String,:required=>true,:name_attribute=>trueattribute:service_name,:kind_of=>String,:default=>:name注意第二行末尾的“:default=>:name”。当我在Recipe的新block中引用我