php - 原则 2:columnDefinition ENUM 不起作用
问题描述
我想在课堂上使用 ENUM,但在数据库中使用 TINYINT。我关注了这篇文章:https ://www.doctrine-project.org/projects/doctrine-orm/en/2.6/cookbook/mysql-enums.html
在我的 Mysql 表中:
CREATE TABLE `side` (
`coated` tinyint(1) DEFAULT NULL COMMENT '0 = Uncoated; 1 = Coated',
);
在我的课堂上:
/**
* @ORM\Column(type="string", columnDefinition="ENUM('coated', 'uncoated')")
*/
private $coated = null;
在 PHP 中运行这些值我从数据库中获得了真正的价值:
0 or 1
我想知道这个解决方案是否可以使用 Mysql。希望有一个解决方案,如果这不起作用,我找到的唯一解决方案是:
public function getCoated() {
if ($this->coated === 0){
return "uncoated";
} elseif ($this->coated === 1) {
return "coated";
} else {
return null;
}
}
解决方案
我建议不要使用“TINYINT”,而是使用“BIT”数据类型,这样数据库将只允许将值存储为“0”或“1”以确保安全。
您现有的:
CREATE TABLE `side` (
`coated` tinyint(1) DEFAULT NULL COMMENT '0 = Uncoated; 1 = Coated'
);
将其更改为:
CREATE TABLE `side` (
`coated` BIT DEFAULT NULL COMMENT '0 = Uncoated; 1 = Coated'
);
在“TINYINT”中,它还可以接受 0/1 以外的值,如果有人将您的表数据更新为 2、3、4 之类的值,可能会在您的应用程序中产生错误。
推荐阅读
- python - 读取csv文件最后一行的第二列
- linux - mv:在 shell 脚本中使用 mv 时缺少文件操作数,但在终端中没有
- swift - 如何在 tableView 中删除?
- git - 提交到新的 gitHub 存储库而不显示本地提交
- porting - 将 xcos 从 5.5.2 移植到 6.0.1
- python - 使用 LSTM 在 PPO + ICM 中分散损失
- ios - 当设备方向为 faceDown 或 faceUp 时如何获取界面方向?
- firebase - Firebase 部署功能 - HTTP 错误 403
- git - 我如何明智地使用 master 重新设置一个非常大的过时分支?我可以在“阶段”中变基吗?
- javascript - 客户尚未被授予范围:读取角色