몇 가지 단계로 보이 므로이 게시물에 대한 전체 답변을 얻기 위해 몇 개의 게시물을 결합하고 싶었습니다.
- 위의 조언은 @madtracey
/etc/mysql/my.cnf
또는 /etc/mysql/mysql.conf.d/mysqld.cnf
[mysql]
default-character-set=utf8mb4
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
##
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
다시 조언 모든 JDBC 연결이 있었다 위 characterEncoding=UTF-8
하고 characterSetResults=UTF-8
그들로부터 제거
이 세트 -Dfile.encoding=UTF-8
로 아무런 차이가없는 것처럼 보입니다.
위와 동일한 실패로 인해 여전히 국제 텍스트를 DB에 쓸 수 없습니다.
이제이 방법을 사용하여 전체 MySQL 데이터베이스 데이터베이스 문자 집합과 데이터 정렬 UTF-8로 변환
사용할 모든 DB를 업데이트하십시오. utf8mb4
ALTER DATABASE YOURDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
렁이 필요한 것을 제공하는이 쿼리를 실행하십시오.
SELECT CONCAT(
'ALTER TABLE ', table_name, ' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ',
'ALTER TABLE ', table_name, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ')
FROM information_schema.TABLES AS T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` AS C
WHERE C.collation_name = T.table_collation
AND T.table_schema = 'YOURDB'
AND
(C.CHARACTER_SET_NAME != 'utf8mb4'
OR
C.COLLATION_NAME not like 'utf8mb4%')
편집기에서 붙여 넣기 출력 복사 모두 바꾸기 | 올바른 DB에 연결되면 mysql에 다시 게시되는 것이 없습니다.
그것이 완료되어야 할 전부이며 모두 나를 위해 일하는 것 같습니다. - Dfile.encoding=UTF-8
가 활성화되어 있지 않으며 예상대로 작동하는 것 같습니다.
E2A 여전히 문제가 있습니까?
나는 확실히 생산 중이므로 때로는 작동하지 않기 때문에 위의 작업을 확인해야한다는 것이 밝혀졌습니다.이 시나리오의 이유는 다음과 같습니다.
show create table user
`password` varchar(255) CHARACTER SET latin1 NOT NULL,
`username` varchar(255) CHARACTER SET latin1 NOT NULL,
일부는 여전히 라틴어가 수동으로 레코드를 업데이트하려고 시도하는 것을 볼 수 있습니다.
ALTER TABLE user CONVERT TO CHARACTER SET utf8mb4;
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
좁 히자 :
mysql> ALTER TABLE user change username username varchar(255) CHARACTER SET utf8mb4 not NULL;
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
mysql> ALTER TABLE user change username username varchar(100) CHARACTER SET utf8mb4 not NULL;
Query OK, 5 rows affected (0.01 sec)
즉, 업데이트가 작동하려면 해당 필드의 크기를 줄여야했습니다.
이제 내가 달릴 때 :
mysql> ALTER TABLE user CONVERT TO CHARACTER SET utf8mb4;
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0
모두 작동합니다