为什么laravel插入" 0"而不是" NULL"在mysql数据库中?

时间:2015-07-24 15:43:12

标签: php laravel

为什么我对以下代码有不同的行为?

\DB::table('Test')->insert(
    array(
        'NullableInt' => "NULL", // gives 0
        'NullableVarchar' => "NULL" // gives NULL
    )
);

我需要解析csv文件来播种表。 fgetcsv将所有内容解析为字符串,用于text / varchar字段" NULL"作为字符串工作,整数 - 不。为什么呢?

2 个答案:

答案 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字段,你将得到零。