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 문자 집합을 사용할 수 없습니다.
URLEncoder.encode(nickName, "utf-8");
데이터베이스에서 검색하여 표시할 준비가 되면 디코딩됩니다.
URLDecoder.decode(nickname, "utf-8");
애플리케이션 레이어에서 문제를 해결할 때 객체 getter, setter 메소드에서 직접 인코딩하지 않는 것이 좋습니다. 왜냐하면 setter 메소드는 객체가 있을 때 닉네임을 인코딩하기 때문입니다. 데이터베이스에 삽입할 때 개체에서 getter 메서드를 호출하여 자신을 참조하는 것과 같습니다. 이를 제거하면 이전 setter에서 인코딩된 Nickname이 다시 디코딩되므로 위의 문제가 계속 발생합니다. 🎜>
더 많은 mysql 저장 이모티콘 표현(WeChat 개발 사용자 별명..) 기사를 보려면 PHP 중국어 웹사이트를 따르세요