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

omi*_*xam 10 php mysql mariadb laravel laravel-5.5

我收到这个错误:

SQLSTATE [22007]:无效的日期时间格式:1366字符串值不正确:'\ xBD英寸...'第1行的列'column-name'

我的数据库,表和列的格式为utf8mb4_unicode_ci, column-name的类型为text,为NULL.

这是列名的值

[column-name] => 11之前的一些文字以及之后和之后的其他文字.

但是我等待laravel为列的值添加引号,因为值用逗号(,)分隔.它应该如下:

[column-name] =>'11之前的一些文字以及之后和之后的其他文字.'

参见下面的Schema

    Schema::create('mws_orders', function (Blueprint $table) {
        $table->string('custom-id');
        $table->string('name');
        $table->string('description')->nullable();
        $table->string('comment')->nullable();
        $table->integer('count')->nullable();
        $table->text('column-name')->nullable();
        $table->timestamps();

        $table->primary('custom-id');
    });
Run Code Online (Sandbox Code Playgroud)

我一直在寻找谷歌,但没有任何解决方案.

任何人都知道如何解决这个问题?

我正在使用Laravel 5.5和MariaDB 10.2.11.

omi*_*xam 10

我解决了它,编码为u​​ft-8所有在插入之前生成此错误的字符串列.例如,生成错误的column-name,我编码为show bellow.另外我发现其他列有相同的错误,我也使用了这个解决方案.

$data [
//key=>values 
];

$myModel = new MyModel(); 

$data['column-name'] = DB::connection()->getPdo()->quote(utf8_encode($data['column-name']));

$myModel->insert($data); 
Run Code Online (Sandbox Code Playgroud)

  • 只需添加 utf8_encode() 方法就可以了。引用一切确实用引号保存了我的价值观 (3认同)

小智 6

我在Laravel 5.5和MariaDB 10.2中遇到了类似的问题。将一些用户输入t存储到varchar列中时,会出现以下异常:

SQLSTATE [22007]:无效的日期时间格式:1366错误的字符串值:第1行的'comment'列的'\ xE2 \ x80 \ x86y \ xE2 \ x80 ...'

将被抛出。

由于这仅发生在舞台服务器上,而不发生在本地开发服务器上,因此我比较了下划线表的排序规则和字符集,结果发现舞台服务器上的数据库和表使用lartin1,而本地开发服务器使用utf8mb64。

通过将数据库和表排序规则以及char设置为utf8mb64和utf864mb_unicode_ci可以解决该问题。

ALTER DATABASE <db_name> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

对于遇到此问题的任何人,请检查数据库和表的排序规则和字符集。当数据库使用其他工具时,Laravel应用可能会使用utf8进行编码。


Lin*_*abo 5

如果mb-convert-encodingutf8-encode无法为您解决此问题,请检查您是否仅在其多字节变体中使用字符串函数

例如,substr你必须使用mb_substr

此处参考文档:多字节字符串函数

写给未来的读者,他们可能会遇到我同样的问题:)