sql >> Database teknologi >  >> RDS >> Mysql

MySQL-tegnkodningsændring. Er dataintegriteten bevaret?

Hver (tegnstreng-type) kolonne har sin egen tegnsæt og sorteringsmetadata.

Hvis, når kolonnen s datatype blev angivet (dvs. hvornår den sidst blev oprettet eller ændret), intet tegnsæt/sortering blev eksplicit angivet, så ville tabellens standardtegnsæt og sortering blive brugt til kolonnen.

Hvis, når tabellen blev angivet, blev der ikke eksplicit angivet noget standardtegnsæt/sortering, så ville databasens standardtegnsæt og sortering blive brugt til tabellens standard.

De kommandoer, du citerer i dit spørgsmål, ændrer blot sådanne standardtegnsæt/-sammenstillinger for henholdsvis databasen og tabellen. Med andre ord vil de kun påvirke tabeller og kolonner, der oprettes derefter – de vil ikke påvirke eksisterende kolonner (eller data).

For at opdatere eksisterende data skal du først læse Ændring af tegnsættet afsnittet på manualsiden på ALTER TABLE :

For kun at ændre standarden tegnsæt til en tabel, brug denne sætning:

ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name;

Ordet DEFAULT er valgfri. Standardtegnsættet er det tegnsæt, der bruges, hvis du ikke angiver tegnsættet for kolonner, som du tilføjer til en tabel senere (f.eks. med ALTER TABLE ... ADD column ).

Når foreign_key_checks systemvariablen er aktiveret, hvilket er standardindstillingen, tegnsætkonvertering er ikke tilladt i tabeller, der inkluderer en tegnstrengskolonne, der bruges i en fremmednøglebegrænsning. Løsningen er at deaktivere foreign_key_checks før tegnsætkonverteringen udføres. Du skal udføre konverteringen på begge tabeller, der er involveret i den fremmede nøgle-begrænsning, før du genaktiverer foreign_key_checks . Hvis du genaktiverer foreign_key_checks efter kun at have konverteret én af tabellerne, en ON DELETE CASCADE eller ON UPDATE CASCADE operation kan ødelægge data i referencetabellen på grund af implicit konvertering, der finder sted under disse operationer (fejl #45290, fejl #74816).




  1. Er det muligt at bruge flere/indlejrede MySQLi-sætninger?

  2. Hvordan kombinerer jeg en SELECT + WHERE-forespørgsel med en INSERT-forespørgsel?

  3. Brug af DISTINCT inde i JOIN skaber problemer

  4. Forskel mellem tabelfunktion og rørledningsfunktion?