FKa*_*yan 5 php mysql database internationalization
我有一个数据库(Mysql),我在其中存储了超过10万个带有不同语言关键字的关键字.这是一个例子,如果我有三个colums [id] [土耳其语(utf8_turkish_ci)] [德语(utf8)]
用户可以在搜索框中输入德语或土耳其语单词.如果用户输入一个德语单词一切都很好,那么它打印出土耳其语单词,但如何用土耳其单词解决它.我问,因为每种语言都有自己的附加字符,如äüöş等.
所以我应该使用
mb_convert_encoding
Run Code Online (Sandbox Code Playgroud)
转换字符串,然后如何检查它是德国或土耳其字符串我认为这将是复杂的.或者表的编码是错误的?
现在坚持如何实现它,以便用户可以输入两个语言单词的关键字
为了使其正常工作,您需要解决几个问题。
\n\n首先,您选择了utf8保存所有文本的字符集。这是一个不错的选择。如果这是 2016 年新增的应用程序,您可以选择utf8mb4 字符集。一旦您选择了字符集,您的用户应该能够阅读您的文本。
其次,为了搜索和排序(WHERE和ORDER BY),您需要为每种语言选择适当的排序规则。对于现代德语来说,utf8_general_ci 效果还算不错。utf8_unicode_ci如果您需要标准的词汇顺序,效果会更好一些。读这个。http://dev.mysql.com/doc/refman/5.7/en/charset-unicode-sets.html
对于现代西班牙语,您应该使用utf8_spanish_ci. 这是因为在西班牙语中,N 和 Ñ 字符不被视为相同。我不知道一般排序规则是否适用于土耳其语。
请注意,您似乎混淆了问题中字符集和排序规则的概念。您已经提到了与土耳其列的排序规则和与德语列的字符集。
\n\n您可以在查询中显式指定字符集和排序规则。例如,你可以写
\n\n WHERE _utf8 \'M\xc3\xbcnchen\' COLLATE utf8_unicode_ci = table.name;\nRun Code Online (Sandbox Code Playgroud)\n\n在此表达式中,_utf8 \'M\xc3\xbcnchen\'是字符常量,并且
constant COLLATE utf8_unicode_ci = table.name\nRun Code Online (Sandbox Code Playgroud)\n\n是一个查询说明符,其中包含显式排序规则名称。读这个。http://dev.mysql.com/doc/refman/5.7/en/charset-collate.html
\n\n第三,您可能想要指定一个默认值排序规则。默认排序规则被纳入索引中,因此它们将有助于加速搜索。
\n\n第四,您的用户将需要使用适当的输入方法(键盘映射等)来向您的应用程序呈现数据。希望土耳其语用户知道如何输入土耳其语单词。
\n