【问题标题】:How to get data from a latin1 (iso-8859-1) database using javascript/nodejs?如何使用 javascript/nodejs 从 latin1 (iso-8859-1) 数据库中获取数据?
【发布时间】: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


【解决方案1】:

Latin1 十六进制 EF BF BD 转换为 �。也许您指的是一个 BOM(Byte-Order-Mark),即 EF BB BF,看起来像 。见http://mysql.rjweb.org/doc.php/charcoll#bom_byte_order_mark

当不正确地混合latin1utf8 时,经常会出现Â、À 和Á。

如需进一步讨论,请提供十六进制和字符的 sn-p 文本。和/或查看Trouble with UTF-8 characters; what I see is not what I stored 以解决常见问题。

哦! MySQL 4.0 没有字符集的概念。您可以存储和获取字符串,而无需进行任何测试或发生任何事情。但是,像 LENGTH() 这样的东西提供了 byte 计数,而不是 character 计数。并且不等式字符串比较 (col_a < col_b) 不会为非 ascii 字符提供合理的结果。

可能在 PHP 中用你的角色做 nothing 是安全的。只需将它们输入和输出VARCHAR/TEXT(或BLOB)列。

【讨论】:

  • 让我试试你所说的一切。不好意思,其实不是mysql 4.0,而是mysql 5.0。让我更新此信息。
  • @MoisésFerreira - 字符集和排序规则是在 4.1 中添加的,因此您的 5.0 应该了解当前版本中存在的大部分内容。
  • 抱歉,我不太确定版本,但我现在确定了。我正在访问远程服务器中的数据库。我现在可以在 mySQL Front 中看到以下内容:运行 MySQL-Version 4.0.16-nt。所以这是正确的版本。我 100% 确定数据库不支持 utf 编码。
猜你喜欢
  • 2021-11-10
  • 1970-01-01
  • 2011-09-26
  • 2013-08-31
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
  • 2016-02-19
  • 2011-11-18
相关资源
最近更新 更多