phpMyAdmin
 sql >> база данни >  >> Database Tools >> phpMyAdmin

Какво ще се случи със съществуващите данни, ако променя съпоставянето на колона в MySQL?

Статията http://mysqldump.azundris.com/archives/60 -Handling-character-sets.html обсъжда това подробно и също така показва какво ще се случи.

Моля, имайте предвид, че смесвате НАБОР СИМВОВЕ (всъщност кодиране) с COLLATION.

Набор от символи дефинира физическото представяне на низ в байтове на диска. Можете да направите това видимо, като използвате функцията HEX(), например SELECT HEX(str) FROM t WHERE id = 1 за да видите как MySQL съхранява байтовете на вашия низ. Това, което MySQL ви доставя, може да е различно в зависимост от набора от знаци на вашата връзка, дефиниран с SET NAMES .... .

Съпоставянето е ред на сортиране. Зависи от набора от символи. Например вашите данни може да са в набора от символи latin1, но те могат да бъдат подредени според един от двата немски реда за сортиране latin1_german1_ci или latin1_german2_ci. В зависимост от вашия избор, Umlauts като ö ще се сортират като oe или като o.

Когато променяте набор от знаци, данните във вашата таблица трябва да бъдат пренаписани. MySQL ще прочете всички данни и всички индекси в таблицата, ще направи скрито копие на таблицата, което временно заема дисково пространство, след това премества старата таблица на скрито място, премества скритата таблица на място и след това пуска старите данни, освобождавайки увеличаване на дисковото пространство. За известно време между тях ще ви трябва два пъти повече място за съхранение за това.

Когато променяте съпоставяне, редът на сортиране на данните се променя, но не и самите данни. Ако колоната, която променяте, не е част от индекс, не трябва да се прави нищо, освен да се пренапише frm файла, а достатъчно новите версии на MySQL не трябва да правят повече.

Когато променяте сортиране на колона, която е част от индекс, индексът трябва да бъде пренаписан, тъй като индексът е сортиран откъс от таблица. Това отново ще задейства логиката за копиране на таблица ALTER TABLE, описана по-горе.

MySQL се опитва да запази данните, като прави това:Докато данните, които имате, могат да бъдат представени в целевия набор от знаци, преобразуването няма да бъде със загуба. Предупрежденията ще бъдат отпечатани, ако има съкращаване на данни и данните, които не могат да бъдат представени в целевия набор от знаци, ще бъдат заменени с ?



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Как да дефинирате отложено ограничение в MySQL

  2. Как мога да стартирам заявка няколко пъти в phpmyadmin?

  3. PHPMYADMIN ,,Грешка при обработката на заявката Код на грешката:200 Текст на грешката:OK

  4. MySQL не показва бази данни, създадени в phpMyAdmin

  5. Инсталиране на phpMyAdmin с Nginx на CentOS 8