aaron3481 / assql

Automatically exported from code.google.com/p/assql
0 stars 0 forks source link

wrong chinese charSet code in assql 2.7(2.7版本中的mysql中文乱码问题) #92

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
sorry, I cant write 'good English'  :)

What steps will reproduce the problem?
1. mysql 5.0 assql 2.7 read chinese word
2. nothing to do
3. the problem comes

What is the expected output? What do you see instead?
北京烤鸭(expected)===>鍖椾含鐑ら腑(unexpected)

=======================
to solve the problem
---------------------
package com.maclema.mysql
class ResultSet
/* // older code //as what you saw , the two "charSet" -_-b 
internal function initialize(charSet:String):void {
    charSet = charSet;
*/
//change it to
internal function initialize(_charSet:String):void {
    charSet = _charSet;
//everything go back that way
===========================================
写给中国的兄弟们
assql2.7版本貌似从编码上已经很好的解决了以前的中文乱码问
题,不再需要mysql屏蔽严格的
sql mode ,也不需要修改assql的HandshakeHandler “packet.writeByte( 8 
)”到
“packet.writeByte( 33 )”
但是或许由于粗心,包com.maclema.mysql中的ResultSet类之中对编码
设置的initialize方
法出现语法错误。
两个变量charSet 位于同一域,导致类变量charSet 
不能获得外部传入的编码值
如下修改会解决问题
internal function initialize(charSet:String):void {
    charSet = charSet;
改成
internal function initialize(_charSet:String):void {
    charSet = _charSet;
我分别测试了 mysql 的ini中 sql mode设置 还有 修改 HandshakeHandler
这两者跟乱码与否已经没有关系了
在2.7版本只要修改了上面的域变量问题,在我的两台服务器��
�就不会乱码了。
voidWizard   2010-1-6

Original issue reported on code.google.com by hell_wu...@163.com on 6 Jan 2010 at 10:15

GoogleCodeExporter commented 9 years ago
大家好!
   是否有朋友用过assql 访问mysql,小弟在处理中文字符时出现问题。
   查询的时候中文问题已经解决。
源码:
    sql =" insert into sc_user (user_name) values('中文')";
public function insertData(sql:String):void{

                    var st:Statement = conn.createStatement();
                        var token:MySqlToken = st.executeQuery(sql);
                        token.addResponder(new AsyncResponder(
                                function(data:Object, token:Object):void {
                                          trace(data.insertID);
                                        Alert.show("保存成功!");
                                        //sendNotification( ApplicationFacade.INSERT_DATA,"success" );
                                },
                                function(info:Object, token:Object):void {
                                        //sendNotification( ApplicationFacade.INSERT_DATA,"fail" );
                                        Alert.show("Error: " + info);
                                },
                                token
                        ));
  抛出错误异常:

       Error: SQL Error #22021: Incorrect string value: '\xD6\xD0\xCE\xC4' for column 'user_name' at row 1

  问题所在:
       assql 底层应该是用socket传数据的,应该是在传数据的时候做了编码。
       是否要改assql的底层,有没有童学遇到过。
       请各位不吝赐教,谢谢

Original comment by Chunyi.Z...@gmail.com on 12 Jun 2011 at 1:51