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