Intenté hacer esto:https://serverfault.com/a/65572/603515
Pero lo cambié ligeramente para apuntar solo a la base de datos que quiero cambiar.
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
pero me dice:
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'
Lo quiero utf8mb4_bin
porque escuché que MySQL utf8 no es un utf8 real que usa solo 3 bytes.
¿Cómo puedo editar mi consulta o comando para realizar el cambio? Actualmente es la intercalación sueca predeterminada.
Versión MySQL:
$ mysql -V
mysql Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using EditLine wrapper
Respuesta1
utf8mb4_bin
es una "intercalación", no un "conjunto de caracteres". El juego de caracteres correspondiente es simplemente utf8mb4
.
Las versiones anteriores a la 5.5 no tenían el juego de caracteres utf8mb4.
No es fácil convertir todas las columnas de texto de todas las tablas en una base de datos completa.
Esto convertirá todas las columnas de texto ( VARCHAR
y TEXT
) de una sola tabla:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4;
No confiaría en el complejo mysql que propones, incluso después de arreglar el juego de caracteres. Hay varias cuestiones que no tengo claras al utilizar -e
. En su lugar, ejecutaría SELECT
para generar una lista de ALTERs
, luego los copiaría y pegaría en mysql
.
Cambiar la "tabla" solo cambia el juego de caracteres predeterminado para cualquierfuturocolumnas que podría agregar.
CONVERT TO
cambia las columnas, alterando la codificación de los datos y cambiando la definición de la columna. ¿Están las columnas actualmente utf8
? ¿Qué versión de MySQL estás ejecutando?