我有一个包含不同语言数据的数据库。有些语言使用重音符号(如 áéíóú),我需要搜索此数据,因为重音符号不存在(搜索“campeon”应该返回“campeón”作为有效结果)。
问题是我的数据库 (utf8_unicode_ci) 中的表没有存储 utf8 字符。如果您通过 phpmyadmin 查看数据,带有重音符号的单词如下所示:campeón
经过一些研究,我发现(在 StackOverflow question 中)问题与 SET NAMES [charset] 的不存在有关。事实上,我已经进行了一些测试,如果我将名称设置为 utf8,一切都会按预期工作。
好吧,我有解决方案,问题是什么?问题是数据库正在生产中,因此数据库中有数千个字符串。如果我更改客户端将使用的字符集,所有已经存在的字符串都将变得无效。问题是:有没有办法:
- 在像我这样使用错误字符集的数据库中执行不区分重音的搜索?
- 将表中的数据安全地转换为适当的字符集?
- 继续在数据库中使用混合字符集(latin1 和 utf8),假设 latin1 数据不会区分重音?
如果有人对我提出的任何解决方案有经验或有新的解决方案,我将不胜感激。
最佳答案
问题是数据是使用错误的连接编码插入的,您可以通过以下方式修复它
- 使用错误的连接编码导出数据,就像您到目前为止使用的一样,然后是
- 使用正确的 utf8 连接编码导入数据。
这将解决编码问题,之后搜索将按预期工作。
关于mysql - 在有问题的数据库上进行不区分重音的搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9699473/