我有一个表单,其中包含一些可选输入,用户可以跳过更新,这些输入可以为空,问题是当我更新设置为NULL的列时,查询会将该列更新为空白的“”,而不是将其保留为空。
我担心的是在MySQL特别大的表上这是如何 效率 的,当将值设置为Blank VS时,性能是否有所不同?空值。 如果是,那么我将确保所有空输入都更新为NULL。
这是用于避免空白的代码,是否有更好的方法呢?
#Avoid blank with NULL
$value1 = !empty($_POST['input1']) ? $_POST['input1'] : NULL;
$value2 = !empty($_POST['input2']) ? $_POST['input2'] : NULL;
答案 0 :(得分:1)
在这里有一个很好的对话: MySQL: NULL vs ""
我发现NULL与“”在磁盘空间和性能方面无关紧要。
还有其他一些人在讨论,搜索“空位”比检查字符串是否为''
更快。这个问题已有9年历史了,因此从那时起我们在硬件方面取得了长足的进步,而且差异可能微不足道。作为一名DBA,我建议适当地使用null:)
答案 1 :(得分:1)
就磁盘空间和性能而言,可能几乎没有差别。我当然会花时间编写一个函数来捕获请求并将所有“空”替换为{{1} }。当然,NULL
是该字段的默认值。
例如,我将NULL
用作日期时间字段的默认值。付款后,我将字段设置为日期和时间。
NULL
或者当您想要列出所有未结发票时:
if($record->payed != NULL) { echo 'invoice payed'; } // This will say it is payed when the field is ""
if(!empty($record->payed)) { echo 'invoice payed'; } // This will not say it is payed when field is "" or NULL
因此,为避免编程时遇到麻烦,您应该仅使用一种方法并坚持使用该方法:)(在那里)
答案 2 :(得分:0)
我总是避免使用null,因为这只是要测试的另一件事。如果值可以为null或“”,则必须:
SELECT * FROM invoices WHERE payed IS NULL // will not return any records where payed is ""
是更有效还是效率更低取决于字段和查询内容。如果要测试特定的值,那么除非您要测试空/空值,否则它根本不会有任何区别。