`

character_set_client character_set_connection character_set_results

 
阅读更多


之前一直纠结各种编码的却别:character_set_client character_set_connection character_set_results 还有数据库编码,表编码,字段编码

现在总结下:首先客户端发送query到服务器要通过character_set_client这个编码来编写query来发送到服务器,然后通过 character_set_connection这个编码来连接服务器。这个地方可能有些难理解,其实因为不同的编码对于校对是有区别的:举个极端的例子(只是举例使用):譬如对于gbk的编码1<2是正确的,但是对于utf8编码就是错误的(当然这是不正确的,只是举例), character_set_results这个的作用就是根据query查询数据库返回的数据的编码,可能数据库编码是gbk而results是utf8,那么数据库要将gbk的数据转化成utf8当然,可能转换可能会丢失那些不属于两种字符集的字符,数据库的编码作用就是存入数据库的数据的编码,当然前提是表和字段都是采取默认编码,如果表指定了编码那么就会采取表的编码,如果字段制定了编码,那么就会采用字段编码。

从上面可以看出character_set_results的返回结果与client与connection无绝对关系,这个结果主要受服务器返回的结果,然后根据结果的编码转换成character_set_results的编码

 

举例:

 

package com.service;

 

import java.math.BigDecimal;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Date;

 

public class MysqConnection {

private Connection conn = null;

//连接信息

public void getConnection() {

 try {

 //2005连接

  Class.forName("org.gjt.mm.mysql.Driver").newInstance();

  String URL = "jdbc:mysql://10.8.210.108:3306/test_character?useUnicode=true&amp;characterEncoding=utf8&amp;zeroDateTimeBehavior=convertToNull";

  String USER = "root"; // 根据你自己设置的数据库连接用户进行设置 

  String PASSWORD = "1q2w3e"; // 根据你自己设置的数据库连接密码进行设置 

  conn = DriverManager.getConnection(URL, USER, PASSWORD);

}catch(Exception e){

e.printStackTrace();

}

}

 

public String getData() throws SQLException {

 StringBuilder sb = new StringBuilder();

 if (conn == null)

  this.getConnection();

 try {

  String sql = "insert into test3 values('3','孙强','孙强')";

  Statement stmt = conn.createStatement();

   stmt.executeUpdate(sql);

  int flag = 0;

  

  ResultSet rs = stmt.executeQuery("SELECT * FROM test1") ;   

  while (rs.next()) {

  //组装

//   if(flag == 0){

//   sb = new StringBuilder("insert into crm_base_data(contract_no, city,crm_code,goods_name,shop_price," +

//   "orign_price,supplier_id,supplier_name,payee_name,payee_account,payee_bank,payee_sub_bank,payee_province,payee_city," +

//   "payee_email,payee_mobile,jiesuan_type,operation_fee,55_foregift,logistics_foregift,service_fee,secure_funds,is_has_operation_fee,is_pre_collect_operation_fee" +

//   ")values");

//   }

//   sb = sb.append("(").append(isNullString(rs.getString("contract_no"))).append(",").append(isNullString(rs.getString("city"))).append(",").append(isNullString(rs.getString("crm_code"))).append(",").append(isNullString(rs.getString("goods_name"))).

//   append(",").append(isNullDecimal(rs.getString("shop_price"))).append(",").append(isNullDecimal(rs.getString("orign_price"))).append(",").append(isNullString(rs.getString("supplier_id"))).

//   append(",").append(isNullString(rs.getString("supplier_name"))).append(",").append(isNullString(rs.getString("payee_name"))).append(",").append(isNullString(rs.getString("payee_account"))).

//   append(",").append(isNullString(rs.getString("payee_bank"))).append(",").append(isNullString(rs.getString("payee_sub_bank"))).append(",").append(isNullString(rs.getString("payee_province"))).

//   append(",").append(isNullString(rs.getString("payee_city"))).append(",").append(isNullString(rs.getString("payee_email"))).append(",").append(isNullString(rs.getString("payee_mobile"))).

//   append(",").append((rs.getString("jiesuan_type")==null||rs.getString("jiesuan_type").length()<1)?"1":rs.getString("jiesuan_type")).append(",").append(isNullDecimal(rs.getString("operation_fee"))).append(",").

//   append(isNullDecimal(rs.getString("55_foregift"))).append(",").append(isNullDecimal(rs.getString("logistics_foregift"))).append(",").append(isNullDecimal(rs.getString("service_fee"))).append(",").

//   append(isNullDecimal(rs.getString("secure_funds"))).append(",").append((rs.getString("is_has_operation_fee")==null||rs.getString("is_has_operation_fee").length()<1)?"1":rs.getString("is_has_operation_fee")).append(",").

//   append((rs.getString("is_pre_collect_operation_fee")==null||rs.getString("is_pre_collect_operation_fee").length()<1)?"1":rs.getString("is_pre_collect_operation_fee")).append("),");

  sb = sb.append(rs.getString("cityId")).append(rs.getString("CityName")).append(rs.getString("CityType"));

  }

  System.out.println(sb.toString());

  rs.close();

  stmt.close();

 } 

 finally {

  if (conn != null)

   try {

    conn.close();

   } catch (SQLException e) {

   }

 }

 if(sb!=null&&sb.length()>0){

 //变成 insert into ...values(),(),...();

return  sb.substring(0, sb.length()-1)+";";

 }

 return null;

}

//字符串的如果为null或者或者空取值空字符串,否则是本身值

public String isNullString(String str){

if(str == null||str.length()<1){

return "''";

}

else

return "'"+str+"'";

}

//小数的如果为null或者空取值为0,否则是本身值

public BigDecimal isNullDecimal(String str){

if(str == null||str.length()<1){

return new BigDecimal(0);

}else{

return new BigDecimal(str);

}

}

//小数的如果为null或者空取值为0,否则是本身值

public Integer isNullInteger(String str){

if(str == null||str.length()<1){

return new Integer(0);

}else{

return Integer.valueOf(str);

}

}

public long getTimeStampNow(){

Date date = new Date();

return date.getTime();

}

public static void main(String[] args) {

MysqConnection bean = new MysqConnection();

try {

bean.getData();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

// StringBuilder sb = new StringBuilder("hello");

// System.out.println(sb.subSequence(0, sb.length()-1)+";");

// System.out.println(new BigDecimal("0.21"));

}

}

利用jdbc连接数据库gbk连接
表:CREATE TABLE `test3` (
  `cityId` varchar(255) NOT NULL DEFAULT '',
  `CityName` varchar(255) CHARACTER SET gbk DEFAULT NULL ,
  `CityType` varchar(255)CHARACTER SET utf8  DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk ;
插入之后再命令行运行

分享到:
评论

相关推荐

    关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况

    mysql链接建立之后,通过如下方式设置编码: 复制代码 代码如下: mysql_query(“SET character_set_connection=” . $GLOBALS[‘charset’] . “,character_set_results=” . $GLOBALS[‘charset’] . “,character_...

    sqlyog 中文乱码问题的设置方法

    1.在SQLyog下输入下面代码,全部执行 SET character_set_client = utf8; SET character_set_results = gb2312; SET character_set_connection = utf8; 如果上边的不行,还可以改成Gbk。总以根据你的数据的文字编码...

    mysql乱码问题解决

    'character_set_client', 'utf8' 'character_set_connection', 'utf8' 'character_set_database', 'latin1' 'character_set_filesystem', 'binary' 'character_set_results', 'utf8' 'character_set_server', 'latin...

    mysql中文乱码问题

    这将显示 MySQL 服务器的各种编码方式,包括 character_set_client、character_set_connection、character_set_database、character_set_filesystem、character_set_results 和 character_set_server 等。...

    MySQL编码与中文显示

    这将显示数据库的编码方式信息,包括 character_set_client、character_set_connection、character_set_database、character_set_results、character_set_server 等。 character_set_client character_set_client ...

    教程:修改mysql字符编码成为UTF8.docx

    这将显示 MySQL 数据库的所有字符编码信息,包括 character_set_client、character_set_connection、character_set_database 等等。 使用 SET 命令修改字符编码 除了修改 my.ini 文件外,我们也可以使用 SET 命令...

    基于php+MySQL设计的毕业生课程设计管理系统(源码+数据库).zip

    40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!...

    mysql字符集1

    `set names`命令是一个便捷的工具,用于同时设置`character_set_client`、`character_set_results`和`character_set_connection`这三个变量的会话级别字符集。 在C#的MySQL Connector中,字符集的确定和配置如下: ...

    MySQL skip-character-set-client-handshake导致的一个字符集问题

    代码如下:character_set_client、 character_set_connection、character_set_results 就始终都是和服务器端保持一致了,即便在mysql客户端加上选项 代码如下:–default-character-set=utf8 也不行,除非连接进去后...

    MySQL字符集乱码及解决方案分享

    这是因为`names`指令同时设置了`character_set_client`、`character_set_connection`和`character_set_results`,这三个字符集需要与数据实际存储的字符集匹配,才能正确显示数据。 解决MySQL乱码问题的基本策略是...

    mysql数据库乱码解决

    这包括`character_set_client`、`character_set_connection`、`character_set_database`、`character_set_results`、`character_set_server`和`character_set_system`等关键变量。 #### 3. **临时调整字符集** ...

    mysql乱码的解决方法

    SET character_set_connection = utf8; SET character_set_database = utf8; SET character_set_results = utf8; SET character_set_server = utf8; SET character_set_system = utf8; SET collation_connection = ...

    mysql字符集和校对集

    例如,当客户端发送数据时,首先会通过`character_set_client`进行编码,然后由服务器根据`character_set_connection`进行解码并执行查询。最后,查询结果再通过`character_set_results`进行编码后返回给客户端。 #...

    mysql查看编码类型[文].pdf

    这个命令会列出所有与字符集相关的系统变量,包括`character_set_client`、`character_set_connection`、`character_set_database`等。这些变量分别表示客户端发送的数据编码、连接的字符集、数据库的默认字符集等。...

    MySQL 编码机制

    character_set_connection ,MySQL接受到用户查询后,按照character_set_client将其转化为character_set_connection设定的字符集。 character_set_results , MySQL将存储的数据转换成character_set_results中设定...

    7_MYSQL视频教程 字符集操作原理与乱码解决方案

    7_MYSQL视频教程 字符集操作原理与乱码解决方案character_set_client_character_set_connection_character_set_results

    设置mysql字符集

    mysql&gt; SET character_set_connection = utf8mb4; mysql&gt; SET character_set_database = utf8mb4; mysql&gt; SET character_set_results = utf8mb4; mysql&gt; SET character_set_server = utf8mb4; mysql&gt; SET collation_...

    Ubuntu中配置Mysql编码方法.docx

    `character_set_client`、`character_set_connection`和`character_set_results`确认了客户端连接和结果返回的字符集,而`character_set_database`和`character_set_server`则表明数据库和服务器级别的字符集也是UTF...

Global site tag (gtag.js) - Google Analytics