在Java中解决MySQL5.0中文字符集问题全程详细记录

发表于:2007-8-17 15:59

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:zieckey    来源:zieckey的博客

#
java
#
MySQL
#
mysql5
  今天被MySQL的中文字符集问题弄得焦头烂额,最终还是解决了.下面分享一下解决过程。
  在网上搜索了很多,网友也有很多精彩的帖子,但是每个人的情况不总是一样,所以我觉得我下面的文字有存在的必要。装了MySQL5.0后,系统默认的字符集似乎是UTF8,但是不知道为什么就是不支持中文。下面的是我的痛苦的解决过程。
  将数据库用character set 和 collate指定字符集为gbk,
mysql> create database test2  DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
Query OK, 1 row affected (0.00 sec)
mysql> create table a(a text);
Query OK, 0 rows affected (0.14 sec)
  插入的时候也用_gbk指定字符集,
mysql> insert a values(_gbk'默认数据库的字符集和');
Query OK, 1 row affected (0.05 sec)
  但是查询的时候还是出现乱。
mysql> select * from a;
+--------------------------------+
| a                              |
+--------------------------------+
| 榛樿鏁版嵁搴撶殑瀛楃闆嗗拰           |
+--------------------------------+
1 row in set (0.00 sec)
mysql>
  好的,那么是不是创建表也要指定字符集呢?
  我们继续测试
mysql> create table b(a text) DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
Query OK, 0 rows affected (0.06 sec)
mysql> insert b values(_gbk'默认数据库的字符集和');
Query OK, 1 row affected (0.01 sec)
mysql> select * from b;
+--------------------------------+
| a                              |
+--------------------------------+
| 榛樿鏁版嵁搴撶殑瀛楃闆嗗拰           |
+--------------------------------+
1 row in set (0.00 sec)
mysql>
  同样出现乱码?
  我们不用_gbk指定字符集呢?
mysql> insert b values('默认数据库的字符集和');
ERROR 1406 (22001): Data too long for column 'a' at row 1
mysql> insert a values('默认数据库的字符集和');
ERROR 1406 (22001): Data too long for column 'a' at row 1
  这样发现根本就插入不进数据。
  那么到底该怎么解决呢?
  运行下面的这几行命令,就能看到正常的中文了:
mysql> SET character_set_connection = gbk;
Query OK, 0 rows affected (0.00 sec)
mysql> SET character_set_database = gbk;
Query OK, 0 rows affected (0.00 sec)
mysql> SET character_set_results = gbk;
Query OK, 0 rows affected (0.00 sec)
mysql> SET character_set_server = gbk;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> SET collation_connection = gbk_bin;
Query OK, 0 rows affected (0.00 sec)
mysql> SET collation_database = gbk_bin;
Query OK, 0 rows affected (0.00 sec)
mysql> SET collation_server = gbk_bin;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> select * from a;
+----------------------+
| a                    |
+----------------------+
| 默认数据库的字符集和                  |
+----------------------+
1 row in set (0.00 sec)
mysql> select * from b;
+----------------------+
| a                    |
+----------------------+
| 默认数据库的字符集和                  |
+----------------------+
1 row in set (0.00 sec)
mysql>
  这样设置之后,也可以正常插入中文了:
mysql> insert into a values('当然是联系 java ');
Query OK, 1 row affected (0.02 sec)
mysql> select * from a;
+----------------------+
| a                    |
+----------------------+
| 默认数据库的字符集和                  |
| 当然是联系 java              |
+----------------------+
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号