sql >> Database >  >> RDS >> Mysql

Effecten van het bijwerken van een tabel met rijen van utf8_turkish_ci naar utf8_general_ci?

De gegevens van uw kolommen worden opgeslagen met behulp van een tekenset. In dit geval lijkt het utf8 te zijn.

Wanneer u op die kolommen werkt (bijvoorbeeld gelijkheidsvergelijkingen of bestellen), gebruikt MySQL een sortering. Elke kolom heeft een standaardsortering, die wordt geërfd van de standaardsortering van de tabel.

In indexen is de standaardsortering van de kolom ingebakken, zodat ze efficiënt kunnen functioneren.

U kunt een gelijkheidsvergelijking maken die wordt gekwalificeerd door sortering. Bijvoorbeeld in een JOIN u kunt specificeren

ON (turkish.village_name COLLATE utf8_general_ci) = euro.village_name

of misschien

ON turkish.village_name = (euro.village_name COLLATE utf8_turkish_ci)

Dat zou uw illegale mix van sorteringen moeten elimineren zonder dat u uw tabel hoeft te wijzigen. Dit kan u helpen de databasewijziging waar u om vraagt, te vermijden. Maar pas op, met behulp van de COLLATE kwalificatie kan het gebruik van een index verslaan. Als je een grote tabel hebt en je vertrouwt op indexen voor prestaties, kan dit nutteloos zijn.

Wat gebeurt er als u uw tabellen wijzigt om de standaardsortering te wijzigen?

  1. Uw gegevens veranderen niet (tenzij u ook de tekenset wijzigt). Dat is goed.
  2. Alle indexen met kolommen met sorteringen worden opnieuw gegenereerd.
  3. Uw vergelijkingen en bestellingen kunnen veranderen. Ik ken geen Turks, dus ik kan je niet vertellen wat er zou kunnen breken. Maar bijvoorbeeld in het Spaans de letters N en Ñ zijn niet hetzelfde. N komt voor Ñ in een Spaanse collatie, maar in de algemene collatie worden ze als hetzelfde behandeld. Er kan een aspect van het Turkse alfabet zijn dat hetzelfde werkt, dus uw ORDER BY resultaten zullen onjuist zijn.

Maar u kunt dat oplossen door een COLLATE . op te geven modifier in uw ORDER BY clausule.

ORDER BY (euro.village_name COLLATE utf8_turkish_ci)



  1. Oracle + Oci8 + php5.6 + Ubuntu 16.04

  2. Rails 3.2 Postgres Save Error ActiveRecord::StatementInvalid:PG::Error:ERROR:Syntaxisfout bij 'T' op positie 5

  3. waar kan ik mysql.data.dll voor c# vinden

  4. Ondersteunt MySQL controlebeperkingen?