模拟mysql utf8_general_ci collat​​ion

时间:2021-02-12 13:56:54

标签: javascript mysql string comparison collation

我正在尝试将 javascript 应用程序与在数据库中创建名称的第三方 API 集成。我的问题是第三方应用程序使用 utf8_general_ci 排序规则来确定名称的唯一性,并且在我的应用程序中,我需要动态确定我要发送的名称是否已存在于他们的数据库中,以防止出现重复名称错误。基本上流程如下:

  1. 我的应用程序接受用户输入的名称:“somename”

  2. 我的应用程序向第三方 API 发出“somename”的搜索请求,返回:

[
  {
    "id": 1,
    "name": "Somënamë"
  },
  {
    "id": 2,
    "name": "somename somesecondname"
  },
  {
    "id": 3,
    "name": "somename someothername"
  }
]

  1. 我的应用程序需要确定我是应该创建一个新记录“somename”还是重用其中一个结果

在这种情况下,我的应用程序需要确定“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 中至少半准确地模拟这种排序规则检查,而不必在我这边使用数据库?

1 个答案:

答案 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 上的重复键错误。