技术开发 频道

小议MySQL中的字符集处理

  四、乱码的产生

  乱码的产生主要是由于字符集变量设置的不一致造成的。

  操作系统有一个在显示字符时要使用的locale变量,linux下使用locale命令可以看到。

  windows下使用chcp可以看到,gbk对应的code page应该是936。

  如果操作系统安装了当前字符集与目标字符集的转换表,则能正确显示目标字符集中的字符,否则就会出现乱码。

  latin1对应的是iso8859_1字符集,默认情况下,可以与gbk相互转换,至少在操作系统一级是这样。

  五.乱码的避免

  最好让上述9个字符集变量值保持一致,或者至少“兼容”,同时也要考虑到OS中locale的值。

  当然:character_set_system例外,它是存储和表示元信息使用的字符集,一般都是ascii串,使用utf8和使用latin1基本一样,但是,如果使用中文,可能就另当别论了。下边说的全部变量是指除了character_set_system以外的其它变量。

  这里推荐三个方案:

  1. 全部使用latin1

  但是在java程序中,它担着一定的风险,即在入库之前,需要将字符串从gbk转换到iso8859_1,出库以后,获取结果时,再从iso8859_1转到gbk.

  否则会出现乱码。

  这种方式比较适合于C代码,显示依赖于操作系统的locale.一般都不用转换。

  2. 全中文支持,全部设置成gbk.

  方法:

  在my.ini中修改添加:(这个是必须的)

  [mysqld]

  default-character-set=gbk

  在java程序里边使用"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GBK"这样的url,表明使用GBK进行编码。

  3. utf8字符集支持.

  方法:

  在my.ini中修改添加:

  [mysqld]

  default-character-set=utf8

  在java程序里边使用"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"这样的url,表明使用GBK进行编码。

  注意utf8与UTF-8的分别.

  utf8的好处是java虚拟机可以自动将它与gbk进行转换,因而显示都不会有乱码。可是在控制台下(cmd),显示就有问题了。

0
相关文章