开发者社区> rayner> 正文

解决hibernate向mysql插入中文乱码问题

简介: 一.mysql的问题解决 MySQL会出现中文乱码的原因不外乎下列几点:   1.server本身设定问题,例如还停留在latin1   2.table的语系设定问题(包含character与collation)   3.
+关注继续查看

一.mysql的问题解决

MySQL会出现中文乱码的原因不外乎下列几点:
   1.server本身设定问题,例如还停留在latin1
   2.table的语系设定问题(包含character与collation)
   3.客户端程式(例如php)的连线语系设定问题

 

(一)、避免创建数据库及表出现中文乱码和查看编码方法


1、创建数据库的时候:

  1. CREATE DATABASE `test`  
  2. CHARACTER SET 'utf8'  
  3. COLLATE 'utf8_general_ci';  

2、建表的时候 

  1. CREATE TABLE `database_user` (  
  2. `ID` varchar(40) NOT NULL default '',  
  3. `UserID` varchar(40) NOT NULL default '',  
  4. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  

这3个设置好了,基本就不会出问题了,即建库和建表时都使用相同的编码格式。


但是如果你已经建了库和表可以通过以下方式进行查询。
1.查看默认的编码格式:

  1. mysql> show variables like "%char%";  
  2. +--------------------------+---------------+  
  3. | Variable_name | Value |  
  4. +--------------------------+---------------+  
  5. | character_set_client | gbk |  
  6. | character_set_connection | gbk |  
  7. | character_set_database | utf8 |  
  8. | character_set_filesystem | binary |  
  9. | character_set_results | gbk |  
  10. | character_set_server | utf8 |  
  11. | character_set_system | utf8 |  
  12. +--------------------------+-------------+  


注:以前2个来确定,可以使用set names utf8,set names gbk设置默认的编码格式;

 

执行SET NAMES utf8的效果等同于同时设定如下

  1. SET character_set_client='utf8';  
  2. SET character_set_connection='utf8';  
  3. SET character_set_results='utf8';   

2.查看test数据库的编码格式:

  1. mysql> show create database test;  
  2. +------------+------------------------------------------------------------------------------------------------+  
  3. Database | Create Database |  
  4. +------------+------------------------------------------------------------------------------------------------+  
  5. | test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET gbk */ |  
  6. +------------+------------------------------------------------------------------------------------------------+  


3.查看yjdb数据表的编码格式:

  1. mysql> show create table yjdb;  
  2. | yjdb | CREATE TABLE `yjdb` (  
  3. `sn` int(5) NOT NULL AUTO_INCREMENT,  
  4. `type` varchar(10) NOT NULL,  
  5. `brc` varchar(6) NOT NULL,  
  6. `teller` int(6) NOT NULL,  
  7. `telname` varchar(10) NOT NULL,  
  8. `date` int(10) NOT NULL,  
  9. `count` int(6) NOT NULL,  
  10. `back` int(10) NOT NULL,  
  11. PRIMARY KEY (`sn`),  
  12. UNIQUE KEY `sn` (`sn`),  
  13. UNIQUE KEY `sn_2` (`sn`)  
  14. ) ENGINE=MyISAM AUTO_INCREMENT=1826 DEFAULT CHARSET=gbk ROW_FORMAT=DYNAMIC |  

 

(二)、避免导入数据有中文乱码的问题

1:将数据编码格式保存为utf-8
设置默认编码为utf8:
set names utf8;
设置数据库db_name默认为utf8:

  1. ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;  

设置表tb_name默认编码为utf8:

  1. ALTER TABLE `tb_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;  

导入:

  1. LOAD DATA LOCAL INFILE 'C:\\utf8.txt' INTO TABLE yjdb;  

2:将数据编码格式保存为ansi(即GBK或GB2312)
设置默认编码为gbk:
set names gbk;
设置数据库db_name默认编码为gbk:

 
  1. ALTER DATABASE `db_name` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;  

设置表tb_name默认编码为gbk:

 

  1. ALTER TABLE `tb_name` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;  

导入:


 
  1. LOAD DATA LOCAL INFILE 'C:\\gbk.txt' INTO TABLE yjdb;  

 

注:1.UTF8不要导入gbk,gbk不要导入UTF8;
2.dos下不支持UTF8的显示;

二.hibernate的问题

   1. hibernate.cfg.xml加上属性. 
           <property name="connection.useUnicode">true</property> 
           <property name="connection.characterEncoding">UTF-8</property> 

    

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
18381 0
CI中REST URL含有中文怎么处理(报错:The URI you submitted has disallowed characters)
解决方法: 客户端在发送GET URL请求的时候,将含有中文的URL编码即可 比如: 原始:http://localhost/qk/rest/user_album_api/get_user_albums_by_desc/album_desc/风景/page_num/1/page_size/3 URL转码 http://tool.
1031 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
23614 0
mysql中文乱码
mysql是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面就来介绍一下如何彻底解决数据库中文乱码情况。 1、中文乱码 1.1、中文乱码 create table user(name varchar(11)); # 创建user表 i...
2326 0
mysql中文乱码解决办法
Windows 在C:\Program Files\MySQL\MySQL Server 5.5\bin目录下   MySQLInstanceConfig.exe执行 重新配置character_set_server=utf8   show variables like "%char%";    ...
828 0
Mac mysql 解决中文乱码
Mac mysql 解决中文乱码问题 出现“???”之类的无法识别的乱码 到/etc目录下自己建一个my.cnf文件(需要最高权限,使用sudo su),然后写入内容: [client] default-character-set=utf8 [mysqld] character-set-server=utf8 保存,修改。
1025 0
+关注
338
文章
4
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载