我有一个旧的 mysql 数据库(mysql 5.0.2),位于 latin1 中,我想从中获取数据。对于非 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)。
最佳答案
拉丁语1十六进制EF BF BD
翻译为�
。也许你指的是一个BOM(Byte-Order-Mark),即EF BB BF,看起来像
。请参阅http://mysql.rjweb.org/doc.php/charcoll#bom_byte_order_mark .
、 À 和 Á 经常在混合不当时出现 latin1
和utf8
.
为了进一步讨论,请提供十六进制和字符的文本片段。和/或参见Trouble with UTF-8 characters; what I see is not what I stored用于解决常见问题。
哦! MySQL 4.0 没有字符集的概念。您可以存储和获取字符串,而无需对其进行任何测试或发生任何事情。然而,类似 LENGTH()
的东西提供字节计数,而不是字符计数。并且不等式字符串比较 ( col_a < col_b
) 不会为非 ascii 字符提供合理的结果。
在 PHP 中对您的 Angular 色什么都不做可能是安全的。只需将它们喂入或喂出VARCHAR
即可/TEXT
(或 BLOB
)列。
关于javascript - 如何使用 javascript/nodejs 从 latin1 (iso-8859-1) 数据库获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57289591/