MySLQ에서 UPDATA 및 INSERT 데이터를 사용할 때 데이터에 ?, ?, ?와 같은 이모티콘 아이콘이 있으면 쉽게 업데이트되거나 삽입에 실패하여 오류가 발생합니다.
Error: ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value: '\xF0\x9F\x91\xBD\xF0\x9F...' for column 'name' at row
거의 무너지긴 했지만 다행히 이 유령 문제는 드디어 해결되었습니다. 데이터에 나타난 이유는 MYSQL 5.5 이전에는 UTF8 인코딩이 1~3바이트만 지원하고, BMP 부분의 유니코드 인코딩 영역만 지원했고, 이모티콘 아이콘은 우연히 4바이트 인코딩으로 저장되었기 때문이다. MYSQL5.5부터 4바이트 UTF 인코딩 utf8mb4가 지원될 수 있습니다. 문자는 최대 4바이트를 가질 수 있으므로 더 많은 문자 집합을 지원할 수 있습니다. 따라서 문제를 해결하려면 데이터베이스 테이블의 모든 문자 인코딩을 utf8mb4로 변경해야 합니다.
추천: mysql 비디오 튜토리얼
공통 문자 세트
ASCII: American Information Interchange Standard Encoding, 영어 및 기타 서유럽 언어, 1바이트 인코딩, 총 128자.
GBK: 2바이트, 한자 내부 코드 확장 사양, 중국어, 일본어 및 한국어 한자, 영어, 숫자 총 21,003자의 한자가 포함됩니다. GB2312.
UTF-8: 유니코드 표준 가변 길이 문자 인코딩, 전 세계 수십 개의 텍스트 시스템을 포함한 업계의 통합 표준인 유니코드 표준; UTF-8: 1~3바이트를 사용하여 각 문자를 인코딩합니다.
utf8mb4: 4바이트를 저장합니다. 이모티콘 표현은 4바이트일 수 있으므로 애플리케이션 시나리오는 이모티콘 표현을 저장하는 데 사용됩니다.
utf8mb4: MySQL 버전 > 5.5.3.
기타 일반적인 문자 집합: UTF-32, UTF-16, Big5, latin1
데이터베이스의 문자 집합에는 두 가지 수준의 의미가 포함되어 있습니다
#🎜🎜 #Each 다양한 국가의 문자, 구두점, 그래픽 기호, 숫자 등을 포함한 문자 및 기호 모음입니다. 문자의 인코딩 방법, 즉 바이너리 데이터와 문자 간의 매핑 규칙입니다.시스템 환경
MySQL 5.7.14
Mac OSX 10.11.6#🎜🎜 #
먼저 백업하세요데이터 업그레이드 전 서버에 있는 모든 데이터를 백업해두시고, 좋은 습관 유지, 안전이 최우선!
MySQL 업그레이드새 데이터베이스는 여기에서 다운로드할 수 있습니다MySQL 서버를 v5.5.3으로 업그레이드하세요#🎜 🎜 #.
데이터베이스, 테이블, 필드 수정# 对每一个数据库: ALTER DATABASE 这里数据库名字 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; # 对每一个表: ALTER TABLE 这里是表名字 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 对每一个字段: ALTER TABLE 这里是表名字 CHANGE 字段名字 重复字段名字 VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 上面一句或者使用modify来更改 ALTER TABLE 这里是表名字 modify 字段名字 VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '';
필드와 인덱스 확인
모든 것을 utf8mb4로 설정하지 마세요. 필수입니다. 내 필드 유형 중 일부가 VARCHAR인 경우에만 utf8mb4로 설정했습니다.MySQL 구성 파일 수정
여기가 가장 혼란스럽습니다. Mac OSX에서 /etc/my.cnf를 찾을 수 없습니다. system 은 전혀 존재하지 않으므로 그러한 파일을 생성하고 수정해야 합니다.# 进入这个目录, # 在这个目录下面有个后缀为`.cnf`的文件 cd /usr/local/mysql/support-files/ # 将这个文件复制到`etc`目录中并将名字命名为`my.cnf` sudo cp my-default.cnf /etc/my.cnf # 然后编辑`my.cnf`文件,将下面内容复制到里面。 sudo vim /etc/my.cnf
시작:/usr/local/mysql/support-files/mysql.server 시작
중지:/usr/local/mysql/support-files/mysql.server 중지 Restart:/usr/local/mysql/support-files/mysql.server restart시스템은 이 형식으로 다시 시작, 중지 또는 시작할 수 있습니다service mysqld stop service mysqld start service mysqld restart
다음 명령어를 사용하여 설정 성공 여부를 확인해보세요!
# 登陆MySQL进行查询 mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; # 运行上面代码显示下面结果 # +--------------------------+--------------------+ # | Variable_name | Value | # +--------------------------+--------------------+ # | character_set_client | utf8mb4 | # | character_set_connection | utf8mb4 | # | character_set_database | utf8mb4 | # | character_set_filesystem | binary | # | character_set_results | utf8mb4 | # | character_set_server | utf8mb4 | # | character_set_system | utf8 | # | collation_connection | utf8mb4_unicode_ci | # | collation_database | utf8mb4_unicode_ci | # | collation_server | utf8mb4_unicode_ci | # +--------------------------+--------------------+ # 查看表的情况 mysql> SHOW FULL COLUMNS FROM users_profile;
이 시점에서는 성공했다는 의미입니다! 축하해요! ~
테이블 복구 및 최적화이 단계에 도달했으며 테이블을 복구하고 최적화할 필요가 없습니다. 안전한 측면에서, 저는 이 두 명령을 읽었습니다. 비록 그 용도가 무엇인지는 모르겠지만, 여기에 넣고 메모해 두겠습니다.
REPAIR TABLE 表名字; OPTIMIZE TABLE 表名字;
위 내용은 MySQL은 이모티콘 아이콘 저장을 지원합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!