Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Здравствуйте,
столкнулся вот с такой проблемой при вставке данных в базу
скриншот
http://prntscr.com/dwblxt
Я так полагаю это из-за символов которые я выделил
Не в сети
Вопрос решён переводом поля в тип BLOB
Не в сети
Не в сети
В таблице стоит 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
Не в сети
это только настройки соединения. кодировка ещё указывается при создании базы и при создании таблицы. у отдельного поля тоже может быть своя кодировка. можно сдампить только схему базы с помощью mysqldump --no-data dbname и посмотреть подробности
Не в сети
Сдампил, только поле 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;
Не в сети
ну вроде всё правильно. ещё вопрос - когда была ошибка тип поля в миграции был string или text? потому что string - это varchar и по умолчанию ларавель ставит длину 255, а текст явно длиннее. последние версии mysql в плане запросов строже и может быть вместо обрезания строк выдают ошибку.
Не в сети
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
видимо всё таки в тексте есть символы не поддерживаемые таким типом поля, если вы посмотрите на скриншот в начале, то увидите там что то вроде иконок которые на самом деле не картинки а символы. Видимо без этого типа поля не обойтись
Не в сети
не факт. это могут быть как уникодные символы и тогда в utf8 они должны прекрасно сохраняться, либо это вообще html - он мог при выводе в браузер отобразиться как html а не текст. ещё вариант - что mysql старой версии. вообще конечно такого быть не должно, надо смотреть что именно он пытался сохранить в поле - в логах ларавеля в storage/logs можно посмотреть текстовую версию сообщения об ошибке
Не в сети
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
Материал: трикотаж
Посмотреть платье в живую и примерить можно в шоу-руме в
Не в сети
Вот так это видно в блокноте Notepad http://prntscr.com/dwsp5l
Не в сети
похоже всё дело в том что mysql считает за utf8. вот тут есть решение http://stackoverflow.com/questions/1095 … l-via-jdbc – использовать кодировку utf8mb4. \xF0\x9F\x9A\x8C - вероятно 4-хбайтный utf-символ а в mysql utf8 позволяет только максимум трёхбайтовые. поменять видимо надо как в настройках соединения так и в настройках самого поля (можно сделать через пхпмайадмин). версия mysql должна быть не ниже 5.5
Не в сети
Спасибо за уделённое время.
Вообще приятно находится на этом форуме ))
Не в сети