2017-01-25 9 views
1

나는 node.js의 ORM으로 sequelize를 사용하여 mysql 데이터베이스와 상호 작용합니다.이모티콘을 저장할 때 오류가 발생했습니다.

내 데이터베이스 문자 집합입니다 utf8mb4, utf8mb4_general_ci

utf8mb4, utf8mb4_general_ci

내 열 TYPE 텍스트와 캐릭터 세트가 utf8mb4, utf8mb4_general_ci

어떤 쿼리를 실행하기 전에이다, 나는 다음과 같은 코드를 실행하고있어 내 테이블의 캐릭터 세트는 다음과 같습니다

Sequelize.query("SET NAMES utf8mb4"); 
Sequelize.query("SET CHARACTER SET utf8mb4"); 

Sequelize.query ("SHOW VARIABLES LIKE 'character_set_ %'")를 실행 한 후

[ [ RowDataPacket { Variable_name: 'character_set_client', Value: 'utf8mb4' }, 
    RowDataPacket { Variable_name: 'character_set_connection', Value: 'utf8mb4' }, 
    RowDataPacket { Variable_name: 'character_set_database', Value: 'utf8mb4' }, 
    RowDataPacket { Variable_name: 'character_set_filesystem', Value: 'binary' }, 
    RowDataPacket { Variable_name: 'character_set_results', Value: 'utf8mb4' }, 
    RowDataPacket { Variable_name: 'character_set_server', Value: 'utf8' }, 
    RowDataPacket { Variable_name: 'character_set_system', Value: 'utf8' }, 
    RowDataPacket { 
     Variable_name: 'character_sets_dir', 
     Value: 'c:\\openserver\\modules\\database\\MySQL-5.7-x64\\share\\charsets\\' } ], 
    [ RowDataPacket { Variable_name: 'character_set_client', Value: 'utf8mb4' }, 
    RowDataPacket { Variable_name: 'character_set_connection', Value: 'utf8mb4' }, 
    RowDataPacket { Variable_name: 'character_set_database', Value: 'utf8mb4' }, 
    RowDataPacket { Variable_name: 'character_set_filesystem', Value: 'binary' }, 
    RowDataPacket { Variable_name: 'character_set_results', Value: 'utf8mb4' }, 
    RowDataPacket { Variable_name: 'character_set_server', Value: 'utf8' }, 
    RowDataPacket { Variable_name: 'character_set_system', Value: 'utf8' }, 
    RowDataPacket { 
     Variable_name: 'character_sets_dir', 
     Value: 'c:\\openserver\\modules\\database\\MySQL-5.7-x64\\share\\charsets\\' } ] ] 

을하지만 이모티콘이 포함 된 해당 문자열을 저장하기 위해 노력하고있어 때, 나는 오류로 실행 : 도착했습니다 '

Unhandled rejection SequelizeDatabaseError: ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value: '\xF0\x9F\x91\x8D\xF0\x9F...' for column 'content' at row 1 
+0

SHOW가 TABLE' –

답변

-1

나는 또한이 문제에 달려 쉽게, 당신 만 해결 데이터베이스를 utf8_general_ci로 설정해야합니다. 그리고 node.js에서 연결을 할 때 "charset"매개 변수를 추가해야합니다 :

var pool = mysql.createPool({ 
    host: "host", 
    user: "username", 
    password: "password", 
    database: "database", 
    connectionLimit: xxxx, 
    charset : 'utf8mb4' 
}); 

이것은 나를위한 트릭입니다.

+0

을 CREATE'주십시오'utf8_general_ci'는 _charater에 대한 _collation_입니다 set_ utf8, 이모티콘을 _ 처리하지 않습니다. –

0

Express와 함께 MySQL에 이모티콘을 넣으려고 시도 할 때와 동일한 문제가있었습니다. MySQL의 설정 파일 /etc/my.cnf에이

[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 
처럼 보인다면 당신은 당신의 현재의 문자가이

character_set_client  utf8 
character_set_connection utf8 
character_set_database utf8mb4 
character_set_filesystem binary 
character_set_results  utf8 
character_set_server  utf8mb4 
character_set_system  utf8 
collation_connection  utf8_general_ci 
collation_database  utf8mb4_unicode_ci 
collation_server   utf8mb4_unicode_ci 

같은 위의 모습에서

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; 

기본 연결 출력과 같이 설정 확인할 수 있습니다

하지만 달리면

SET NAMES utf8mb4; 

그 다음에 위의 SHOW VARIABLES WHERE...은 보드 전체에서 utf8mb4로 업데이트됩니다.

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_general_ci 
collation_database  utf8mb4_unicode_ci 
collation_server   utf8mb4_unicode_ci 

그래서, 내가 찾은 솔루션은 내 사용자 모델의 첫 번째 줄에 다음을 넣어하는 것입니다

// make sure db/client/connection can support emoji 
sequelize.query("SET NAMES utf8mb4;"); 
// confirm settings 
sequelize.query("SHOW VARIABLES LIKE 'character_set_%'").then(function(data) { 
    console.log(data); 
});