Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将值放入sql枚举中的最佳实践_Php_Mysql_Sql_Enums - Fatal编程技术网

Php 将值放入sql枚举中的最佳实践

Php 将值放入sql枚举中的最佳实践,php,mysql,sql,enums,Php,Mysql,Sql,Enums,我的mysql表中有两个enum列: gender enum('male', 'female') not null, user_type enum('hr', 'manager', 'qa') not null 我的一位同事坚持认为,在所有枚举值中使用小写不是一个好主意,因为它在页面中看起来不太好。比如说, //profile.php 用户类型:HR(代表人力资源) 性别:男性 应该是: //profile.php 用户类型:HR 性别:男性 我忽略案例的主要原因是我会多次比较这些列上的值。例

我的mysql表中有两个enum列:

gender enum('male', 'female') not null,
user_type enum('hr', 'manager', 'qa') not null
我的一位同事坚持认为,在所有枚举值中使用小写不是一个好主意,因为它在页面中看起来不太好。比如说,

//profile.php
用户类型:HR(代表人力资源)
性别:男性

应该是:

//profile.php
用户类型:HR
性别:男性

我忽略案例的主要原因是我会多次比较这些列上的值。例如:

if (user_type == "hr")
如果我只是因为大小写不匹配而出错,那将是非常烦人的。那么性别专栏呢?大写真的好吗

我认为UI端可以将其大写,如:

<?php echo strtoupper($userType) ?>


我对sql没有太多的知识,所以我想问:是否有关于枚举值的案例约定的最佳实践?注意,我不是在谈论命名枚举列。

如果您询问的是最佳实践,那么是。您应该使用大写的
ENUM
值。因为,它们是常量


另外,在所有编程语言中,常量都声明为大写。

根据我的经验,在我使用的所有具有枚举概念的语言中,无论是在文档中还是在语言提供的库中定义的枚举中,枚举都不是用大写或小写写的,但是他们使用了驼峰格的一些变体,比如
Small,Medium,Big
或者
szSmall,szMedium,szBig
。一些例子:

当然,在所有这些示例中,枚举值都不是字符串,它们有一个名称和一个值,因此比较和输出都没有问题(因为输出的是它的值,而不是它的名称)

因为在MySQL中,如果您对任何输出使用枚举值,那么该值也是名称,您应该使用在该输出中更有意义的大小写(如果该列是常规的
CHAR
列,则使用相同的大小写),例如
'HR','Management','QA'
。如注释中所述,默认排序规则应该已经不区分大小写,因此在比较或联接中不会出现问题

在PHP中,您可以使用或出于任何原因不喜欢它/:

这并不是说我反对总是使用一致的大小写,事实上,我总是使用一致的大小写,我在不需要它的地方花了很多时间使用不区分大小写的语言。但最重要的是程序能提供预期的结果,因为你编写代码不仅是为了好玩,而且是为了有所成就,如果正确的部门命名方式是
'HR','Management','QA',
你不能使用
'HR','Management','QA',
,因为它在你的代码中看起来更漂亮


也就是说,如果枚举仅在内部使用,例如,因为您仅将它们用作id,并且描述存储在
descriptions
表中,那么请使用最适合您和您的同事的大小写。

好的,您可以使用不区分大小写的排序规则(大多数“默认”排序规则都是)-但无论哪种方式,在你的cssUse中控制这类事情是非常容易的,因为对于你的目的来说,什么都是可行的。严格遵守套管是一个小问题。例如,在表格上,有合适的案例看起来很好,但在报告中,即有5名男性和5名女性监督员,如果使用合适的外壳,则看起来很奇怪。这个问题要么是基于观点,要么过于宽泛(或两者兼而有之)。您甚至可以争论在MySQL中使用ENUM是否是一个好主意。然而,我认为您需要决定在代码中使用的是数据还是内部密钥。明天,他们希望你将“HR”改为“employee”,你的代码(
user\u type==“HR”
)将不再有效,因为数据已更改。最好在DB(
gender\u key,gender\u label
)或应用程序(
$labels['male']='male'
echo$labels[$genderKey]
)中进行某种映射。要支持多种语言,您必须采用任何一种方式。
if (strcasecmp(user_type,"hr")==0) // best options IMO
if (strcasecmp(user_type,"HR")==0) // best options IMO
if (strtolower(user_type)=="hr")
if (strtoupper(user_type)=="HR")