MySQL中的字符集涵义及使用方法总结(二)

五.乱码的避免
最好让上述9个字符集变量值保持一致,或者至少“兼容”,同时也要考虑到OS中locale的值。
当然:character_set_system例外,它是存储和表示元信息使用的字符集,一般都是ascii串,使用utf8和使用latin1基本一样,但是,如果使用中文,可能就另当别论了。下边说的全部变量是指除了character_set_system以外的其它变量。

这里推荐三个方案:
1. 全部使用latin1
但是在java程序中,它担着一定的风险,即在入库之前,需要将字符串从gbk转换到iso8859_1,出库以后,获取结果时,再从iso8859_1转到gbk.
否则会出现乱码。
这种方式比较适合于C代码,显示依赖于操作系统的locale.一般都不用转换。

2. 全中文支持,全部设置成gbk.
方法:
    在my.ini中修改添加:(这个是必须的)
    [mysqld]
    default-character-set=gbk
    在java程序里边使用"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GBK"这样的url,表明使用GBK进行编码。
      
3. utf8字符集支持.
方法:
    在my.ini中修改添加:
    [mysqld]
    default-character-set=utf8   
    在java程序里边使用"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"这样的url,表明使用GBK进行编码。   
    注意utf8与UTF-8的分别.
utf8的好处是java虚拟机可以自动将它与gbk进行转换,因而显示都不会有乱码。可是在控制台下(cmd),显示就有问题了。       

六.使用java代码显示字符集变量及测试字符集的显示
因为只是作测试用,所以没加修饰。测试时,只需要按照上述三个方法修改字符集即可。
import java.sql.*;

/** *//**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: </p>
 *
 * 
@author not attributable
 * 
@version 1.0
 
*/

