javascript - 如何使用 javascript/nodejs 从 latin1 (iso-8859-1) 数据库中获取数据?
问题描述
我在 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 十进制)。
解决方案
Latin1 十六进制EF BF BD
转换为�
. 也许您指的是一个 BOM(字节顺序标记),即 EF BB BF,看起来像
. 请参阅http://mysql.rjweb.org/doc.php/charcoll#bom_byte_order_mark。
Â、À 和 Á 经常在不正确地混合latin1
和时出现utf8
。
如需进一步讨论,请提供十六进制和字符的文本片段。和/或查看UTF-8 字符的问题;我看到的不是我为解决常见问题而存储的。
哦!MySQL 4.0 没有字符集的概念。您可以存储和获取字符串,而无需进行任何测试或发生任何事情。但是,LENGTH()
提供的字节数之类的东西,而不是字符数。并且不等式字符串比较 ( col_a < col_b
) 不会为非 ascii 字符提供合理的结果。
在PHP 中对你的字符不做任何事情可能是安全的。只需将它们输入和输出/ (或)列。VARCHAR
TEXT
BLOB
推荐阅读
- python - 尝试访问 networkx 中的节点属性时出现“keyerror”
- c# - 使用 ShowDialog 时拥有一个新表单实例还是每次显示表单时都创建一个新表单更好?- C#
- ruby-on-rails - Rails & simple_form // 没有路线匹配 [PATCH] "/spots.10"
- c# - C# 在 JSON 文件中将 db null 值视为空
- c# - Is it possible to draw object with outline and fill at the same time?
- c - getline中ctr+c如何返回?
- variables - 如果未找到上游主机,则使用 proxy_pass 变量来防止 nginx 崩溃
- gradle - IntelliJ IDEA (2020.2):Gradle:初始化脚本“ijinit.gradle”的缓存条目似乎已损坏
- python - 为什么在尝试使用 int 函数时出现此错误
- vb.net - 您可以像在 VB6 中一样“静态”使用 VB.Net 表单吗?