sql >> Database teknologi >  >> Database Tools >> phpMyAdmin

Hvad sker der med eksisterende data, hvis jeg ændrer sammenstillingen af ​​en kolonne i MySQL?

Artiklen http://mysqldump.azundris.com/archives/60 -Handling-character-sets.html diskuterer dette indgående og viser også, hvad der vil ske.

Bemærk venligst, at du blander et CHARACTER SET (faktisk en kodning) med en COLLATION.

Et tegnsæt definerer den fysiske repræsentation af en streng i bytes på disken. Du kan gøre dette synligt ved at bruge HEX()-funktionen, for eksempel SELECT HEX(str) FROM t WHERE id = 1 for at se, hvordan MySQL gemmer bytes af din streng. Hvad MySQL leverer til dig kan være forskelligt afhængigt af tegnsættet for din forbindelse, defineret med SET NAMES .... .

En sortering er en sorteringsrækkefølge. Det afhænger af tegnsættet. For eksempel kan dine data være i latin1-tegnsættet, men det kan være ordnet i henhold til en af ​​de to tyske sorteringsrækkefølger latin1_german1_ci eller latin1_german2_ci. Afhængigt af dit valg vil Umlauts såsom ö enten sortere som oe eller som o.

Når du ændrer et tegnsæt, skal dataene i din tabel omskrives. MySQL vil læse alle data og alle indekser i tabellen, lave en skjult kopi af tabellen, som midlertidigt optager diskplads, flytter derefter den gamle tabel til en skjult placering, flytter den skjulte tabel på plads og taber derefter de gamle data, hvilket frigør op på diskplads. I nogen tid imellem skal du bruge to gange lagerpladsen til det.

Når du ændrer en sortering, ændres sorteringsrækkefølgen af ​​dataene, men ikke selve dataene. Hvis kolonnen, du ændrer, ikke er en del af et indeks, skal der ikke gøres noget udover at omskrive frm-filen, og tilstrækkeligt nyere versioner af MySQL burde ikke gøre mere.

Når du ændrer en sammenstilling af en kolonne, der er en del af et indeks, skal indekset omskrives, da et indeks er et sorteret uddrag af en tabel. Dette vil igen udløse ALTER TABLE tabelkopilogikken skitseret ovenfor.

MySQL forsøger at bevare data ved at gøre dette:Så længe de data, du har, kan repræsenteres i måltegnsættet, vil konverteringen ikke være tabsgivende. Advarsler vil blive udskrevet, hvis der er datatrunkering i gang, og data, der ikke kan repræsenteres i måltegnsættet, vil blive erstattet af ?



  1. Nulstil MySQL root-adgangskoden til standard - MAMP

  2. Databasevalg mislykkedes. Ukendt databasefejl på phpmyAdmin

  3. vis Opret kommandoer til tabel i SQL Management Studio (2008)

  4. Hvordan får jeg vist mine lagrede procedurer i phpMyAdmin?