나는 이것을 시도했습니다 :https://serverfault.com/a/65572/603515
하지만 변경하려는 데이터베이스만 대상으로 하도록 약간 변경했습니다.
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
하지만 그것은 나에게 말하고 있습니다 :
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'
utf8mb4_bin
MySQL utf8이 3바이트만 사용하는 실제 utf8이 아니라고 들었기 때문에 원합니다 .
쿼리나 명령을 편집하여 변경하려면 어떻게 해야 합니까? 현재 이는 기본 스웨덴어 데이터 정렬입니다.
MySQL 버전:
$ mysql -V
mysql Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using EditLine wrapper
답변1
utf8mb4_bin
"문자 집합"이 아닌 "데이터 정렬"입니다. 해당 문자 세트는 단순히 utf8mb4
.
5.5 이전 버전에는 charset utf8mb4가 없습니다.
단순히 전체 데이터베이스의 모든 테이블의 모든 텍스트 컬럼을 변환하는 것은 불가능합니다.
그러면 단일 테이블의 모든 텍스트( VARCHAR
및 ) 열이 변환됩니다 .TEXT
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4;
나는 문자 세트를 수정한 후에도 당신이 제안한 복잡한 mysql을 신뢰하지 않을 것입니다. 를 사용할 때 명확하지 않은 몇 가지 문제가 있습니다 -e
. 대신 을 실행하여 SELECT
의 목록을 생성한 ALTERs
다음 이를 복사하여 에 붙여넣습니다 mysql
.
"테이블"을 변경하면 기본 문자 세트만 변경됩니다.미래열을 추가할 수 있습니다.
CONVERT TO
열을 변경합니다. 즉, 데이터의 인코딩을 변경하고 열 정의를 변경합니다. 현재 열이 있습니까 utf8
? 어떤 버전의 MySQL을 실행하고 있나요?