Есть нужда хранить айдишник в формате UUID
Почитав различные источники было решено генерировать uuid, переводить его в бинарник и в таком виде хранить в БД, а при выводе конвертировать его из бинарного вида в обычный uuid
Что было сделано:
В миграции:
$table->binary('id')->primary();
В модели:
parent::creating(static function (self $model) {
$model->setIncrementing(false);
$model->{$model->getKeyName()} = Uuid::uuid4()->toString();
});
Все это хорошо работает но в sqlite, при миграции в postgres происходит ошибка:
SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding "UTF8": 0x85 (SQL: insert into "users" ("name", "email", "email_verified_at", "password", "remember_token", "id", "updated_at", "created_at") values (Rocky Bartoletti, coy.pouros@example.org, 2020-05-06 08:03:08, $2y$10$b/4r5FCM5tlAj6XG1fu7Ie4OPFmS5BhU3ssKAswbo2yUTYerOpI2W, IctZ1tOPQg, ��z�]�Dq�7��6L�
, 2020-05-06 08:03:08, 2020-05-06 08:03:08))
С постгресом пока что на Вы и не могу понять что он от меня хочет.. Как я понял из интернетов он плохо воспринимает бинарник в UTF'е
Колонка которая создается при миграции имеет формат bytea
Попробовал скопировать данный запрос и вставить напрямую в бд:
insert into "users" ("name", "email", "email_verified_at", "password", "remember_token", "id", "updated_at",
"created_at")
values ('Rocky Bartoletti', 'coy.pouros@example.org', '2020-05-06 08:03:08', '$2y$10$b/4r5FCM5tlAj6XG1fu7Ie4OPFmS5BhU3ssKAswbo2yUTYerOpI2W', 'IctZ1tOPQg', '��z�]�Dq�7��6L�
', '2020-05-06 08:03:08', '2020-05-06 08:03:08')
Вставилось все ок, но возможно это из-за ковычек, без ковычек он ругается на ']', но думаю что он просто попробовал перевести в строку и на самом деле там другой знак
В общем, я уже не понимаю что тут надо делать и куда смотреть.. Хранить UUID просто в текстовом варианте можно, но это слишком просто. Хотелось бы разобраться что тут не так