【发布时间】:2018-02-19 22:44:05
【问题描述】:
此问题与PHP string comparison between two different types of encoding 不重复,因为我的问题需要 SQL 解决方案,而不是 PHP 解决方案。
上下文 ► 有一个博物馆,有两个数据库,两个不同的 PHP 系统使用相同的字符集和排序规则 (engine=INNODB charset=utf8 collate=utf8_unicode_ci)。每个 PHP 系统以 不同 方式存储 相同 数据,下一张图片就是一个例子:
已经有大量数据以这种方式存储,并且两个系统都运行良好,所以我无法更改 PHP 编码或数据库。一个系统处理票房的销售,另一个处理网站的销售。
问题 ► 我需要将右列 (tipo_boleto_tipo) 与左列 (tipo) 进行比较,以获取左表另一列中的值(在图像),但我没有得到任何结果,因为相同的值存储不同,例如,当我搜索“Niños”时,它没有找到,因为它被存储为“Niños”(西班牙语中的“儿童”)。我尝试通过 PHP 使用 utf8_encode 和 utf8_decode 来实现,但速度慢得让人无法接受,所以我认为最好只使用 SQL 来实现。这些数据将用于不同时间段的销售(票房和互联网)的统一报告,并且必须比较数十万行,这就是 PHP 如此缓慢的原因。
问题 ► MYSQL 中是否有类似utf8_encode 或utf8_decode 的东西可以让我匹配两列的等效 值?欢迎任何其他建议。
接下来是我当前的代码(没有结果):
DATABASE TABLE COLUMN
▼ ▼ ▼
SELECT boleteria.tipos_boletos.genero ◄ DESIRED COLUMN.
FROM boleteria.tipos_boletos ◄ DATABASE WITH WEIRD CHARS.
INNER JOIN venta_en_linea.ventas_detalle ◄ DATABASE WITH PROPER CHARS.
ON venta_en_linea.ventas_detalle.tipo_boleto_tipo = boleteria.tipos_boletos.tipo
WHERE venta_en_linea.ventas_detalle.evento_id='1'
AND venta_en_linea.ventas_detalle.tipo_boleto_tipo = 'Niños'
ON venta_en_linea.ventas_detalle.tipo_boleto_tipo = boleteria.tipos_boletos.tipo 行永远不会起作用,因为这两个值不同(“Niños”与“Niños”)。
【问题讨论】:
-
问题还没有结束,只有一个结束投票。我同意,这不是那个的副本
-
您的问题从未关闭,因此 Possible duplicate[...]。我撤回了我的近距离投票并 +1,因为这个问题似乎是独一无二的并且很好地提出。
-
@JoseManuelAbarcaRodríguez 你试过使用
COLLATE吗?除非我误解了COLLATE这才是你需要的。 -
@Script47,数据库和表都有相同的排序规则 = utf8_unicode_ci。