windws下mysql客户端登陆服务器选用字符集的不同造成的语句执行效果不正确
2009-05-23 22:39
429 查看
项目中涉及到了对中文的模糊查询,即对中文的匹配问题。该过程通过在系统中调用服务器端的存储过程来实现。将中文作为参数传入存储过程,模糊查询后,返回匹配结果。但是却总也无法返回结果。无奈,又是一上午搭进去了,好在,问题解决了。
下面说说这个问题,不仅仅是对这个问题,它是很多类似问题的典型代表,有很大的指定意义:说道底,这个问题是字符集编码的问题!!!
我的机器上装有mysql客户端,操作系统式windows xp;服务器上装有mysql服务器,操作系统是red hat Enterprise linux 5;
我在我的电脑的文本编辑器中写好存储过程脚本,然后,在cmd里面登录mysql服务器,执行存储过程的脚本,创建好存储过程。然后在我本地通过java应用程序调用存储过程,传进中文参数,得到返回结果,本该得到记录,但输出为空。而当我传入的参数是英文字符时却可以得到预期的结果集。
多余的就不说了,直接解释原因吧:
windows xp中的cmd是默认的GBK编码,那么我从这个平台下登录到linux服务器后,创建的存储过程全都是GBK编码的,包括我的存储过程中SQL脚本中的用于匹配中文的那个?参数(我是采用了预编译SQL的方式);既然这个问号是GBK编码的,它要去匹配的话就会找一个GBK的字符去匹配,而JAVA是UTF8编码的,当我从JAVA应用程序里传一个汉字进去,加入时"中",这个"中"就是UTF8编码的,它被传进存储过程后,存储过程会把这个字当成GBK编码的字去匹配,也就是指截取了这个UTF8编码的"中"的一个字节去匹配数据库中的记录,自然,没有匹配上的结果了。
问题明朗了,如何把存储过程中的字符以UTF8编码进行编译??
这里有几个解决的方式:
1:在LINUX服务器里面的终端里登录mysql服务器,创建该存储过程,由于LINUX默认的是UTF8编码,自然就会把存储过程创建为UTF8编码。
2:在windows xp的cmd中,登录mysql服务器的时候,指定字符集:mysql -h192.168.0.2 -uroot -ppswd --default-characer-set=utf8即可,这样,客户端与服务器之间就是通过统一的utf8编码进行通信了。
至此,问题解决。
这个问题也同样适用于对中文的导入导出:比如select * from table into outfile 'filepath'语句,若记录中存在中文,也需要用这种方式解决,同样导入也是。
下面说说这个问题,不仅仅是对这个问题,它是很多类似问题的典型代表,有很大的指定意义:说道底,这个问题是字符集编码的问题!!!
我的机器上装有mysql客户端,操作系统式windows xp;服务器上装有mysql服务器,操作系统是red hat Enterprise linux 5;
我在我的电脑的文本编辑器中写好存储过程脚本,然后,在cmd里面登录mysql服务器,执行存储过程的脚本,创建好存储过程。然后在我本地通过java应用程序调用存储过程,传进中文参数,得到返回结果,本该得到记录,但输出为空。而当我传入的参数是英文字符时却可以得到预期的结果集。
多余的就不说了,直接解释原因吧:
windows xp中的cmd是默认的GBK编码,那么我从这个平台下登录到linux服务器后,创建的存储过程全都是GBK编码的,包括我的存储过程中SQL脚本中的用于匹配中文的那个?参数(我是采用了预编译SQL的方式);既然这个问号是GBK编码的,它要去匹配的话就会找一个GBK的字符去匹配,而JAVA是UTF8编码的,当我从JAVA应用程序里传一个汉字进去,加入时"中",这个"中"就是UTF8编码的,它被传进存储过程后,存储过程会把这个字当成GBK编码的字去匹配,也就是指截取了这个UTF8编码的"中"的一个字节去匹配数据库中的记录,自然,没有匹配上的结果了。
问题明朗了,如何把存储过程中的字符以UTF8编码进行编译??
这里有几个解决的方式:
1:在LINUX服务器里面的终端里登录mysql服务器,创建该存储过程,由于LINUX默认的是UTF8编码,自然就会把存储过程创建为UTF8编码。
2:在windows xp的cmd中,登录mysql服务器的时候,指定字符集:mysql -h192.168.0.2 -uroot -ppswd --default-characer-set=utf8即可,这样,客户端与服务器之间就是通过统一的utf8编码进行通信了。
至此,问题解决。
这个问题也同样适用于对中文的导入导出:比如select * from table into outfile 'filepath'语句,若记录中存在中文,也需要用这种方式解决,同样导入也是。
相关文章推荐
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)
- 数据库字符集和客户端字符集(2%)是不同的,字符集转化可能会造成不可预期的后果
- mysql客户端登陆服务器速度奇慢的问题
- mysql版本不同所导致SQL语句执行错误的问题
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端),androidmysql
- Oracle数据库字符集和客户端字符集不同,强制转化可能会造成不可预期的后果
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)
- Unix网络编程卷一: 从服务器获取时间信息(三)-daytimetcpcli2客户端每次执行结果不同
- 08cms安装出错 MYSQL错误:MySQL服务器正在使用–secure-file-priv选项运行,因此无法执行此语句
- mysql服务器和客户端时区不同,使用jdbc得到的结果差8小时的问题
- Windws MySQL客户端 访问 ubuntu MySQL服务器
- mysql_query()只有语句不能被MySQL正确执行的时候才返回False
- 加入数据库mysql实现android注册登陆功能的客户端服务器源码与解析
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)
- php 执行mysql存储过程和手工执行效果不同
- mysql order by 造成语句 执行计划中Using filesort,Using temporary相关语句的优化解决
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端),androidmysql
- 无法用指定MySQL客户端登陆服务器的案例分析
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)
- Oracle数据库字符集和客户端字符集不同,强制转化可能会造成不可预期的后果