node.js / MySQL:当我尝试插入数据库时​​,某些字符串编码(表情符号)抛出错误

erv*_*erv 1 javascript mysql character-encoding node.js

我正在运行一个node.js脚本,该脚本将数据从公共“数据库”(这是一个“区块链”)中拉出,然后对其执行一些操作,然后将其插入到MySQL数据库中。我有使用UTF8_general_ci编码的MySQL数据库。绝大多数数据解析都很好,但是每隔很多次它就会遇到无法插入的内容。我收到此错误:

code: 'ER_TRUNCATED_WRONG_VALUE_FOR_FIELD',
  errno: 1366,
  sqlMessage: 'Incorrect string value: \'\\xF0\\x9F\\x8D\\x95 N...\' for column \'body\' at row 1',
  sqlState: 'HY000',
  index: 0,
Run Code Online (Sandbox Code Playgroud)

它显示了似乎引起错误的字符串位,并且始终具有以下独特的问号字符:

This looks like Paradise for me! ????\

我猜这是编码问题?有没有一种方法可以在引发错误之前将其转换?我不确定该区块链使用什么编码,甚至不确定如何找到。

编辑:这是此区块链的网络界面上显示的另一个示例(错误):

并非常欢迎您!

另一个编辑:我应该指出,我正在使用mysql.format(sql, inserts)这些数据来处理无意的sql问题-https: //github.com/mysqljs/mysql#preparing-queries

Ric*_*mes 8

可能的答案是MySQL连接未指定utf8mb4。(具体而言,MySQL的utf8足够的表情。)你能提供的连接代码?这是一个备用:连接到MySQL后执行以下操作:

SET NAMES utf8mb4
Run Code Online (Sandbox Code Playgroud)

另一个可能的答案是Web服务器未将页面视为UTF-8。解决此问题的一种方法是在<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
Run Code Online (Sandbox Code Playgroud)

并且该列必须是CHARACTER SET utf8mb4,而不是ut8

node.js连接池

var connection = mysql.createConnection({ ... , charset : 'utf8mb4'});
Run Code Online (Sandbox Code Playgroud)

请参阅stackoverflow