2016-02-16 88 views
5

我有一个数据库(Mysql),其中存储了多于100 000个关键字和不同语言的关键字。例如,如果我有三个列[id] [土耳其语(utf8_turkish_ci)] [德语(utf8)]在搜索引擎中的多语言数据库编码

用户可以在搜索框中输入德语或土耳其语单词。如果用户输入一个德语单词,那么它会打印出土耳其语单词,但如何用土耳其语单词解决。我问,因为每一种语言都有像它自己的附加字符ü■解读等

所以我应该用

mb_convert_encoding 

将字符串转换,但再怎么检查它是否是德国或土耳其字符串我认为这将会变得复杂。或者是表格的编码错误?

卡住了那么如何实现它,使用户可以输入的两种语言的话

+0

使用UTF-8检查 –

回答

0

您有几个问题要解决,以正确地做这项工作关键字。

第一个,您选择了utf8字符集来保存您的所有文本。这是一个不错的选择。如果这是一个新的2016年应用程序,您可以选择utf8mb4字符集。一旦你选择了一个字符集,你的用户应该能够阅读你的文字。

,搜索和排序(WHEREORDER BY)的缘故,你需要选择每种语言都具有适当的排序规则。对于现代德语,utf8_general_ci将工作得很好。 utf8_unicode_ci如果您需要标准词汇排序,则效果会更好一些。读这个。 http://dev.mysql.com/doc/refman/5.7/en/charset-unicode-sets.html

对于现代西班牙语,您应该使用utf8_spanish_ci。这是因为在西班牙语中,N和Ñ字符并不相同。我不知道一般排序规则是否适用于土耳其语。

请注意,您好像在您的问题中混淆了字符集和排序规则的概念。你已经提到了你的土耳其专栏和你的德国专栏中的一个字符集。

您可以在查询中明确指定字符集和排序规则。例如,可以编写

WHERE _utf8 'München' COLLATE utf8_unicode_ci = table.name; 

在这个表达式中,_utf8 'München'是字符串常量,并且

constant COLLATE utf8_unicode_ci = table.name 

是查询指定符,它包括一个显式的排序规则名称。读这个。 http://dev.mysql.com/doc/refman/5.7/en/charset-collate.html

,你可能要指定一个默认整理每个特定语言列。默认排序规则会被放入索引中,因此它们将有助于加速搜索。

第四个,您的用户需要使用适当的输入法(键盘映射等)将数据呈现给您的应用程序。土耳其语用户希望知道如何输入土耳其语单词。

+0

我忘记写我用unicode替换特殊字符来保存土耳其语的单词,所以我可能使用strtr()来检测字符串中的字符以将其替换为unicode发送查询 – FKayan

+0

我的意思是我用strtr()和数组 – FKayan

相关问题