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

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

数据库CRUD中的中文编码问题的相关文章

关于数据库表中的索引及索引列的CRUD

-- 查询一个数据库表中的索引及索引列use [RuPengWangDB]GOSELECT  indexname = a.name , tablename = c. name , indexcolumns = d .name , a .indidFROM    sysindexes a JOIN sysindexkeys b ON a .id = b .id  AND a .indid = b.indid        JOIN sysobjects c ON b .id = c .id    

[转]深入分析 Java 中的中文编码问题

收益匪浅,所以转发至此 原文链接: http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/ 深入分析 Java 中的中文编码问题 编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多.本文将向你详细介绍 Java 中编码问题出现的根本原因,你将了解到:Java 中经常遇到的几种编码格式的区别:Java 中经常需要编码的场景:出现中文问题的原因分析:在开发 Java

深入分析 Java 中的中文编码问题--转

几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言.由于人类的语言有太多,因而表示这些语言的符号太多,无法用计算机中一个基本的存储单元—— byte 来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解.我们可以把计算机能够理解的语言假定为英语,其它语言要能够在计算机中使用必须经过一次翻译,把它翻译成英语.这个翻译的过程就是编码.所以可以想

解析php开发中的中文编码问题

其实php开发中的中文编码并没有想像的那么复杂,虽然定位和解决问题没有定规,各种运行环境也各不尽然,但后面的原理是一样的. 了解字符集的知识是解决字符问题的基础. PHP程序设计中中文编码问题曾经困扰很多人,导致这个问题的原因其实很简单,每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ASCII 码, 中国的 GB2312-80,日本的 JIS 等.作为该国家/区域内信息处理的基础,字符编码集起着统一编码的重要作用.字符编码集按长度分为 SBCS(单字节字符集),DBCS(

数据库设计中的Soft Delete模式

最近几天有点忙,所以我们今天来一篇短的,简单地介绍一下数据库设计中的一种模式——Soft Delete. 可以说,该模式毁誉参半,甚至有非常多的人认为该模式是一个Anti-Pattern.因此在本篇文章中,我们不仅仅会对该模式进行介绍,同时也会列出该模式可能导致的一系列问题,以帮助大家正确地决定是否使用该模式. Soft Delete简介 首先先来想一个需求,那就是对用户操作的回滚支持.例如我现在正在用Word编写这篇文章.当我执行了一个错误操作的时候,我仅仅需要键入Ctrl + Z就可以进行回

[SQL_Server_Question]Msg 1105无法为数据库 'tempdb' 中的对象分配空间,因为 'PRIMARY' 文件组已满

错误消息: Msg 1105, Level 17, State 2, Line 266Could not allocate space for object 'dbo.Large Object Storage System object: 422392492982272' in database 'tempdb' because the 'PRIMARY' filegroup is full. Create disk space by deleting unneeded files, dropp

定时从一个数据库表中的数据存储到另外一个数据库中的表,而且怎么处理重复的数据?

原文:http://www.iteye.com/problems/77856 定时从一个数据库表中的数据存储到另外一个数据库中的表,而且怎么处理重复的数据? 表结构肯定是不能破坏,但是临时表如果是自己的数据库还行,问题是这个Oracle数据库是客户的数据库呢,你不能在他的数据库做任何多余的操作吧?还有别的更好的方法吗? 这个真的是比较困难. 首先,你要从客户机oracle取数据,因为这1分钟间隔之内不知道用户机新增加了哪些数据(大部分情况下是用户使用别的系统插入数据,而你又没有这个系统的程序接口

FineUI之使用SQL脚本从数据库表中生成相应的输入控件

在WEB开发时,经常需要依据数据库表中的字段建立相应的输入控件,来获取输入的数据.每次都需要按字段来敲,显然太低效,而且容易出错.这里提供一个SQL脚本生成相应输入控件的方法. USE DBDemo DECLARE @TEMP_TABLE_NAME NVARCHAR(512) DECLARE @WIDTH NVARCHAR(50) SET @TEMP_TABLE_NAME='Stuff' SET @WIDTH='200' SELECT '<f:'+TOKEN+' runat="server

百度地图的使用之获取数据库表中信息的坐标点显示在地图上

//通用封装好的js: var map = new BMap.Map("container"); //建树Map实例 var point = new BMap.Point(103.976032, 33.845509); // 建树点坐标 map.centerAndZoom(point, 6); // 初始化地图,设置中心点坐标和地图级别. //地图事件设置函数: map.enableDragging(); //启用地图拖拽事件,默认启用(可不写) map.enableScrollWhe