此页面使用的 mysql 可视化工具为 SQLyog。
mysql 的变量共有三种:
1、全局变量(也叫内置变量):是 mysql 内部定义好的一些变量;
查看所有的全局变量:show variables;
查看跟字符集有关的全局变量:show variables like"character_%";
查看某一个具体的全局变量:select @@变量名,比如 select @@character_set_client;
全局变量中有一个 character_set_client,表示客户端输入数据的编码格式(即服务器接收数据的编码格式),现在值为 utf8;
然后再查看命令行的编码格式为:GBK
在 mysql 命令行中插入 中文数据 会报错:
解决办法是 把 character_set_client 的值改为 gbk, 方法如下:
但是在查询数据的时候又出现乱码了:
注意:我这里出现的乱码是 问号??
而 老师 演示时出现的乱码如下:
按照老师的说法 是因为全局变量 character_set_results 的值为 utf8,表示 mysql 输出数据的编码为 utf8,而前面我们查过了 命令行的编码为 gbk;也就是说 mysql 输出的数据是使用 utf8 进行编码的,而命令行是使用 gbk 解析数据并显示的,所以会乱码;
老师给的解决办法是:修改 character_set_results 的值为 gbk,结果如下:没有问题!!!
但是,我的即使 character_set_results 改为 gbk,还是会显示 问号??:
网上查了很多方法,试过都不行;后来测试时 无意间发现,可以通过修改 命令行的编码格式来解决:
1)、先将 命令行编码改为 utf-8
注意,不能在 mysql 命令行中修改,要退出 mysql,在 命令提示符 界面修改,输入 chcp 65001 直接回车,表示修改命令行的编码为 utf-8:
修改完成:当前活动页变为 65001
2)、然后 再重新改回 GBK:在命令提示符输入 chcp 936,直接回车
修改完成:当前活动页变为 936
3)、然后再进入 mysql(命令行输入:mysql -u root -p,回车之后输入密码),可以看到中文乱码为:
4)、因为 set 修改变量的值是临时的,mysql 退出重新登录以后就会恢复为 utf8;
所以重新将 character_set_client 和 character_set_results 的值改成 gbk,就可以在 mysql 命令行中插入和显示中文了;
2、会话变量:只存在于当前 客户端与服务端的一次连接当中,如果连接断开,会话变量会自动销毁;
定义会话变量:set @变量名=变量值;
查看会话变量:select @变量名;
3、局部变量:在存储过程中使用的变量叫做局部变量;存储过程执行完毕,局部变量自动销毁;
调用 存储过程: