节点js中的非英文字符编码

时间:2018-07-16 18:55:25

标签: mysql node.js encoding

我有一个PHP代码和node js代码,它们保存并从MySQL数据库获取一些信息。有些数据是外语。所有编码(数据库,表,字段)都设置为utf8。
如果我通过PHP将类似“якийсьтекст”的信息发送到数据库,则在数据库中它将看起来像“Ñкий¹ÑьтекÑÑÑ”,并且如果我使用PHP从数据库中检索到此文本,则可以得到“якийсьтекст”,这很好。 br />     但是,当我使用node将相同的文本发送到db时,在db中将按原样保存(якийсьтекст),但是当使用PHP从db检索它时,我得到的只是问号。 在节点mysql.createConnection中,我设置了字符集:'utf8',并添加了conc.query(“ SET NAMES utf8”)。
所以我不确定我在做什么错。
谢谢

1 个答案:

答案 0 :(得分:0)

那是Mojibake。有关原因,请参见this

这也讨论了“问号”。

由于您有两个症状,因此建议您至少有两个编码错误。因此,也请参见该链接中的“最佳实践”。

向我们展示:

  • 连接字符串
  • SHOW CREATE TABLE
  • SELECT HEX(col), col FROM tbl WHERE ...

它可能是“双重编码”-这很阴险,因为除了比较字符串外,它看起来还不错。

UTF-8 як为十六进制D18F D0BA。但是,如果进行双重编码,则会得到C391 C28F C390 C2BA

SET NAMES utf8应该有所帮助;但这只是需要匹配的五件事之一。

node.js需要类似的东西

var connection = mysql.createConnection({ ... , charset : 'utf8'});

(或utf8mb4)