php - 字符串与不同 COLLATION 的比较

标签 php mysql sql compare collation

MYSQL 数据库

数据库 1 - 表 - 表 1
id - 整数
标题 - utf8_general_ci
值(value)观 -
1、Bienvenue Chez les Châtis
2、基础知识
3、XYZ

数据库 2 - 表 - 表 2
id - 整数
标题 - utf8_unicode_ci
值(value)观 -
1、Bienvenue Chez les Ch’tis
2、基础知识
3、QWE

我在上面的两个表中都有标题列表。我想列出不相同的标题。

我尝试了很多不同的东西,但没有运气。

如何比较这些标题?

SELECT database1.table1.title as title1,database2.table2.title as title2 
FROM database1.table1 JOIN database2.table2 ON (database1.table1.id =database2.table2)
WHERE database1.table1.title NOT LIKE database2.table2.title COLLATE utf8_general_ci

上述查询的结果:
Bienvenue Chez les Châtis, Bienvenue Chez les Ch'tis
XYZ、QWE

但我只想要下面的结果
XYZ、QWE

我想排除法语的,我想将其视为相同的标题。

最佳答案

'' 的 Mojibake。当以两种不同方式存储相同 右单引号时,问题就来了。不是 COLLATION 问题。

首先,检查两个表以查看存储的内容:

SELECT HEX(title) FROM database1.table1 WHERE id = 1

您会发现的两种可能情况是:

C  h          ...        t  i  s
43 68        E28099      74 69 73  -- correctly encoded with UTF-8
43 68 C3A2 E282AC E284A2 74 69 73  -- "double encoded"

(为了清楚起见,我在 HEX 中添加了空格。)

如果其中一个表是“双重编码”的,那么它在 INSERTing 过程中就搞砸了。字符串将比较相等。

This Q&A进一步讨论事情。然后看this用于修复双重编码的文本。但请务必仅将其应用于损坏的数据。

关于php - 字符串与不同 COLLATION 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44790100/

相关文章:

mysql - 如何向数据库表中添加新列,表中存在大量数据

sql - 下限 LIMIT/高 OFFSET 的成本非常高

php - WebSocket 错误:net::ERR_SSL_PROTOCOL_ERROR

php - 使用 jQuery 解析 Ajax 响应

mysql - 如何在 CakePHP 2 中为 3 个连接的 mysql 表编写模型

php - 单击帖子时链接到另一个页面 php

php - 只显示月份和日期

php - 我需要在 sql/php 中查询两个表以获取照片库数据库

mysql - 从两个表插入where条件

php - 在移动设备上,Mysql 查询关键字更改为 php 中的未知字符集