【发布时间】:2019-12-08 21:42:02
【问题描述】:
我在 latin1 中有一个旧的 mysql 数据库(mysql 5.0.2),我想从中获取数据。对于非 ascii 字符,我总是得到相同的输出(例如,Â、À 和 Á 以十六进制表示为 'ef bf bd'),也就是说不同的字符以相同的方式呈现。
我只需要以不同的方式获取这些字符,以便将每个字符映射到正确的对应 utf-8 字符。
我一直在尝试更改字符集,但它不适合我!
有人能帮我弄清楚一些有意义的数据吗?
var mysql = require('mysql')
var con = mysql.createConnection({
host: "localhost",
user: "root",
//charset: "utf8mb4",
//charset: "utf8",
charset: "latin1",
database : 'my_db'
})
con.connect()
var query = con.query("SELECT data from my_table where id='07'", function
(error, results, fields) {
var b = Buffer.from (results[0].data)
console.log ('Retrieved data in hex -> ', b)
})
con.end()
当我去数据库并将数据更新为一些仅 ascii 的字符串时,我可以毫无问题地获取 js 中的数据,但是当我将该数据替换为“á”或“à”之类的东西时,我得到了总是十六进制的“ef bf bd”(十进制的-17 -65 -67)。
【问题讨论】:
-
你试过了吗,buffer.toString('utf-8') ?
-
拜托,你的意思是 b.toString('utf-8') 吗?
-
因为我的缓冲区变量被命名为 b。
-
MySQL 应该即时将编码从数据存储在其列中的方式转换为连接编码(我假设是
charset: '...')。因此,如果您将该连接编码设置为 UTF-8,您的 Javascript 客户端应该会收到 UTF-8 编码的文本,即使该文本在数据库中存储为 Latin1。 -
但这并没有发生。我忘了说它是旧版本的 mySQL (4.0)。
标签: javascript mysql utf-8 iso-8859-1