MySQL程序。类模式匹配-西里尔字符串

MySQL程序。类模式匹配-西里尔字符串,mysql,stored-procedures,character-encoding,Mysql,Stored Procedures,Character Encoding,我在一个MySQL过程中遇到了问题。这个过程本身是有效的,但只有当我使用拉丁字符时。如果我用西里尔字母串,它就不起作用了。表格在页面顶部的utf8\u general\u ci中,我有“设置名称‘utf8’”。任何关于这篇文章的帮助都是非常感谢的。下面是我的代码 CREATE PROCEDURE `selUsers`(IN usrNme VARCHAR(25)) BEGIN SELECT * FROM users WHERE 1 AND (user_real_nam

我在一个MySQL过程中遇到了问题。这个过程本身是有效的,但只有当我使用拉丁字符时。如果我用西里尔字母串,它就不起作用了。表格在页面顶部的utf8\u general\u ci中,我有“设置名称‘utf8’”。任何关于这篇文章的帮助都是非常感谢的。下面是我的代码

CREATE PROCEDURE `selUsers`(IN usrNme VARCHAR(25))
BEGIN


SELECT *
    FROM users WHERE 1 
        AND (user_real_name LIKE CONCAT('%', usrNme, '%') OR user_company LIKE CONCAT('%', usrNme, '%') OR user_name LIKE CONCAT('%', usrNme, '%'))
    ORDER BY user_real_name ASC LIMIT 0, 15;

    END

为了使其正常工作,您应该在打开连接并选择数据库后使用
设置名称
,告诉mysql客户端将使用特定的字符集发送数据。查看详细信息。 对于您的具体情况,应该是

SET NAMES utf8

此外,我将使用utf8\uUnicode\uCI而不是utf8\uGeneral\uCI。的确,utf8_unicode_ci比utf8_general_ci慢,但您将获得更好的比较(更准确)…utf8_general_ci仅适用于俄语保加利亚语西里尔语子集。白俄罗斯语马其顿语塞尔维亚语乌克兰语中使用的额外字母排序不好……如果您使用这些西里尔字母表中的一些字母,您应该记住这一点。

谢谢您的回复。我很感激。我更改了程序,但在西里尔文上搜索时没有结果。下面是新代码。分隔符//创建过程selUsers(在usrNme VARCHAR(25)中)开始设置名称“utf8”;从用户中选择用户id、用户真实名称、用户公司、用户名称,其中1和(用户真实名称,如CONCAT(“%”,usrNme,“%”)或用户公司,如CONCAT(“%”,usrNme,“%”)或用户名称,如CONCAT(“%”,usrNme,“%”),按用户真实名称ASC限制0,15排序;结束//分隔符;我不认为问题出在您的过程中,而是如何从代码中调用它。打开连接后,执行SET NAMES utf8命令,然后检查它的工作方式;谢谢。你试过把编码改成utf8\uUnicode\uCI吗?那么,检查一下你是否真的应该得到一些结果。