我在这个问题上真的很犹豫该怎么做。过去十年我一直忍受着这个问题,但我认为现在是时候决定正确的处理方式了。
根据互联网信息,MySQL不支持本机数据类型,这就解释了为什么每当我选择"BOOLEAN"时,列最终会变成tinyint(1)。
我无论如何都不介意将数据存储为带有1或0值的tinyint,但是我对这样一个事实有问题:当我从数据库中选择许多行,并且这一列中出现字符串"1"或"0"而不是PHP本机bool true/false。当然,PHP仍然可以将此变量视为布尔值进行处理,因为它似乎自动知道我想做什么,无论我是否执行== 0、== 1甚至== '0'或== '1'(如果我真的感觉要这样做)时。
因此,我让PHP的json_encode函数来处理这些数据,并在我的Backbone/Handlebars实现进行ajax调用时输出它,得到了一个非常漂亮的JSON对象(通常包含许多行的数据),其中包括以下内容:
我相信你能看到在Handlebars.js中想要做一些像这样的事情的问题。
根据互联网信息,MySQL不支持本机数据类型,这就解释了为什么每当我选择"BOOLEAN"时,列最终会变成tinyint(1)。
我无论如何都不介意将数据存储为带有1或0值的tinyint,但是我对这样一个事实有问题:当我从数据库中选择许多行,并且这一列中出现字符串"1"或"0"而不是PHP本机bool true/false。当然,PHP仍然可以将此变量视为布尔值进行处理,因为它似乎自动知道我想做什么,无论我是否执行== 0、== 1甚至== '0'或== '1'(如果我真的感觉要这样做)时。
因此,我让PHP的json_encode函数来处理这些数据,并在我的Backbone/Handlebars实现进行ajax调用时输出它,得到了一个非常漂亮的JSON对象(通常包含许多行的数据),其中包括以下内容:
{"myVariable":"1"}
或者{"myVariable":"0"}
。我相信你能看到在Handlebars.js中想要做一些像这样的事情的问题。
{{#if myVariable}}
Do this
{{else}}
Do that
{{/if}}
现在,我真正不想做的事情是像这样:
<?php
for($i = 0; $i < count($recordSet); $i++) {
$recordSet[$i]['myVariable'] = (bool)$recordSet[$i]['myVariable'];
}
?>
由于我正在构建的应用程序在数据库中有成千上万的列,我不能(或者只应该需要)为我想要在我的JavaScript中像布尔值一样运行的每个列运行上述代码。而且我真的不想这样做(尽管这可能是最容易的方法)。
Handlebars.registerHelper('ifTrue', function(a, b) {
// Cast the compared value to a bool and then run a regular handlebars #if statement
});
有更好的方法吗?我正在使用CodeIgniter...是否可以以某种方式修改数据库类,以便检测tinyint(1)列并自动将其转换为布尔值,然后只需这样做,直到MySQL支持真正的布尔列?我知道他们正在计划,但是...
json_encode
运行时,仍然存在相同的问题,即返回一个字符串“1”或“0”。 - Benjamin Oman