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

Php 无效的日期时间格式:1366不正确的字符串值,php,mysql,laravel,mariadb,laravel-5.5,Php,Mysql,Laravel,Mariadb,Laravel 5.5,我得到了这个错误: SQLSTATE[22007]:无效的日期时间格式:1366不正确的字符串值:“\xBD Inch…”用于第1行的列“column name” 我的数据库、表和列的格式为utf8mb4\u unicode\u ci,列名为text和NULL 这是列名的值 [列名]=>11之前的一些文本▒ 和其他文本之后,和之后 但是,我等待laravel在列的值中添加引号,因为值之间用逗号(,)分隔。具体内容如下: [列名]=>“11之前的一些文本▒ 以及后面和后面的其他文本。” 请参见下面

我得到了这个错误:

SQLSTATE[22007]:无效的日期时间格式:1366不正确的字符串值:“\xBD Inch…”用于第1行的列“column name”

我的数据库、表和列的格式为utf8mb4\u unicode\u ci,列名为text和NULL

这是列名的值

[列名]=>11之前的一些文本▒ 和其他文本之后,和之后

但是,我等待laravel在列的值中添加引号,因为值之间用逗号(,)分隔。具体内容如下:

[列名]=>“11之前的一些文本▒ 以及后面和后面的其他文本。”

请参见下面的模式

    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');
    });
我一直在谷歌上寻找,但还没有任何解决方案

有人知道如何解决这个问题吗


我使用的是Laravel 5.5和MariaDB 10.2.11。

BD
½(一半)的拉丁1(和其他几种)编码。错误消息谈到将其存储在datetime中。所以,听起来至少有两个错误--

  • 字符集不匹配
  • 格式错误的查询

您向我们展示了一些关于
创建表的内容,但是为什么会涉及“inches”呢?

我解决了这个问题,在插入之前将生成此错误的所有字符串列编码到uft-8。例如,生成错误的列是列名,我将其编码为show bellow。我还发现了其他列有相同的错误,我也使用了这个解决方案

$data [
//key=>values 
];

$myModel = new MyModel(); 

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

$myModel->insert($data); 

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

SQLSTATE[22007]:无效的日期时间格式:1366不正确的字符串值:“\xE2\x80\x86y\xE2\x80…”用于第1行的“comment”列

将被抛出

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

通过将数据库和表排序规则和字符集更改为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;
ALTER数据库字符集utf8mb4校对utf8mb4\u unicode\u ci;
ALTER TABLE转换为字符集utf8mb4 COLLATE utf8mb4\u unicode\u ci;
对于遇到此问题的任何人,请检查数据库和表的排序规则和字符集。Laravel应用程序很可能是用utf8编码的,而数据库使用了其他功能。

如果您没有解决此问题,请检查您是否仅在其多字节变体中使用了字符串函数

e、 g。 您必须使用
mb\u substr

此处的文档参考:


为将来可能会遇到我同样问题的读者编写:)

只需在中更改数据库配置(字符集和排序规则)

config/database.php

致:


按照以下步骤解决问题

1-更改字符并整理表格

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
 'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',//****make sure these configs are set
        'collation' => 'utf8mb4_unicode_ci',//****make sure these configs are set
        'prefix' => '',
        'strict' => true,
        'engine' => null,
     
    ],
php artisan config:cache
2-更改config/database.php文件

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
 'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',//****make sure these configs are set
        'collation' => 'utf8mb4_unicode_ci',//****make sure these configs are set
        'prefix' => '',
        'strict' => true,
        'engine' => null,
     
    ],
php artisan config:cache
3-运行此命令以重新生成配置缓存

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
 'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',//****make sure these configs are set
        'collation' => 'utf8mb4_unicode_ci',//****make sure these configs are set
        'prefix' => '',
        'strict' => true,
        'engine' => null,
     
    ],
php artisan config:cache

可能的答案:看起来该列应该是日期时间格式,而不是字符串。检查您的模式。问题看起来像其他问题,Laravel没有用引号括起来。我的字符串中有逗号。insert错误用反勾号显示列的名称,但列的值没有引号。Laravel使用参数绑定,该绑定不引用值。显示您的数据库架构和您正在使用的确切代码。我正在使用我的模型实例插入$myModel=new myModel()$myModel->insert($data);当您谈到模式时,您是指迁移吗?问题实际上与缺少引号有关,我接受原始查询,为每个值添加引号,并直接在数据库中运行,并正确插入。现在,它转向另一个问题:为什么拉雷维尔缺少引号,以及如何解决它?拉雷维尔不是缺少引号。它使用PDO、预处理语句和参数绑定,绕过了引号的需要。让我们看看生成的SQL。只需添加utf8_encode()方法就可以了。引用所有内容可以用引号保存我的价值观