lege kolom van varbinary formaat

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

J opla

j opla

12/12/2022 16:32:10
Quote Anchor link
Hoi,

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

oud
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
`user_real_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',

nieuw
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
`user_real_name` varbinary(255) NOT NULL DEFAULT '',


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

Quote:
#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?
Gewijzigd op 12/12/2022 16:39:32 door J opla
 
PHP hulp

PHP hulp

25/04/2024 21:18:17
 
- Ariën  -
Beheerder

- Ariën -

12/12/2022 16:38:53
Quote Anchor link
Hoe herstel je de database?
Heb je al een repair geprobeerd?
Gewijzigd op 12/12/2022 16:39:23 door - Ariën -
 
J opla

j opla

12/12/2022 16:41:00
Quote Anchor link
Ik denk dat iets wat leeg is niet kan repareren, ik probeer alleen vanuit een back up terug te plaatsen.
 
- Ariën  -
Beheerder

- Ariën -

12/12/2022 16:45:17
Quote Anchor link
Een lege database bestaat niet. Er zit altijd metadata of structuur in.
Maar hoe laad je die backup in?
 
J opla

j opla

12/12/2022 16:47:08
Quote Anchor link
Nou ja, niet leeg, maar geen inhoud in de tabel ... of zo iets.

Met INSERT via phpadmin probeer ik de inhoud er in te zetten.
 
- Ariën  -
Beheerder

- Ariën -

12/12/2022 16:56:14
Quote Anchor link
Kan je wat concreter zijn wat je precies doet?
En hoe ziet je structuur eruit? Als je geen structuur hebt met dat veld, kan je ook niks INSERT'en.
Gewijzigd op 12/12/2022 16:57:19 door - Ariën -
 
J opla

j opla

12/12/2022 17:01:05
Quote Anchor link
Sorry, ik weet even niet hoe ik concreter moet zijn buiten de sql code hier in te plaatsen, maar dan heb ik een datalek. Maar misschien is dit duidelijk genoeg?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
INSERT INTO tabelnaam VALUES (1,0xhexgetal,0x, etc ....);
Gewijzigd op 12/12/2022 17:03:41 door j opla
 
- Ariën  -
Beheerder

- Ariën -

12/12/2022 17:10:45
Quote Anchor link
Er is geen enkele sprake van een datalek als je dummy data gebruikt.
Dus de geheimzinnigheid mag je achterwege laten, dat helpt ook gemakkelijker.

Maar hoe ziet je structuur er dan uit? Heb je die al?
Gewijzigd op 12/12/2022 17:11:33 door - Ariën -
 
J opla

j opla

12/12/2022 17:15:29
Quote Anchor link
Ja, zie in de eerste bijdrage, daar staat de oude en de nieuwe structuur van de derde kolom. De tweede kolom heeft dezelfde metamorfose ondergaan. Ziet er in structuur net zo uit. De eerste kolom is een id.
Gewijzigd op 12/12/2022 17:24:31 door j opla
 
- Ariën  -
Beheerder

- Ariën -

12/12/2022 17:26:51
Quote Anchor link
Dat gaat over user_real_name, je error beschrijft een missende kolom 0x.
In je INSERT maak ik op dat '0x' een waarde is, en geen tabelnaam.

Daarom raad ik je aan om om de values een single quote te zetten.
 
J opla

j opla

12/12/2022 17:33:25
Quote Anchor link
Ik snap niet wat je bedoeld, moet ik single quote om de integers en binary zetten? Dus ('1','0xhexgetal','0x',enz...)?
 
- Ariën  -
Beheerder

- Ariën -

12/12/2022 17:50:13
Quote Anchor link
Correct. Ik benoem overigens ook altijd mijn veldnamen bij een INSERT-query.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
Gewijzigd op 12/12/2022 17:50:43 door - Ariën -
 
Ad Fundum

Ad Fundum

12/12/2022 19:25:45
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT 0x

Krijg je de foutmelding:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
#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 ''.

Toevoeging op 12/12/2022 19:30:55:

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
x'01af'

Hexadecimale literals zijn ongevoelig voor hoofd- of kleine letters, het maakt niet uit wat je gebruikt.
Gewijzigd op 12/12/2022 19:58:19 door Ad Fundum
 
J opla

j opla

12/12/2022 20:10:21
Quote Anchor link
@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!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.