van VARCHAR() naar TEXT

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marcus geleyn

marcus geleyn

04/08/2016 08:44:06
Quote Anchor link
Hallo, een vraagje: kan ik in een bestaande database mysqli zo maar de structuur van een veld veranderen van VARCHAR(255) naar TEXT(700) of ben ik dan alle gegevens kwijt die nu onder VARCHAR(255) zijn opgeslagen?
Dank voor een antwoord
 
PHP hulp

PHP hulp

24/11/2024 18:13:16
 
Bart V B

Bart V B

04/08/2016 09:06:32
Quote Anchor link
Ik denk het haast niet.
Maar garantie tot de voordeur. :)
Zou de gegevens eerst backuppen en dan pas veranderen.
Ovigens TEXT hoeft geen aantal te hebben.
 
- Ariën  -
Beheerder

- Ariën -

04/08/2016 09:25:24
Quote Anchor link
Wat voor data sla je in het veld op. Misschien is het niet eens nodig.
 
Marcus geleyn

marcus geleyn

04/08/2016 09:35:32
Quote Anchor link
In dat veld worden gewoon woorden opgeslagen zoals opleiding, ervaring, enz.
 
- Ariën  -
Beheerder

- Ariën -

04/08/2016 09:37:45
Quote Anchor link
Een biografie dus uit eigen hand dus? Of sla je meerdere soorten data daarin op?
 
Marcus geleyn

marcus geleyn

04/08/2016 10:12:35
Quote Anchor link
- Ariën - op 04/08/2016 09:37:45:
Een biografie dus uit eigen hand dus? Of sla je meerdere soorten data daarin op?

Nee, enkel tekst uit eigen han
 
Ivo P

Ivo P

04/08/2016 10:26:52
Quote Anchor link
volgens mij kan het straffeloos, maar als je heel zeker wilt zijn:

ik noem hier de oude varchar kolom "Oud"

voeg een kolom toe "Nieuw" van het type TEXT.

UPDATE tabel SET Nieuw = Oud WHERE 1=1;

verander nu het type van de kolom Oud naar TEXT.
kopieer nu de teksten terug voor de gevallen er een verschil is.

UPDATE tabel SET Oud = Nieuw WHERE Oud != Nieuw;

(Mijn verwachting is hier een melding Affected Rows = 0)

Kolom Nieuw kan vervolgens vervallen.
Let nog even op de tekensets van de betreffende kolommen.


---
Waarom ik niet kies voor vervallen van de kolom Oud en het renamen van de kolom Nieuw naar Oud?
om te voorkomen dat Mysql daar vervolgens een verwijder-kolom en voeg-kolom-weer-toe actie aan verbindt.
 
Marcus geleyn

marcus geleyn

04/08/2016 10:38:20
Quote Anchor link
Ok bedankt iedereen, ik denk dat ik nu verder kan en deze topic mag afsluiten.
 
Thomas van den Heuvel

Thomas van den Heuvel

04/08/2016 13:56:18
Quote Anchor link
Ivo P op 04/08/2016 10:26:52:
Waarom ik niet kies voor vervallen van de kolom Oud en het renamen van de kolom Nieuw naar Oud?
om te voorkomen dat Mysql daar vervolgens een verwijder-kolom en voeg-kolom-weer-toe actie aan verbindt.

Wat is het bezwaar daar tegen dan? Wat je nu doet is een stuk omslachtiger. Het begin leek mij goed:
0. maak een backup
1. creeer TEXT kolom
2. kopieer data van VARCHAR kolom naar TEXT kolom
3. controleer (steekproefsgewijs) of alles ok is in de TEXT kolom (al zie ik niet helemaal wat hier uberhaupt mis zou kunnen gaan, als text in een VARCHAR kolom past past deze zeker in een TEXT kolom)
4. drop VARCHAR kolom
5. hernoem TEXT kolom naar de naam van de VARCHAR kolom
 
Ivo P

Ivo P

