[英]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 项目出现此错误,请遵循以下步骤。
您必须将数据库和特定表/列 CHARSET 更改为utf8mb4
和 select 任何 [utf8mb4] 的排序规则(例如 utf8mb4_unicode_ci)
在 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.