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_bin
ist 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.
VARCHAR
Dadurch 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, SELECT
um 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?