我已经将Mysql默认值更改为utf8mb4,但表情符号仍然被Mysql拒绝。
Error: ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value: 'xF0x9Fx92xA9</...'
我想这可能是因为我的连接字符串。
我使用基于Mysql包的无服务器Mysql包连接并向Mysql发送查询。
我认为我应该能够创建这样的连接:
var connection = mysql.createConnection('mysql://user:pass@host/db?debug=true&charset=BIG5_CHINESE_CI&timezone=-0700');
然而,我不完全确定我的连接字符串应该是什么,以支持utf8mb4并能够将表情符号保存到我的数据库中。我的绳子应该是什么样子?
发现包本身支持添加字符集设置。所以我把配置改为:
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而不会出错。
以下是在环回项目中避免此错误的步骤。
步骤1:在数据库端
您必须将数据库和特定的表/列CHARSET更改为utf8mb4
,并选择任何[utf8mb4]的排序规则(例如utf8mb 4_unicode_ci(
步骤2:在环回侧
在包环回连接器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
};