为什么我对以下代码有不同的行为?
\DB::table('Test')->insert(
array(
'NullableInt' => "NULL", // gives 0
'NullableVarchar' => "NULL" // gives NULL
)
);
我需要解析csv文件来播种表。 fgetcsv将所有内容解析为字符串,用于text / varchar字段" NULL"作为字符串工作,整数 - 不。为什么呢?
答案 0 :(得分:1)
https://dev.mysql.com/doc/refman/5.0/en/type-conversion.html
将字符串插入数字列时,它将自动转换为整数。
$mysqli->prepare
更有趣的案例:
mysql> SELECT CAST('NULL' AS UNSIGNED INTEGER)
-> 0
mysql> SELECT CAST(NULL AS UNSIGNED INTEGER)
-> NULL
如果你想要null,你应该使用PHP的mysql> SELECT CAST('1NULL' AS UNSIGNED INTEGER)
-> 1
mysql> SELECT CAST('NULL1' AS UNSIGNED INTEGER)
-> 0
mysql> SELECT CAST('1,000' AS UNSIGNED INTEGER)
-> 1
或null
(这可以防止Laravel将它视为你提供它的字符串):
DB::raw('NULL')
答案 1 :(得分:0)
当你尝试写那些" NULL"时,似乎MySQL将text / varchar字段设置为NULL。 (字符串)值。
当你试着写" NULL"直接在mysql客户端的字符串到int字段,你将得到零。