为了对国际化的支持,MySQL的客户端和服务器端开始都采用UTF8,包括表示层的各个页面也统一采用UTF-8,但这样在插入数据的时候就出现了ERROR 1406 (22001): Data too long for column 'username' at row 1错误!错误原因是‘username’字段数据太长,实际上最根本的原因是由于字符集编码的问题。
解决方案:
其实无论是JSP页面,还是命令提示符的方式,都是MySQL数据库的用户接口,在你往数据库中插入数据的时候,必须把这些“用户接口”的字符集编码设置成与数据库存储时的字符编码一致,这样才能正常显示。(正像我们在JSP页面中加入<%@ page language="java" pageEncoding="UTF-8"%>或'conten-type:text/html;charset=utf-8')
的意思一样,需要把命令提示符的字符集编码设成UTF8,然后再做相应的数据库操作。)
注意点:
1、windows下的命令提示符字符集编码只有GBK,它兼容GB2312,所以你可以在MySQL命令行使用set names gbk,也可以使用set names gb2312,因为gbk对gb2312兼容,但gbk对utf8却不兼容,换句话说,utf8字符集包括gbk,gbk包括gb2312.所以在windows下你使用set names gbk,set names gb2312都能正常操作。但是用set names utf8却会出错。但在windows下的命令提示符字符编码好像是修改不了的。Linux下是支持的!
2、如果你是在EMS,MySQL的一个图形化工具,在象上面设置的情况下,你看到的有可能还是乱码,你可以按以下操作来处理:1)右击数据库2)选择Database Registion info...3)在Client charset中选择[gb2312(GB2312 Simplified Chinese)] 或者[gbk(GBK Simplified Chinese)]