如何通过NodeJS在mysql数据库中存储和检索utf8字符



我无法存储和检索"?"来自nodejs中的mysql数据库。

  1. 数据库创建如下所示:
CREATE DATABASE PRODUCT CHARACTER SET UTF8mb4 COLLATE utf8mb4_bin;
  1. 表创建如下所示:
CREATE TABLE QUESTIONS (
QUESTION_ID BIGINT NOT NULL AUTO_INCREMENT,
USER_ID BIGINT NOT NULL,
QUESTION_TEXT NVARCHAR(300) NOT NULL,
CREATED_AT TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (QUESTION_ID),
FOREIGN KEY(USER_ID) REFERENCES USERS(USER_ID) ON DELETE CASCADE
) AUTO_INCREMENT=1 DEFAULT CHARSET='UTF8mb4';
  1. 在aws服务器上,我有一个lambda函数,它创建数据库池,如下所示:
let pool = mysql.createPool({
connectionLimit: 10,
host: config.rds_host,
user: config.rds_user,
password: config.rds_password,
port: config.rds_port,
database: config.rds_db,
charset: 'utf8mb4'
});
  1. 我将代码插入数据库表中,如下所示:
const newQuestionEntry = `INSERT INTO QUESTIONS(USER_ID, QUESTION_TEXT) VALUES(` + userID + `,` + questionText + ',' + `)`;
  1. 因此,对于一组值:USER_ID=1和QUESTION_TEXT="你好吗?",存储在Questions表中的值如下:USER_ID=1,QUESTION_TEXT=你好吗0

  2. '?'被"0"替换。

  3. 我还在数据库所在的mysql命令行中进行了以下检查:
select default_character_set_name from information_schema.SCHEMATA S where schema_name="PRODUCT";

以确保字符集格式为utf8mb4。输出如预期--utf8mb4

如何解决这个问题?我做错了什么?如有任何帮助,我们将不胜感激。

不要盲目地将Question插入INSERT语句,而是使用"binding"。如果PHP是隐藏的,那么它有多种方法可以实现这一点。

此外,通过切换构建查询的方式,可以帮助避免"SQL注入"。

?是用于在字符串转义后插入字符串的占位符。通过提供

INSERT INTO QUESTIONS(USER_ID, QUESTION_TEXT) VALUES(?, ?)

然后绑定userIDquestionText,就可以获得绑定和转义,同时避免出现?问题。

最新更新