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
我解决了它,编码为uft-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)
小智 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进行编码。
如果mb-convert-encoding或utf8-encode无法为您解决此问题,请检查您是否仅在其多字节变体中使用字符串函数。
例如,substr你必须使用mb_substr
此处参考文档:多字节字符串函数
写给未来的读者,他们可能会遇到我同样的问题:)
| 归档时间: |
|
| 查看次数: |
10082 次 |
| 最近记录: |