위챗 애플릿 위챗 개발 mysql은 이모티콘 표현(WeChat 개발 사용자 닉네임..)을 저장합니다.

mysql은 이모티콘 표현(WeChat 개발 사용자 닉네임..)을 저장합니다.

Feb 15, 2017 am 10:47 AM

java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for colum n 'name' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620) 
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662) 
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581)
로그인 후 복사

위 오류가 보고되면 Java 코드 및 데이터베이스의 필드 유형이나 인코딩일 수 있습니다. . 일치하지 않는 경우에는 형식이나 인코딩을 통일하면 됩니다.

이모지 이미지를 데이터베이스에 삽입할 때 발생하는 오류와 해결 방법을 주로 소개합니다.


mysql 데이터베이스 사용 시 문자 집합이 UTF-8인 경우 그리고 java에서는 서버에서 이모티콘 표현을 저장할 때 위의 예외가 발생합니다. (예를 들어 WeChat이 사용자 닉네임을 얻기 위해 개발할 때 일부 사용자의 닉네임은 이모티콘 이미지를 사용합니다.)

이는 예외입니다. UTF-8 인코딩은 2바이트, 3바이트 또는 4바이트일 수 있으며 그 중 Emoji 표현은 4바이트이고 MySQL의 UTF-8 인코딩은 최대 3바이트이므로 데이터를 삽입할 수 없습니다. .
해결책:
1. 데이터베이스 수준에서 해결하세요(MySQL은 utf8mb4 버전 5.5.3 이상을 지원하므로 최신 버전으로 업그레이드해야 함)
참고:
(1. 데이터베이스, 테이블 수정 , 열 문자 집합

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;ALTER TABLE table_name CHANGE column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
로그인 후 복사


(2. mysql 구성 파일 my.cnf 수정(창은 my.ini)

[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
로그인 후 복사


(3. Java 서버를 사용하는 경우 업그레이드하거나 mysql 연결 버전이 5.1.13 이상인지 확인하세요. 그렇지 않으면 여전히 utf8mb4를 시도할 수 없습니다
(4. 서버측 db 구성 파일

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE
jdbc.username=root
jdbc.password=password
로그인 후 복사


mysql-connector를 업그레이드하면 CharacterEncoding=utf8을 사용할 수 있습니다. utf8mb4(원래 utf8과 호환)로 자동 인식되며
autoReconnection(데이터베이스 연결이 비정상적으로 중단되면 자동으로 다시 연결됩니까? 기본값은 false입니다) 이 속성을 무시하면 캐싱 이유가 발생할 수 있습니다. 🎜> 최신 DB를 읽지 못하여 utf8mb4 문자 집합을 사용할 수 없습니다.


2. 데이터를 얻은 후, 데이터 인벤토리로 이동하기 전에 인코딩하세요.


URLEncoder.encode(nickName, "utf-8");
로그인 후 복사

데이터베이스에서 검색하여 표시할 준비가 되면 디코딩됩니다.

URLDecoder.decode(nickname, "utf-8");
로그인 후 복사

애플리케이션 레이어에서 문제를 해결할 때 객체 getter, setter 메소드에서 직접 인코딩하지 않는 것이 좋습니다. 왜냐하면 setter 메소드는 객체가 있을 때 닉네임을 인코딩하기 때문입니다. 데이터베이스에 삽입할 때 개체에서 getter 메서드를 호출하여 자신을 참조하는 것과 같습니다. 이를 제거하면 이전 setter에서 인코딩된 Nickname이 다시 디코딩되므로 위의 문제가 계속 발생합니다. 🎜>

더 많은 mysql 저장 이모티콘 표현(WeChat 개발 사용자 별명..) 기사를 보려면 PHP 중국어 웹사이트를 따르세요

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)