几天前的拼命coding碰到了很多问题,其中一个就是中国特色程序猿问题——中文编码乱码。
当我把写好的DAO模块测试CURD时,数据库执行正常,但是所有的字段中的中文全部乱码。我尝试了修改eclipse项目默认编码为UTF-8,尝试设置数据库的表的编码
alter table type character set utf8;
都无济于事。
自己曾经遇到过这种情况,但是没有整理过,到了用的时候,眉头一皱,计就是不上来。
折腾了半个钟头,终于找到了解决办法:
这里就忘了刚才的囧吧,咳咳,加入我们刚刚开始建立数据库表:
我们应该这么做:
CREATE TABLE jingdian(id INT PRIMARY KEY AUTO_INCREMENT, businessId INT, businessName VARCHAR(200), city VARCHAR(100), longitude DOUBLE, latitude DOUBLE, hashCode VARCHAR(200) ) default charset = utf8;
就是在创建表的末尾加入默认字符集的定义:但是为什么之前修改表字符集操作时没能成功,让人有点费解。我猜测的原因是之前数据库的编码默认为别的类型,当我存入utf-8编码的数据时它被认为是MYSQL的默认编码数据而被错误解码,出现乱码,而我修改表的字符编码时,这时候MYSQL又将这些本来就乱了的字符按照某种编码转换方法以MYSQL原默认编码向UTF-8转换,错上加错。具体原因还有待考察,这里只是我的推测。
然后数据库的访问url也需要指定参数,这是我平时没注意的方式,不需要牵涉具体的数据库交互组件的使用。具有相当的通用性,这里推荐给大家:
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8 username=root password=
我查看了其他人的博客,似乎还有其他的解决办法,这里我找了几条比较清楚的:
1. SET NAMES ‘utf8‘;
它相当于下面的三句指令:
SET character_set_client = utf8; SET character_set_results = utf8; SET character_set_connection = utf8;
2. 创建数据库
mysql> create database name character set utf8;
3. 创建表
CREATE TABLE `type` ( `id` int(10) unsigned NOT NULL auto_increment, `flag_deleted` enum(‘Y‘,‘N‘) character set utf8 NOT NULL default ‘N‘, `flag_type` int(5) NOT NULL default ‘0‘, `type_name` varchar(50) character set utf8 NOT NULL default ‘‘, PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8;
4. 修改数据库成utf8的.
mysql> alter database name character set utf8;
5. 修改表默认用utf8.
mysql> alter table type character set utf8;
6. 修改字段用utf8
mysql> alter table type modify type_name varchar(50) CHARACTER SET utf8;
时间: 2024-10-21 07:19:39