04/08/2016 14:05:39
Quote Anchor link
de vraag is, wat renamen van een kolom precies doet.
Verandert die een labeltje ergens, of maakt dat effectief een geheel nieuwe kolom aan om de inhoud te kopieren?

Volgens mij deed Mysql namelijk wel zo iets bij het renamen van een tabel.

--
strikt genomen sla ik jouw stap 1 over: ik maak Nieuw in feite de backup, maar dan wel binnen dezelfde tabel. Mocht je tabel ergens in dit proces kapot gaan, dan is de backup dus ook kwijt.

Eerlijk gezegd zou ik doorgaans direct voor het aanpassen naar TEXT gaan, tenzij de database heel belangrijk is en ik niet kan terugvallen op de backup van afgelopen nacht wegens te veel updates in de dag.
 
Thomas van den Heuvel

Thomas van den Heuvel

04/08/2016 14:31:40
Quote Anchor link
Quote:
de vraag is, wat renamen van een kolom precies doet.
Verandert die een labeltje ergens, of maakt dat effectief een geheel nieuwe kolom aan om de inhoud te kopieren?

Maar wat test je in jouw geval voordat je "Oud" omzet? De "Nieuw" kolom? Maar dan test je toch het verkeerde ding voordat je de definitieve conversie uitvoert? In mijn opzet controleer je de "Nieuw" kolom omdat je deze ook uiteindelijk gaat gebruiken. Tot die tijd (de defintieve omzetting) blijft alles werken zoals voorheen.

Daarnaast lijkt het mij niet uitmaken wat er precies onder water gebeurt omdat dit toch een eenmalige omzetting is.

Quote:
strikt genomen sla ik jouw stap 1 over: ik maak Nieuw in feite de backup, maar dan wel binnen dezelfde tabel. Mocht je tabel ergens in dit proces kapot gaan, dan is de backup dus ook kwijt.

Dit gaat ook op voor jouw aanpak. En daarvoor had ik stap 0 :). Ook denk ik dat als dit een wezenlijk gevaar zou zijn (tabellen die bij redelijk rechttoe rechtaan structuurwijzigingen uit elkaar vallen) je hele andere problemen hebt.

Quote:
Eerlijk gezegd zou ik doorgaans direct voor het aanpassen naar TEXT gaan, tenzij de database heel belangrijk is en ik niet kan terugvallen op de backup van afgelopen nacht wegens te veel updates in de dag.

Dat kan natuurlijk ook altijd. Na het maken van een backup van de tabel :). Tenzij deze heel vaak inhoudelijk verandert. Maar dan zou je een onderhoudsmoment moeten inlassen waarbij je tijdelijke downtime hebt ofzo. Omdat de topicstarter daar niets over zegt kunnen we daar ook niet op anticiperen. In beginsel moet je er van uitgaan dat iets gewoon simpel is.
 
Ward van der Put
Moderator

Ward van der Put

04/08/2016 14:37:49
Quote Anchor link
Storage, Performance, and Concurrency Considerations
Quote:
In most cases, ALTER TABLE makes a temporary copy of the original table. MySQL waits for other operations that are modifying the table, then proceeds. It incorporates the alteration into the copy, deletes the original table, and renames the new one.
 
Ivo P

Ivo P

04/08/2016 14:52:27
Quote Anchor link
@Ward Ik denk dat dat de tekst is waar ik het over had.

Maar toevoegen van een kolom, is natuurlijk ook al een alter table.

@Thomas.
Ik bedoel inderdaad jouw stap 0 en niet 1 die ik miste. (en ik heb het idee dat je mijn opmerkingen over de beperking van mijn verhaal ziet als opmerkingen over jouw verhaal)

In elk geval zijn we het er denk ik allemaal over eens dat een backup maken van belang kan zijn.

Hoe belangrijker en groter de dataset en hoe moeilijker te reproduceren, hoe groter de kans lijkt te zijn dat het mis gaat.
 



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.