Hoi,

In een SQL database is bij een update een aantal kolommen verandert naar een varbinary formaat:

oud
`user_real_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',

nieuw
 `user_real_name` varbinary(255) NOT NULL DEFAULT '',


Ik krijg nu een foutmelding bij het herstellen van de database.

#1054 - Onbekende kolom '0x' in field list


In de insert wordt ",0x," gebruikt voor de betreffende kolom. Moet ik de 0x tussen de komma's geheel verwijderen of moet er iets voor terug komen?
Correct. Ik benoem overigens ook altijd mijn veldnamen bij een INSERT-query.


INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
0x is een prefix voor binaire gegevens. Maar als er geen gegevens zijn dan is een lege string ('') voldoende voor een varbinary kolom. Alleen 0x is geen geldige hexadecimale literal, het proces dat de reservekopie heeft gemaakt, heeft dat niet goed gedaan, of de reservekopie is naderhand gewijzigd.

Als je deze query voert aan MariaDB:
SELECT 0x

Krijg je de foutmelding:
#1054 - Onbekende kolom '0x' in field list

Dus waarschijnlijk is de backup-tool die je gebruikt fout bezig geweest.
Met een beetje geluk kan je dat fixen door in de backup een zoek-en-vervang actie te doen van 0x naar ''.

[size=xsmall]Toevoeging op 12/12/2022 19:30:55:[/size]

J opla op 12/12/2022 17:33:25

Ik snap niet wat je bedoeld [sic], moet ik single quote om de integers en binary zetten? Dus ('1','0xhexgetal','0x',enz...)?

Om strings moeten altijd quotes, anders is het geen string literal. Als je op dezelfde manier van integers een string maakt, zal MySQL / MariaDB impliciet (zonder melding) naar een integer omzetten. Integers en andere numerieke literals hebben geen quotes, dus je kan ze bij nummers gewoon weglaten.
Om hexadecimale byte-reeksen (technisch ook 'strings') die beginnen met 0x, is het niet nodig om quotes te zetten. Wil je toch met quotes werken om waarden van binaire kolommen weer te geven, dan moet je dat weergeven als volgt:
x'01af'

Hexadecimale literals zijn ongevoelig voor hoofd- of kleine letters, het maakt niet uit wat je gebruikt.
@AdFundum

Heel hartelijk bedankt voor de toelichting en de oplossingsrichting, het was inderdaad een kwestie van de 0x voor een lege cel te wijzigen in ''. De andere gegevens hoefden helemaal niet van single quotes te worden voorzien. Na de wijziging werkte de INSERT zoals je zou verwachten en kan ik weer inloggen in mijn site. Nogmaals, Dank voor jouw hulp!

Reageren