php原则2:columndefinition枚举不工作

3b6akqbq  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(398)

我想在我的类中使用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;
  }
}
7kjnsjlb

7kjnsjlb1#

我建议不要使用“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,则可能会在应用程序中造成错误。

相关问题