MySQL存儲函數中文亂碼

img


用命令行創建一個存儲函數后發現裡面的中文變成了亂碼,調用函數的查詢結果為空,但是用navicat直接修改又可以正常出現結果

检查你的命令行字符集,需要与数据库的一致。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7618526
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:MySQL基础(五):图形化客户端Navicat的介绍和使用教程、使用 Navicat 创建数据库并向表中添加数据
  • 除此之外, 这篇博客: 【草稿】通过Navicat创建MySQL存储过程清理指定数据库表中数据的过程记录中的 例一:通过文本字符拼接一个预处理语句 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #创建一个函数求(X^2+Y^2)的平方根:
    #?表示与参数进行绑定,?不需要用引号引用,相当于在prepare的时候就把sql写死
    PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS result';
    SET @X = 3;
    SET @Y = 4;
    EXECUTE stmt1 USING @X @Y;
    

    输出:

    result
    5
    
  • 您还可以看一下 刘运强老师的MySQL数据库从入门到实战课课程中的 Navicat无法连接MySQL 8.0的问题解决小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    解决MySQL存储函数中文乱码的问题可以尝试以下步骤:

    1. 确认MySQL字符集设置正确。可以使用以下命令查看当前MySQL的字符集:show variables like '%character%';,确保character_set_servercharacter_set_database的值都是UTF-8。如果不是,则可以使用以下命令修改字符集设置:set character_set_server=utf8;set character_set_database=utf8;

    2. 确认存储函数代码文件的编码格式正确,应当是UTF-8编码格式。可以使用文本编辑器打开存储函数代码文件,确认编码格式是否为UTF-8。如果不是,则将其转换为UTF-8编码格式。

    3. 如果以上两步都没有解决问题,可以考虑使用Navicat等客户端工具进行存储函数的修改和使用,可能能够规避中文乱码问题。

    如果以上步骤都不能解决问题,可能是其他未知因素造成的,需要更多详细信息进行分析和解决。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

1.创建存储函数时指定 CHARACTER SET 参数为 utf8,或者将 mysql 的字符集配置为处理中文字符。


CREATE FUNCTION get_chinese_name(name VARCHAR(50)) RETURNS VARCHAR(50) CHARSET utf8mb4

2.或在 mysql 配置文件中添加配置来指定 mysql 的字符集为处理中文字符


[mysqld]  
character-set-server=utf8mb4  
collation-server=utf8mb4_general_ci