Mysql
 sql >> база данни >  >> RDS >> Mysql

Промяна на кодирането на символи в MySQL. Запазва ли се целостта на данните?

Всяка колона (тип символен низ). има свой собствен набор от знаци и метаданни за съпоставяне.

Ако, когато вколоната Типът данни на ' е посочен (т.е. кога е бил последно създаден или променен), не е даден изрично набор от знаци/съпоставяне, тогава за колоната ще се използва наборът от символи по подразбиране и съпоставянето на таблицата.

Ако, когато намасата е посочено, не е бил изрично даден набор от символи/съпоставяне по подразбиране, тогава наборът от символи по подразбиране и съпоставянето на базата данни ще бъдат използвани за стандартните за таблицата.

Командите, които цитирате във вашия въпрос, просто променят такива набори от символи/съпоставяния по подразбиране за базата данни и съответно таблицата. С други думи, те ще засегнат само таблици и колони, които са създадени след това – те не засягат съществуващите колони (или данни).

За да актуализирате съществуващите данни, първо трябва да прочетете Промяна на набора от знаци раздел на страницата с ръководството на ALTER TABLE :

За да промените само по подразбиране набор от символи за таблица, използвайте този израз:

ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name;

Думата DEFAULT е по избор. Знаковият набор по подразбиране е наборът от знаци, който се използва, ако не посочите набора от знаци за колони, които добавяте към таблица по-късно (например с ALTER TABLE ... ADD column ).

Когато foreign_key_checks системната променлива е активирана, което е настройката по подразбиране, преобразуването на набор от знаци не е разрешено в таблици, които включват колона от символен низ, използвана в ограничение за външен ключ. Заобиколното решение е да деактивирате foreign_key_checks преди да извършите преобразуване на набора от знаци. Трябва да извършите преобразуването и на двете таблици, включени в ограничението на външния ключ, преди да активирате повторно foreign_key_checks . Ако активирате повторно foreign_key_checks след конвертиране само на една от таблиците, ON DELETE CASCADE или ON UPDATE CASCADE операцията може да повреди данните в референтната таблица поради имплицитно преобразуване, което се случва по време на тези операции (Бъг #45290, Бъг #74816).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да експортирате бази данни през командния ред?

  2. Как работи функцията POSITION() в MySQL

  3. как да се уверите, че записът винаги е в горната част в даден набор от резултати в mysql?

  4. Невалидна стойност по подразбиране за 'dateAdded'

  5. MySQL ред 30153 беше изрязан от грешка GROUP_CONCAT().