Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

对布尔型的一些纠结

  今天对 API 中是否使用布尔型的事情和后端(友好地)交涉了下。起初我没搞懂为什么后端不爱用布尔型,它明明这么可爱,而且 JSON 也支持。后来经过一段(愉快地)讨论后我终于理解了他们的苦衷。MySQL 本来就不支持布尔型,没有文档根本无法确定哪些字段是布尔型。
  当年在别的项目中设计数据库时也纠结过这个问题,所以很能理解他们的苦衷。在 MySQL 中数据的最小单位是字节,布尔型数据在 MySQL 中也只能以一字节整型来储存,创建表时bool关键字也会被解析为tinyint(1),所以即使是布尔型数据也可以插入一字节整型大小的数据范围。比如下面这个代码就很违背常理。 drop table if exists xxx;
create table xxx(a bool);
insert into xxx values(123);
select a from xxx; # 这里会查询到 123
  如果以01表示falsetrue,但数据库的查询结果可能出现234或其它数据,这就会很混乱。
  这里也顺便说说另一个问题,字符串的0在 JS 中是true,因为 JS 中只有空字符串是false,其它字符串无论内容都是true(以字符串长度来判断)。而 PHP 中的字符串0false,所以如果决定了使用01表示布尔型的话要小心这个坑。比如服务器想要响应一个false,但不小心响应成了字符串的0,在前端就可能被当做true
  对于布尔型的纠结我绝不会就此善罢甘休的,虽然目前使用了01来表示,但感觉自己的逻辑只是勉强接受而已。我想找到一个更优雅的方式来解决这个问题。
网名:
3.80.32.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^