public class TestCharset ...{
  String username 
= "root";
  String passwd 
= "";
  Connection conn 
= null;
  String charset 
= null;
  
public TestCharset() ...{
  }

 
  
public void connect() throws SQLException, ClassNotFoundException ...{
    Class.forName(
"com.mysql.jdbc.Driver");
    String url 
= "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";
    conn 
= DriverManager.getConnection(url, username, passwd);
    charset 
= url.substring(url.lastIndexOf("=")+1);
  }

 
  
public void getCharset() throws SQLException...{
    Statement stmt 
= conn.createStatement();
    System.out.println(
"=======show variables like 'chara%'========");
    ResultSet rset 
= stmt.executeQuery("show variables like 'chara%'");
    
while (rset.next()) ...{
      System.out.println(rset.getString(
1+ " ------> " + rset.getString(2));
    }

    rset.close();
    System.out.println(
"=======show variables like 'collation%'========");
    rset 
= stmt.executeQuery("show variables like 'collation%'");
    
while (rset.next()) ...{
      System.out.println(rset.getString(
1+ " ------> " + rset.getString(2));
    }

    rset.close();   
    stmt.close();
  }

 
  
public void testGetValuesISO8859_1() throws Exception  ...{
    Statement stmt 
= conn.createStatement();
    
try ...{
      stmt.executeUpdate(
"drop table t12345");
    }
 catch (Exception e) ...{
     
    }

    stmt.executeUpdate(
"create table t12345(id int primary key, name varchar(32))");
    String sz 
= new String("中文".getBytes("gbk"), "ISO8859_1");
    stmt.executeUpdate(
"insert into t12345 values(1, '" + sz + "')");
    ResultSet rset 
= stmt.executeQuery("select * from t12345");
    rset.next();
    System.out.println(
"测试中文值: " + new String(rset.getString(2).getBytes("ISO8859_1"), "GBK"));
    rset.close();
   
    stmt.close();
  }

  
public void testGetValuesGBK() throws Exception  ...{
    Statement stmt 
= conn.createStatement();
    
try ...{
      stmt.executeUpdate(
"drop table t12345");
    }
 catch (Exception e) ...{

    }

    stmt.executeUpdate(
"create table t12345(id int primary key, name varchar(32))");
    stmt.executeUpdate(
"insert into t12345 values(1, '中文')");
    ResultSet rset 
= stmt.executeQuery("select * from t12345");
    rset.next();
    System.out.println(
"测试中文值: " + rset.getString(2));
    rset.close();

    stmt.close();
  }
 
  
public void testGetValuesUTF8() throws Exception  ...{
     Statement stmt 
= conn.createStatement();
     
try ...{
       stmt.executeUpdate(
"drop table t12345");
     }
 catch (Exception e) ...{
 
     }

     stmt.executeUpdate(
"create table t12345(id int primary key, name varchar(32))");
     
//String sz = new String("中文".getBytes("gbk"), "UTF8");
     stmt.executeUpdate("insert into t12345 values(1, '中文')");
     ResultSet rset 
= stmt.executeQuery("select * from t12345");
     rset.next();
     System.out.println(
"测试中文值: " + rset.getString(2));
     rset.close();
 
     stmt.close();
  }
 
  
public void disconnect() throws SQLException...{
    
if (conn != null) conn.close();
  }

  
public static void main(String[] args) ...{
    TestCharset t 
= new TestCharset();
    
try ...{
      t.connect();
      t.getCharset();
      
if (t.charset.equals( "ISO8859_1" ))
        t.testGetValuesISO8859_1();
      
else if (t.charset.equals("GBK"))
        t.testGetValuesGBK();
      
else if (t.charset.equals("UTF-8"))
        t.testGetValuesUTF8();
    }
 catch (Exception e) ...{
      
//System.out.println(e.getMessage());
      e.printStackTrace();
    }
 finally ...{
      
try ...{
        t.disconnect();
      }
 catch (Exception e2) ...{
      }

    }

  }

}

有什么问题,欢迎来讨论。
 

转载于:https://www.cnblogs.com/mixer/archive/2006/09/20/2448962.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vim 多行添加注释,取消注释

转发 已经验证 https://blog.csdn.net/SuiXin_123/article/details/81393397转载于:https://www.cnblogs.com/pingg/p/10509301.html

调用未知DLL中的导出函数

不知道诸位看官是否有过这样的经历&#xff1a;在不经意之间发现一个DLL文件&#xff0c;它里边有不少有趣的导出函数——但是由于你不知道如何调用这些函数&#xff0c;所以只能大发感慨而又无能为力焉。固然有些知名的DLL可以直接通过搜索引擎来找到它的使用方式&#xff08;…

构建之法与博客首秀

问题一&#xff1a;软件的安全功能是指什么呢&#xff1f; 我看了《构建之法》第七页对飞机安全功能的的描述&#xff0c;想知道在软件中是否有类似飞机的安全功能&#xff1f;如果有&#xff0c;具体是指什么功能呢&#xff1f;我在查阅资料后只找到对软件安全的的总结(软件安…

java接口import_深入理解Java架构师在组件注册@Import导入容器(ImportSelector接口)的神操作!...

ImportSelector&#xff1a;返回需要导入的组件的全类名数组创建一个实现了ImportSelector接口的类&#xff0c;然后让入Import中。ImportSelector的实现类包含了所有需要导入到容器中的组件。public class StuConfigurationImportSerlect implements ImportSelector {Override…

java builder pool_每周10道Java面试题:String, String Pool, StringBuilder

每周10道 Java 面试题由 ImportNew 整理编译自网络。1. 写出下面代码的运行结果。int src 65536;Integer dst new Integer(65536);System.out.println(src dst);System.out.println(dst.equals(src));答案&#xff1a; true true考点&#xff1a; Integer 的 equals 实现。查…

将字符串中的字符按Z字形排列,按行输出

示例1&#xff1a; Input: s "PAYPALISHIRING", numRows 3 Output: "PAHNAPLSIIGYIR" 示例2&#xff1a; Python解决方案&#xff1a; def convert(self, s, numRows):""":type s: str:type numRows: int:rtype: str"""…

大型网络架构变迁和知识图谱

——仅供个人学习使用&#xff0c;如有侵犯版权&#xff0c;请作者联系我&#xff0c;立马处理。 【前端页面缓存】 sessionStorage,localStorage,userData,cookie, [sessionStorage] h5后出现的新技术&#xff0c;这个生命周期短&#xff0c;当页面关闭后&#xff0c;存储资源…

H265摄像头如何实现网页直播

介绍 目前安防监控行业&#xff0c;基本所有的摄像头都支持H264编码&#xff0c;但是已经有部分摄像头开始支持H265&#xff0c;并且支持H265的摄像机已经越来越多。H265相比H264有着很多优势&#xff0c;是压缩更高&#xff0c;网络传输消耗的带宽更小&#xff0c;相同码率下H…

【Python selenium自动化环境配置】4步搞定ChromeDriver版本选择

很多刚做自动化的小伙伴&#xff0c;会在ChromeDriver版本选择时犯难&#xff0c;看来大家都被坑过&#xff0c;真正掌握独门绝技&#xff0c;都不是难事儿。 看好了主要步骤就4部 1、确定谷歌浏览器版本 2、找到谷歌浏览器版本与ChromeDriver版本对应关系 3、下载ChromeDriver…

[贴图]TVB香港大部分演员照片、姓名(值得收藏)

转载于:https://www.cnblogs.com/chinhr/archive/2006/11/15/561101.html

我的世界java笔刷指令_《我的世界》基本笔刷教程

《我的世界》是一款3D的第一人称沙盘游戏&#xff0c;所呈现的世界并不是华丽的画面与特效&#xff0c;而是注重在游戏性上面。玩家在游戏中做着建设与破坏两件事&#xff0c;但是透过像乐高一样的积木来组合与拼凑&#xff0c;轻而易举的就能制作出小木屋、城堡甚至城市&#…

idea创建springcloud主工程和springboot子项目

创建主工程&#xff0c;选择file-new-project&#xff0c;选择maven,直接next 填写GroupId包名,ArtifactId项目名&#xff0c;next-finish 创建子项目springboot&#xff0c;项目右击-new-module-Spring Initializr-->next 填写项目相关信息&#xff0c;next 选择Clou…

小程序实现无限瀑布流

实现瀑布流 实现效果 有好几种方案 1.用column-count属性把页面元素分为俩列或多列来实现 2.用display flex 分列来展示页面 3.比如说用js实现 我今天介绍的就是第三种&#xff0c;因为前两种都会有局限&#xff0c;实现的效果我们希望是左右左右&#xff0c;而不是分成两列去显…

python canny检测_【数字图像分析】基于Python实现 Canny Edge Detection(Canny 边缘检测算法)...

Canny 边缘检测算法Steps:高斯滤波平滑计算梯度大小和方向非极大值抑制双阈值检测和连接代码结构&#xff1a;Canny Edge Detection|Gaussian_Smoothing||convolution.py|||convolution()||gaussion_smoothing.py|||dnorm()|||gaussian_kernel()|||gaussian_blur()|Sobel_Filte…

java 拖放文字_myeclipse2014如何实现jsp中的html代码的文字拖放

本帖最后由 liyihongcug 于 2015-3-5 16:53 编辑把 jsp打开 (visual jsp editor)之后上班区 单击右键 show --- pallette就可以了感叹myeclipse确实强大的 标签技术强于.net mvc强。vs2013能实现iis无需安装的情况下 动态指定 某个页面为首选 启动 --------------------希望2…

因缺思厅的绕过

看一下页面源码&#xff0c;看到source.txt。所以进入同目录下的source.txt 代码审计下&#xff0c;并且百度了一些函数。过滤了很多关键字&#xff0c;因此常规的SQL注入没有头绪。想了挺久&#xff0c;因为要满足三个条件。1&#xff1a;不能输入过滤的关键字2&#xff1a;只…

Python自制微信机器人:群发消息、自动接收好友

运营公众号也有半年了&#xff0c;今年5月份开始的&#xff0c;之前一直用一款windows工具来运营自动接受好友请求、群发文章、自动回复等操作&#xff0c;但颇有不便。 举几个场景&#xff1a; 突然在外面看到一篇文章很好&#xff0c;临时写了一篇&#xff0c;想群发一下。好…

记一次webpack4+react+antd项目优化打包文件体积的过程

背景 最近自己整了一个基于webpack4和react开发的博客demo项目&#xff0c;一路整下来磕磕碰碰但也实现了功能&#xff0c;就准备发到阿里云上面去看看&#xff0c;借用了同事的阿里云小水管服务器&#xff0c;配置完成之后首页加载花了十几秒&#xff0c;打开控制台network查看…

[19/03/16-星期六] 常用类_Date时间类DateFormat类

一、Date时间类 计算机中 以1970 年 1 月 1 日 00:00:00定为基准时间&#xff0c;每个度量单位是毫秒(1秒的千分之一) 用ong类型的变量来表示时间&#xff0c;如当前时刻数值&#xff1a;long now new System.currentTimeMillis(); 【常用方法】 1. Date() 分配一个Date对象&a…

实验一作业

Part1&#xff1a;实验总结体会 1.实验过程对程序编码的使用不熟练&#xff0c;经常在书写代码过程中有停顿与疑惑&#xff0c;但熟能生巧&#xff0c;经过训练还是有不少收获&#xff1b; 2.实验内容不够严谨&#xff0c;容易犯小错误&#xff0c;还是需要勤加练习&#xff1b…