繁体   English   中英

Mysql utf8mb4 连接字符串(Node.js,serverless-mysql 包)

[英]Mysql utf8mb4 connection string (Node.js, serverless-mysql package)

我已经将我的 Mysql 默认更改为 utf8mb4,但是表情符号仍然被 mysql 拒绝。

Error: ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value: '\xF0\x9F\x92\xA9</...'

我想这可能是因为我的连接字符串。

I'm connecting and sending queries to Mysql with the serverless -mysql package, which is based on the mysql package .

我想我应该能够像这样创建一个连接:

var connection = mysql.createConnection('mysql://user:pass@host/db?debug=true&charset=BIG5_CHINESE_CI&timezone=-0700');

但是,我不完全确定我的连接字符串应该是什么才能支持utf8mb4并能够将表情符号保存到我的数据库中。 我的字符串应该是什么样的?

原来 package 本身支持为字符集添加设置。 所以我将我的配置更改为:

const db = mysql({
  config: {
    host: process.env.DB_HOST,
    database: process.env.DB_NAME,
    user: process.env.DB_USER,
    password: process.env.DB_PASS,
    charset: 'utf8mb4'
  }
});

我现在可以将表情符号发送到 Mysql 而不会出错。

为了避免 Loopback 项目出现此错误,请遵循以下步骤。

Step1:在数据库端

您必须将数据库和特定表/列 CHARSET 更改为utf8mb4和 select 任何 [utf8mb4] 的排序规则(例如 utf8mb4_unicode_ci)

第 2 步:在环回端

在 package loopback-connector-mysql中,有一个参数collation规则确定连接的字符集。 默认为utf8_general_ci

因此,您的数据库配置将如下所示:

const config = {
  name: 'ecofretransitDb',
  connector: 'mysql',
  ...
  collation: 'utf8mb4_unicode_ci' // Add this line. It must be aligned with the collation that you choose for your database and table
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM