Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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 具有许多选项的MySQL数据类型_Php_Mysql_Enums - Fatal编程技术网

Php 具有许多选项的MySQL数据类型

Php 具有许多选项的MySQL数据类型,php,mysql,enums,Php,Mysql,Enums,我正在创建一个MySQL表来存储用户信息。如果一个信息是用户的毕业年份,从1970年到2014年,那么最好的数据类型是什么?我希望这些值能够为用户提供选择毕业年份的选项 我打算这样使用enumgrdYr枚举('70'、'71'、'72'、…'14'),但建议不要将数字用作枚举值。简单地添加一个像这样的字符grdYr ENUM('s70','s71','s72',…'s14')就能解决问题吗? 另外,如果我在以后添加更多的值,比如15、16年级,等等,每年学生毕业时,是否每次都更改表是完成这一任务

我正在创建一个MySQL表来存储用户信息。如果一个信息是用户的毕业年份,从1970年到2014年,那么最好的数据类型是什么?我希望这些值能够为用户提供选择毕业年份的选项
我打算这样使用enum
grdYr枚举('70'、'71'、'72'、…'14')
,但建议不要将数字用作枚举值。简单地添加一个像这样的字符
grdYr ENUM('s70','s71','s72',…'s14')
就能解决问题吗?

另外,如果我在以后添加更多的值,比如15、16年级,等等,每年学生毕业时,是否每次都更改表是完成这一任务的唯一方法?据我所知,这似乎是唯一的办法,但改变桌子听起来是我不应该做的事情。


救命啊

首先,您应该在
ENUM
之外使用多个表和外键。您还应该以4位数格式存储任何年份,而不是2位数。因为。。。如果您需要添加2070年,该怎么办

其次,为日期使用
DATETIME
DATE
列类型。或者,对像您这样的数字使用
VARCHAR
INT
TINYINT
(我仍然更喜欢日期类型)。不要使表(或枚举的单个列)只包含用户的毕业年份。通过HTML/PHP代码验证它。使用特定选项制作一个
,并通过它进行验证

HTML:

<select>
    <option value="1970">1970</option>
    <option value="1971">1971</option>
    <option value="1972">1972</option>
    ...
    <option value="2013">2013</option>
    <option value="2014">2014</option>
</select>
$arrayWithYears = array();

foreach($i = 1970; $i <= 2014; $i++) {
    $arrayWithYears[] = $i;
}

if(in_array($iSubmittedValue, $arrayWithYears)) {
    // TRUE
} else {
    // FALSE
}

1970
1971
1972
...
2013
2014
PHP:

<select>
    <option value="1970">1970</option>
    <option value="1971">1971</option>
    <option value="1972">1972</option>
    ...
    <option value="2013">2013</option>
    <option value="2014">2014</option>
</select>
$arrayWithYears = array();

foreach($i = 1970; $i <= 2014; $i++) {
    $arrayWithYears[] = $i;
}

if(in_array($iSubmittedValue, $arrayWithYears)) {
    // TRUE
} else {
    // FALSE
}
$arrayWithYears=array();

弗雷奇($i=1970;$i不要使用
ENUM
。如果要存储数字,请使用更合适的类型,如
INT
,或者如果绝对希望保留前导零,请至少使用
VARCHAR
。如果要存储日期,请使用日期类型之一,如
date
。这会使数据库架构更清晰,因为pe给出了其意图的提示

我还建议存储完整的4位数年份,而不是2位数年份,因为两位数年份是不明确的。请记住:工作代码的使用时间往往比最初预期的要长。如果您希望向访问者显示2位数年份,请执行此操作,但仍在数据库中存储4位数年份。额外的spa除非您的表很大,否则ce不会成为问题。这是一个微不足道的UI问题

建议不要使用
ENUM
s中的数字,因为它相对来说毫无意义。在每个数字的开头添加一个“s”并不会使它变得毫无意义


列的合理选择是最能反映它将保存的数据。这几乎从来都不是
ENUM

许多专家建议不要使用ENUM。如果要确保值位于给定的集中,请创建一个列出所有值的表,并将其作为该表的外键。