簡體   English   中英

無效的日期時間格式:1366 字符串值不正確

[英]Invalid datetime format: 1366 Incorrect string value

我收到此錯誤:

SQLSTATE[22007]:無效的日期時間格式:1366 字符串值不正確:'\\xBD Inch...' 列 'column-name' 在第 1 行

我的數據庫、表和列的格式為utf8mb4_unicode_ci,列名的類型為textNULL

這是列名的值

[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-encodingutf8-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM