gpt4 book ai didi

mysql - 使用带有多字节字符的 MySQL SELECT WHERE IN

转载 作者:太空宇宙 更新时间:2023-11-03 11:06:54 24 4
gpt4 key购买 nike

我有一个包含所有定义的 Unicode 字符(character 列)及其关联的 Unicode 点(id 列)的表格。我有以下查询:

SELECT id FROM unicode WHERE `character` IN ('A', 'B', 'C')

虽然此查询应仅返回 3 行(id = 65、66、67),但它会返回 129 行,包括以下 ID:

65 66 67 97 98 99 129 141 143 144 157 160 193 205 207 208 221 224 257 269 271 272 285 288 321 333 335 336 349 352 449 461 463 464 477 480 2049 2061 2063 2064 2077 2080 4161 4173 4175 4176 4189 4192 4929 4941 4943 4944 4957 4960 5057 5069 5071 5072 5085 5088 5121 5133 5135 5136 5149 5152 5953 5965 5967 5968 5984 6145 6157 6160 6176 8257 8269 8271 8272 8285 8288 9025 9037 9039 9040 9053 9056 9153 9165 9167 9168 9181 9184 9217 9229 9231 9232 9245 9248 10049 10061 10063 10064 10077 10080 10241 10253 10255 10256 10269 10272 12353 12365 12367 12368 12381 12384 13121 13133 13135 13136 13149 13152 13249 13261 13263 13264 13277 13280

我确定这一定与多字节字符有关,但我不确定如何修复它。知道这里发生了什么吗?

最佳答案

字符串相等性和顺序由 collation 控制.默认情况下,使用的排序规则由列确定,但您可以使用 the COLLATE clause 设置每个查询的排序规则.例如,如果您的列是使用字符集 utf8 声明的,您可以使用 utf8_bin 来使用二进制排序规则,将 Aà 视为不同:

SELECT id FROM unicode WHERE `character` COLLATE utf8_bin IN ('A', 'B', 'C')

或者你可以使用 the BINARY operatorcharacter 转换为强制使用二进制比较的“二进制字符串”,这几乎是 not quite the same as binary collation :

SELECT id FROM unicode WHERE BINARY `character` IN ('A', 'B', 'C')

更新:我认为下面应该是等价的,但这不是因为列有 lower "coercibility" than the constants .二进制字符串常量将转换为非二进制字符串,然后进行比较。

SELECT id FROM unicode WHERE `character` IN (_binary'A', _binary'B', _binary'C')

关于mysql - 使用带有多字节字符的 MySQL SELECT WHERE IN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11302818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com