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