invalid byte sequence for encoding "UTF8": 0x00
Laravel app, just moved from MySQL to PostgreSQL. The full message as Laravel shows it:
Why it happens
Some MySQL text values contain NUL bytes (often from binary data or bad imports). Postgres text can't store them, so the load fails.
Fix
Silent variant: through PHP's pdo_pgsql (PHP 8.4, Postgres 17), a bound value 'a\0b' was stored as 'a' with no error. Everything after the NUL is lost. Check before you copy. Tested on MariaDB 11.8 and Postgres 17.
More fixes like this one, as tested scripts: Laravel Postgres Error Fix Pack ($19).
Several errors at once? Paste your log into the error matcher. Raw SQL with MySQL syntax: the free SQL translator. Not migrated yet: the free schema risk check finds this kind of problem before the switch. Planning the whole move: Migration Kit ($49, $34.30 with LAUNCH30 until Nov 5).
Other errors after MySQL to Postgres
duplicate key value violates unique constraint "users_pkey"column "users.name" must appear in the GROUP BY clause or be used in an aggregate functionvalue "3000000000" is out of range for type integeroperator does not exist: boolean = integeroperator does not exist: character varying = integerdate/time field value out of range: "0000-00-00 00:00:00"column "a@x.com" does not existsyntax error at or near "`"function ifnull(text, unknown) does not existcurrent transaction is aborted, commands ignored until end of transaction block(no error) search or login finds nothing: WHERE email LIKE ... returns 0 rows