SQLSTATE[22007]:无效的日期时间格式:1366 字符串值不正确,html_entity_decode 函数

Posted

技术标签:

【中文标题】SQLSTATE[22007]:无效的日期时间格式:1366 字符串值不正确,html_entity_decode 函数【英文标题】:SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value, html_entity_decode function 【发布时间】:2021-05-25 00:59:54 【问题描述】:

我一直在尝试下面的 html_entity_decode;

//Foreach ($datas from remote db)
$recorded = User::updateOrCreate([
        "old_id" => $user->Id,
        "username" => $user->UserName,
    ],[
        "old_id" => $user->Id,
        "name" => html_entity_decode($user->FullName),
        "username" => $user->UserName
]

它给了我如下错误,

SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value: '\xE3\xBCseyi...' for
column `database`.`users`.`name` at row 1 (SQL: update `users` set
`name` = hseyin furkan, `users`.`updated_at` = 2021-02-22 18:23:39 where `id` = 2)

如果我不调用 html_entity_decode 函数,它会写入“hüseyin”之类的列

我该如何解决?

我的桌子:

Schema::create('users', function (Blueprint $table) 
        $table->id();
        $table->string('name')->nullable();
        $table->string('username')->nullable();

【问题讨论】:

请分享您的输入字符串 但可能你的name列类型是datetime,你需要改成varchar 不,我的名字列字符串 【参考方案1】:

可能,您的数据是 ASCII 字符集,而您的列等待 UTF-8 你能试试这个代码吗?

mb_convert_encoding(html_entity_decode($user->FullName), "UTF-8")

如果你使用laravel,你可以使用那个函数;

$fullname = Str::ascii(html_entity_decode($user->FullName),'tr');

【讨论】:

以上是关于SQLSTATE[22007]:无效的日期时间格式:1366 字符串值不正确,html_entity_decode 函数的主要内容,如果未能解决你的问题,请参考以下文章

日期时间格式无效:1366 字符串值不正确

如何在 post_table 和 Tags 表中插入标签?

日期时间格式无效:1292 日期时间值不正确 [重复]

Hibernate打印SQL及附加参数

用零存储日期(无效的日期时间格式)

SQLSTATE[22018]:强制转换规范的字符值无效