[英]Invalid datetime format: 1366 Incorrect string value
我收到此錯誤:
SQLSTATE[22007]:無效的日期時間格式:1366 字符串值不正確:'\\xBD Inch...' 列 'column-name' 在第 1 行
我的數據庫、表和列的格式為utf8mb4_unicode_ci,列名的類型為text和NULL 。
這是列名的值
[column-name] => 11 ▒ 之前的一些文字和之后的其他文字,以及之后。
但是我等待 laravel 為列的值添加引號,因為這些值用逗號 (,) 分隔。 它應該如下所示:
[column-name] => '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。
我解決了它,將所有在插入之前生成此錯誤的字符串列編碼為 uft-8。 例如,產生錯誤的列是column-name ,我編碼為如下所示。 我還發現其他列有相同的錯誤,我也使用了這個解決方案。
$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...' 列 'comment' 在第 1 行
將被拋出。
由於這僅發生在舞台服務器上,而不發生在本地開發服務器上,我比較了下划線表的排序規則和字符集,結果舞台服務器上的數據庫和表使用 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;
對於遇到此問題的任何人,請檢查您的數據庫和表的排序規則和字符集。 Laravel 應用程序可能使用 utf8 編碼,而數據庫使用其他編碼。
如果mb-convert-encoding或utf8-encode沒有為您解決這個問題,請檢查您是否僅在其多字節變體中使用字符串函數。
例如,您必須使用mb_substr
而不是substr
此處的文檔參考:多字節字符串函數
寫給未來可能會遇到我同樣問題的讀者:)
BD
是½
(二分之一)的 latin1(和其他幾個)編碼。 錯誤消息談到將其存儲在日期時間中。 所以,聽起來至少有兩個錯誤——
CHARACTER SETs
不匹配您向我們展示了有關CREATE TABLE
一些內容,但為什么“英寸”會涉及其中?
只需更改數據庫配置(字符集和排序規則)
配置/數據庫.php
到:
'connections' => [
'mydb' => [
'driver' => 'mysql',
'host' => env('DB_HOST'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'charset' => 'utf8mb4', // **for emoticons**
'collation' => 'utf8mb4_unicode_ci', // **for emoticons**
],
]
請按照以下步驟解決問題
1-更改 CHARACTER 和 COLLATE 的表
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
2-更改配置/database.php文件
'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,
],
3- 運行此命令以重新生成配置緩存
php artisan config:cache
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.