我正在尝试将 javascript 应用程序与在数据库中创建名称的第三方 API 集成。我的问题是第三方应用程序使用 utf8_general_ci 排序规则来确定名称的唯一性,并且在我的应用程序中,我需要动态确定我要发送的名称是否已存在于他们的数据库中,以防止出现重复名称错误。基本上流程如下:
我的应用程序接受用户输入的名称:“somename”
我的应用程序向第三方 API 发出“somename”的搜索请求,返回:
[
{
"id": 1,
"name": "Somënamë"
},
{
"id": 2,
"name": "somename somesecondname"
},
{
"id": 3,
"name": "somename someothername"
}
]
在这种情况下,我的应用程序需要确定“somename”和“Somënamë”在 utf8_general_ci 比较中相等,并且应该使用 id=1 的记录,而不是尝试创建新记录(这将导致重名)
基本上我需要执行与第三方数据库相同的字符串比较
我尝试过的一个选项是使用 mysql 实例来检查它
SELECT IF(_utf8:string1 COLLATE utf8_general_ci = _utf8:string2 COLLATE utf8_general_ci, "true", "false") as equals;
但这对我来说太占用资源了,我们可能有数千个结果..
有没有办法在 javascript 中至少半准确地模拟这种排序规则检查,而不必在我这边使用数据库?
答案 0 :(得分:0)
我建议你工作太努力了。
如果列和连接被声明为 SELECT *
FROM comments
WHERE chat_id = 1
ORDER BY id comment_id ASC
LIMIT 0,10
,那么 COLLATION utf8_general_ci
= Somënamë
因为 somename
表示大小写折叠和重音剥离。
有 _ci
列。无需执行 UNIQUE
,只需检查 SELECT
上的重复键错误。