私はこのエラーを受け取っています:
SQLSTATE [22007]:無効な日時形式:1366不正な文字列値:行1の列 'column-name'の '\ xBD Inch ...'
データベース、テーブル、および列の形式はtf8mb4_unicode_ciであり、column-nameもtypetextおよび[〜#〜] null [〜#〜]。
これは列名の値です
[column-name] => 11 beforeの前のテキストと、その後のテキスト。
ただし、値がコンマ(、)で区切られているため、laravelは列の値に引用符を追加します。次のようになります。
[列名] => '11 beforeの前のテキストとその他のテキストの前後。
以下のスキーマを参照してください
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にエンコードして解決しました。たとえば、エラーを生成した列は列名で、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不正な文字列値:行1の列 'comment'の '\ xE2\x80\x86y\xE2\x80 ...'
スローされます。
これはステージサーバーでのみ発生し、ローカルdevサーバーでは発生しなかったため、下線テーブルの照合と文字セットを比較しました。
この問題は、データベースとテーブルの照合順序および文字セットを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でエンコードしていますが、データベースは他のものを使用しています。
BD
は、½
(半分)のlatin1(および他のいくつかの)エンコードです。エラーメッセージは、それを日時に保存することについて説明しています。したがって、少なくとも2つのエラーがあるように思えます-
CHARACTER SETs
の不一致CREATE TABLE
について何かお見せしますが、なぜ「インチ」がそれに関与するのでしょうか?