本帖最后由 kerryhe 于 2012-12-22 22:28:00 编辑

解决方案 »

  1.   

    先检查一下字符集设置。特别是CLINET端的字符集设置。http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码
      

  2.   


    问题是我的程序和文档都是UTF8的编码,数据库也是UTF8字符集的,大部分数据插入都是正常的,乱码的都是插入的数据字符比较多的(比如一片几万字的文章,insert进去就会乱码),我就是怀疑是数据量过大造成的乱码,不知何解?
      

  3.   

    mysql> show full fields from ff_test_vod
        -> ;
    +-------------------+-----------------------+-----------------+------+-----+----
    -----+----------------+---------------------------------+---------+
    | Field             | Type                  | Collation       | Null | Key | Def
    ault | Extra          | Privileges                      | Comment |
    +-------------------+-----------------------+-----------------+------+-----+----
    -----+----------------+---------------------------------+---------+
    | vod_id            | mediumint(8) unsigned | NULL            | NO   | PRI | NUL
    L    | auto_increment | select,insert,update,references |         |
    | vod_cid           | smallint(6)           | NULL            | NO   | MUL | 0
         |                | select,insert,update,references |         |
    | vod_name          | varchar(255)          | utf8_general_ci | NO   |     | NUL
    L    |                | select,insert,update,references |         |
    | vod_title         | varchar(255)          | utf8_general_ci | NO   |     | NUL
    L    |                | select,insert,update,references |         |
    | vod_keywords      | varchar(255)          | utf8_general_ci | NO   |     | NUL
    L    |                | select,insert,update,references |         |
    | vod_color         | char(8)               | utf8_general_ci | NO   |     | NUL
    L    |                | select,insert,update,references |         |
    | vod_actor         | varchar(255)          | utf8_general_ci | NO   |     | NUL
    L    |                | select,insert,update,references |         |
    | vod_director      | varchar(255)          | utf8_general_ci | NO   |     | NUL
    L    |                | select,insert,update,references |         |
    | vod_content       | text                  | utf8_general_ci | NO   |     | NUL
    L    |                | select,insert,update,references |         |
    | vod_pic           | varchar(255)          | utf8_general_ci | NO   |     | NUL
    mysql> show variables like 'char%'
        -> ;
    +--------------------------+----------------------------------------------------
    -----+
    | Variable_name            | Value
         |
    +--------------------------+----------------------------------------------------
    -----+
    | character_set_client     | utf8
         |
    | character_set_connection | utf8
         |
    | character_set_database   | utf8
         |
    | character_set_filesystem | binary
         |
    | character_set_results    | utf8
         |
    | character_set_server     | utf8
         |
    | character_set_system     | utf8
         |
    | character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.1\share\chars
    ets\ |
    +--------------------------+----------------------------------------------------
    -----+
    8 rows in set (0.00 sec)
    用的PERL链接MYSQL
    $dbh = DBI->connect("DBI:mysql:database=".$dbname.";host=".$location1, $db_user, $db_pass);
    $sql="INSERT INTO $table1(vod_name) VALUES ( '$ys_name')";
    $dbh->{LongReadLen}   = 5242880;
    $dbh->do("SET NAMES 'utf8'");
    $sth = $dbh->prepare($sql);
    $sth->execute();insert进去有点记录正常,有的记录不正常。乱码的都是插入字段数据比较大的。
      

  4.   

    是不是你的SQL语句最大长度限制? 检查一下MYSQL的 max_allowed_packet 设置
      

  5.   

    解决了。
    我把SQL语句写入到一个文本,然后再读取这个文本,把SQL写入数据库就没有乱码,估计还是PERL什么地方的问题,但是不知道具体出错的原因。
    谢谢各位大大。