我想:
piščanec= mysql中的piscanec。我的意思是,我想搜索piscanec以找到piščanec。
所以č和c会相同,š和s等......
我知道可以使用regexp来完成,但这很慢:-(与LIKE有任何其他方式吗?我也在使用全文搜索。
更新
select CONVERT('čšćžđ' USING ascii) as text
不起作用。产生:?????
答案 0 :(得分:2)
这不是直截了当的,但您可能最好为全文搜索创建自己的排序规则。这是一个例子:
http://dev.mysql.com/doc/refman/5.5/en/full-text-adding-collation.html
这里有更多信息:
http://dev.mysql.com/doc/refman/5.5/en/adding-collation.html
这样,您的排序逻辑完全独立于您的SQL和业务逻辑,并且您不必使用SQL解决方法做任何繁重的工作。
编辑,因为排序规则用于 所有 字符串匹配操作,这可能不是最佳方式:您将结束混淆语言上离散的字符之间的差异。
如果要为特定操作抑制这些差异,则可以考虑编写一个接受字符串的函数,并以目标方式替换为当前操作的目的而被视为相同的字符。
你可以定义一个包含你的基本字符(š,č等)的表,另一个包含等价的表。然后在你的字符串上运行REPLACE。
另一种方式只是CAST
您的字符串ASCII
,从而抑制所有非ASCII
个字符。
e.g。
SELECT CONVERT('<your text here>' USING ascii) as as_ascii
答案 1 :(得分:2)
使用排序规则utf8_generic_ci
声明列。这种整理认为š等于s,č等于c:
create temporary table t (t varchar(100) collate utf8_general_ci);
insert into t set t = 'piščanec';
insert into t set t = 'piscanec';
select * from t where t='piscanec';
+------------+
| t |
+------------+
| piščanec |
| piscanec |
+------------+
如果您不想或不能对列使用utf8_generic_ci
排序规则 - 也许您在列上有唯一索引并且想要考虑piščanec和piscanec不同? - 您可以使用仅在查询中进行排序规则:
create temporary table t (t varchar(100) collate utf8_bin);
insert into t set t = 'piščanec';
insert into t set t = 'piscanec';
select * from t where t='piscanec';
+------------+
| t |
+------------+
| piscanec |
+------------+
select * from t where t='piscanec' collate utf8_general_ci;
+------------+
| t |
+------------+
| piščanec |
| piscanec |
+------------+
FULLTEXT索引应该直接使用列排序规则;您不需要定义新的排序规则。显然全文索引只能在列的存储排序规则中,因此如果您想使用utf8_general_ci
进行搜索并使用utf8_slovenian_ci
进行排序,则必须按顺序使用collate
:
select * from tab order by col collate utf8_slovenian_ci;