javascript - 如何使用 javascript/nodejs 从 latin1 (iso-8859-1) 数据库获取数据?

标签 javascript mysql utf-8 iso-8859-1

我有一个旧的 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 .

、 À 和 Á 经常在混合不当时出现 latin1utf8 .

为了进一步讨论,请提供十六进制和字符的文本片段。和/或参见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/

相关文章:

javascript - 如何根据 Angular 环境更改 index.html 中的变量值

javascript - 如何从jsp代码动态添加的文本框中获取数据

javascript - JS 控制台错误显示 Extjs 尝试对类发出 GET 请求,就好像它是一个文件一样

mysql - 插入具有两个条件的重复键更新

带有 WHERE 子句的 MySql 内连接

Python pyodbc Unicode 问题

javascript - 如何在单独的输入中手动设置节点和链接文本?

mysql - 提供用户安装Mysql (NSIS)

php - 用实际的换行字符代码替换\n

Java 将 ISO-8859-1 转换为具有正确 unicode 字符的 UTF-8