Ändern der Sortierung aller Tabellen und Spalten in MySQL

Ändern der Sortierung aller Tabellen und Spalten in MySQL

Ich habe versucht, Folgendes zu tun:https://serverfault.com/a/65572/603515

Ich habe es jedoch leicht geändert, um nur die Datenbank anzusprechen, die ich ändern möchte.

mysql -B -N --host=localhost --user=root --password=secret \
      -e "select CONCAT('alter table ',TABLE_SCHEMA,'.',
          TABLE_NAME,' charset=utf8mb4_bin;')
        from information_schema.TABLES WHERE TABLE_SCHEMA = 'usda_nndsr'; 
     select CONCAT('alter table ',TABLE_SCHEMA,'.',TABLE_NAME,' alter column ',
         COLUMN_NAME,' charset=utf8mb4_bin;')
         from information_schema.COLUMNS WHERE TABLE_SCHEMA ='usda_nndsr';" |
     mysql --host=localhost --user=root --password=secret

aber es sagt mir:

mysql: mysql: [Warning] Using a password on the command line interface can be insecure.[Warning] Using a password on the command line interface can be insecure.

ERROR 1115 (42000) at line 1: Unknown character set: 'utf8mb4_bin'

Ich möchte es utf8mb4_bin, weil ich gehört habe, dass MySQL UTF8 kein echtes UTF8 ist, da es nur 3 Bytes verwendet.

Wie kann ich meine Abfrage oder meinen Befehl bearbeiten, um die Änderung vorzunehmen? Derzeit ist dies die standardmäßige schwedische Sortierung.

MySQL-Version:

$ mysql -V
mysql  Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using  EditLine wrapper

Antwort1

utf8mb4_binist eine „Sortierung“, kein „Zeichensatz“. Der entsprechende Zeichensatz ist einfach utf8mb4.

Versionen vor 5.5 hatten den Zeichensatz utf8mb4 nicht.

Es ist nicht möglich, einfach alle Textspalten aller Tabellen in einer gesamten Datenbank zu konvertieren.

VARCHARDadurch werden alle Textspalten ( und TEXT) einer einzelnen Tabelle konvertiert :

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4;

Ich würde dem komplexen MySQL, das Sie vorschlagen, nicht vertrauen, selbst wenn Sie den Zeichensatz korrigiert haben. Es gibt mehrere Punkte, die mir bei der Verwendung unklar sind -e. Stattdessen würde ich ausführen, SELECTum eine Liste von zu generieren ALTERs, und diese dann in kopieren und einfügen mysql.

Das Ändern der "Tabelle" ändert nur den Standardzeichensatz für alleZukunftSpalten, die Sie hinzufügen könnten.

CONVERT TOändert die Spalten – sowohl die Kodierung in den Daten als auch die Definition der Spalte. Sind die Spalten aktuell utf8? Welche MySQL-Version verwenden Sie?

verwandte Informationen