码迷,mamicode.com
首页 > 数据库 > 详细

数据库CRUD中的中文编码问题

时间:2015-08-12 23:42:58      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

几天前的拼命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;



数据库CRUD中的中文编码问题

标签:

原文地址:http://my.oschina.net/happyBKs/blog/491615

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!