Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 16.01.2017 17:05:48

ORM - SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Здравствуйте,
столкнулся вот с такой проблемой при вставке данных в базу
скриншот
http://prntscr.com/dwblxt
Я так полагаю это из-за символов которые я выделил

Не в сети

#2 16.01.2017 19:03:01

Re: ORM - SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Вопрос решён переводом поля в тип BLOB

Не в сети

#3 16.01.2017 19:13:07

Re: ORM - SQLSTATE[HY000]: General error: 1366 Incorrect string value:

если дело в юникодных символах значит скорее всего в базе, на таблице или на соединении выбрана кодировка отличная от utf8. blob – не решение, а большая неприятность, которая однажды непременно напомнит о себе

Не в сети

#4 16.01.2017 19:29:58

Re: ORM - SQLSTATE[HY000]: General error: 1366 Incorrect string value:

В таблице стоит utf8_unicode_ci
соединение тоже utf-8

'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

Подскажите, а почему проблема, что там может быть такого. Это описание товара, поиск там не нужен, просто вывод информации.
Такая ошибка при импорте из страницы html в базу, исходный код донора тоже под utf-8

Не в сети

#5 17.01.2017 08:13:20

Re: ORM - SQLSTATE[HY000]: General error: 1366 Incorrect string value:

это только настройки соединения. кодировка ещё указывается при создании базы и при создании таблицы. у отдельного поля тоже может быть своя кодировка. можно сдампить только схему базы с помощью mysqldump --no-data dbname и посмотреть подробности

Не в сети

#6 17.01.2017 15:53:33

Re: ORM - SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Сдампил, только поле blob пока не трогал, в конце есть поле tmp_field, текущее поле блоб было аналогичным

CREATE TABLE `catalog` (
  `id` int(10) UNSIGNED NOT NULL,
  `author_id` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `description` blob,
  `price` decimal(10,2) DEFAULT '0.00',
  `it_category` int(11) NOT NULL DEFAULT '0',
  `category_id` int(11) NOT NULL DEFAULT '0',
  `balance` int(11) NOT NULL DEFAULT '0',
  `my_sorting` int(11) NOT NULL DEFAULT '0',
  `image` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `tmp_field` text COLLATE utf8_unicode_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Не в сети

#7 17.01.2017 16:15:03

Re: ORM - SQLSTATE[HY000]: General error: 1366 Incorrect string value:

ну вроде всё правильно. ещё вопрос - когда была ошибка тип поля в миграции был string или text? потому что string - это varchar и по умолчанию ларавель ставит длину 255, а текст явно длиннее. последние версии mysql в плане запросов строже и может быть вместо обрезания строк выдают ошибку.

Не в сети

#8 17.01.2017 16:18:55

Re: ORM - SQLSTATE[HY000]: General error: 1366 Incorrect string value:

public function up()
    {
        Schema::create('catalog', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('author_id');
            $table->string('name')->nullable();
            $table->text('description')->nullable();
            $table->decimal('price', 8, 2)->nullable();
            $table->integer('it_group')->default(0);
            $table->integer('group_id')->default(0);
            $table->integer('balance')->default(0);
            $table->integer('my_sorting')->default(0);
            $table->timestamps();
        });
    }

Вот так выглядела начальная миграция, поле типа text
видимо всё таки в тексте есть символы не поддерживаемые таким типом поля, если вы посмотрите на скриншот в начале, то увидите там что то вроде иконок которые на самом деле не картинки а символы. Видимо без этого типа поля не обойтись

Не в сети

#9 17.01.2017 16:59:54

Re: ORM - SQLSTATE[HY000]: General error: 1366 Incorrect string value:

не факт. это могут быть как уникодные символы и тогда в utf8 они должны прекрасно сохраняться, либо это вообще html - он мог при выводе в браузер отобразиться как html а не текст. ещё вариант - что mysql старой версии. вообще конечно такого быть не должно, надо смотреть что именно он пытался сохранить в поле - в логах ларавеля в storage/logs можно посмотреть текстовую версию сообщения об ошибке

Не в сети

#10 17.01.2017 18:11:54

Re: ORM - SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Next Illuminate\Database\QueryException: SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xF0\x9F\x9A\x8C \xD0...' for column 'description' at row 1 (SQL: insert into `catalog` (`author_id`, `category_id`, `description`, `image`, `it_category`, `name`, `price`) values (377209367, 8223, Размер 42 - 44
Материал: бархат
Посмотреть платье в живую и примерить можно в шоу-руме в Абакане

✏Я нахожусь в шоу-руме не всегда, поэтому предварительно напишите мне сюда (хотя бы часа за 2 до посещения) ➡ https://vk.com/
- Или позвоните 8-

? Как нас найти: https://vk.com/topic-
? Режим работы: https://vk.com/topic-, https://pp.vk.me/c638327/, 0, Платье из бархата, 1860), (377209367, 8223, Размер 42 - 44
Материал: трикотаж
Посмотреть платье в живую и примерить можно в шоу-руме в

Не в сети

#11 17.01.2017 18:15:54

Re: ORM - SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Вот так это видно в блокноте Notepad http://prntscr.com/dwsp5l

Не в сети

#12 18.01.2017 07:46:33

Re: ORM - SQLSTATE[HY000]: General error: 1366 Incorrect string value:

похоже всё дело в том что mysql считает за utf8. вот тут есть решение http://stackoverflow.com/questions/1095 … l-via-jdbc – использовать кодировку utf8mb4. \xF0\x9F\x9A\x8C - вероятно 4-хбайтный utf-символ а в mysql utf8 позволяет только максимум трёхбайтовые. поменять видимо надо как в настройках соединения так и в настройках самого поля (можно сделать через пхпмайадмин). версия mysql должна быть не ниже 5.5

Не в сети

#13 18.01.2017 18:32:58

Re: ORM - SQLSTATE[HY000]: General error: 1366 Incorrect string value:

Спасибо за уделённое время.
Вообще приятно находится на этом форуме ))

Не в сети

Подвал раздела