php – 比较存储在不同编码中的相同值
这个问题与PHP string comparison between two different types of encoding不重复,因为我的问题需要SQL解决方案,而不是PHP解决方案. 上下文?有一个博物馆有两个数据库,两个不同的PHP系统使用相同的字符集和整理(engine = INNODB charset = utf8 collat??e = utf8_unicode_ci).每个PHP系统以不同的方式存储相同的数据,下一个图像是一个例子: 这种方式已经存储了大量数据,两个系统都运行正常,因此我无法更改PHP编码或数据库.一个系统处理来自票房的销售,另一个系统处理来自网站的销售. 问题?我需要将右列(tipo_boleto_tipo)与左列(tipo)进行比较,以便在左表的另一列中获取值(在图像中看不见),但由于相同的值,我没有得到任何结果存储不同,例如,当我搜索“Ni?os”时,找不到它,因为它被存储为“Ni?os”(西班牙语中的“儿童”).我试图通过使用utf8_encode和utf8_decode通过PHP来做到这一点,但它速度慢得令人无法接受,所以我认为最好只使用SQL.这些数据将用于统一的销售报告(票房和互联网),并且必须比较数十万行,这就是为什么它在PHP上的速度如此之慢. 问题?MYSQL中是否有类似utf8_encode或utf8_decode的内容可以匹配两列的等效值?任何其他建议将是受欢迎的. 接下来是我当前的代码(没有结果):
ON Venta_en_linea.ventas_detalle.tipo_boleto_tipo = boleteria.tipos_boletos.tipo这一行永远不会奏效,因为两个值都不同(“Ni?os”vs“Ni?os”). 最佳答案 写入boleteria数据库的应用程序似乎没有存储正确的UTF-8.数据库列字符集指的是MySQL如何解释字符串,但您的应用程序仍然可以写入其他字符集. 我无法从你的例子中确切地知道错误的字符集是什么,但假设它是Latin-1你可以将它转换为latin1(使其“正确”),然后将其转换回“实际”utf8:
我在程序中经常看到这一点,从一开始就没有仔细编写使用UTF-8字符串.如果您发现性能太慢而且需要频繁转换,并且您没有机会更新错误地写入数据的应用程序,您可以向tipos_boletos表添加新列和触发器并作为记录即时转换被添加或编辑. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |