mysql5.0.27,驱动也是5.0的通过odbc从sqlserver2000移植数据到mysql,但是有四字节汉字的数据无法导入,只好用java自己写程序导,从mssql读数据逐条插入mysql,结果还是有四字节的汉字时报错
Data truncation:data too long for columnmysql启动服务里面charset...已经设置成utf8了,而且java连接mysql的url里面也指定了字符集utf8,还有useunicode=ture,还是会有这样的错,普通汉字没问题把text或者varchar改成blob,用二进制流存入,然后读取结成string,但是这样的话select语句怎么用?对二进制流肯定没法用select
还是先解决varchar无法插入四字节汉字的问题吧,谁碰到过这样的问题,请指点,多谢

解决方案 »

  1.   

    是不是你在设置varchar字段的时候没有定义它的大小呢 !再导数据进去的时候就发生数据太长!
      

  2.   

    不是,长度绝对够用,不止varchar报错,其他的text这种带有字符类型的字段,就都报这种错,即使只有一个四字节的字
      

  3.   

    这个我也碰到过,好象是字符类型问题
    我是这么解决的
    先设置服务器和客户端的默认
    default-character-set=gbk
    字段类型也是gbk
    可有时候中间中文字符传递的时候还是有问题
    如 Update TMP_ResultTable
    SET RESULT =  date_format(now(),'%Y年%m月%d日')  WHERE Flag = 8;
    我在做如下处理就没有报错了
    Update TMP_ResultTable
    SET RESULT =  cast(date_format(now(),'%Y年%m月%d日')  as char(50))   WHERE Flag = 8;
      

  4.   

    GBK的里面不包括四字节的字,utf8不行的话,gbk也够呛不想普通的中文那样,感觉有四字节的字时,mysql无法判断子长,所以总报too long,其实不是,只是他无法识别这个字符串,如果是blob类型的字段,就可以用二进制方式存,但是like语句啥的就没意义了,存上也没用
      

  5.   

    看看我的My.ini,你就知道了!但是这不是使用ODBC,而是直接连接
    [client]port=3306
    default-character-set=gbk[mysql]default-character-set=gbk[mysqld]# The TCP/IP Port the MySQL Server will listen on
    port=3306default-character-set=gbk
      

  6.   

    mysql5.1及以下版本的utf8应该仅支持三个字节长度的字符,大于3字节的长度的是不支持的!或许您可以试一试mysql5.5 看起来utf16 utf32 utf8mb4的maxlen都可以到4字节utf16 utf16_general_ci UTF-16 Unicode 4
    utf32 utf32_general_ci UTF-32 Unicode 4
    utf8 utf8_general_ci UTF-8 Unicode 3
    utf8mb4 utf8mb4_general_ci UTF-8 Unicode 4