- 浏览: 246081 次
-
文章分类
最新评论
之前一直纠结各种编码的却别: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&characterEncoding=utf8&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"));
}
}
- 例子.zip (87.1 KB)
- 下载次数: 0
发表评论
-
RAID write back write through
2014-07-09 13:44 960RAID write back指的是raid控制器能够将写 ... -
druid PreparedStatementCache设置
2014-07-08 14:34 3627druid的连接池配置中有PreparedStatement ... -
innodb 插入缓冲
2014-07-01 16:07 708插入缓冲是InnoDB存储引 ... -
Innodb配置,将数据与日志放在不同磁盘可以加快性能
2012-12-06 19:23 753An advanced my.cnf example ... -
amoeba-mysql的安装使用和读写分离(转)
2012-11-16 16:11 1044http://blog.csdn.net/chen861201 ... -
mysqlcheck myisamchk
2012-11-07 17:45 768mysqlcheck的功能类似myisamchk,但其工作不同 ... -
mysqlbinlog乱码
2012-11-06 19:49 5458使用mysqlbinlog查看二进制文件发现 /*!40019 ... -
auto-rehash
2012-11-05 19:20 4148mysql auto-rehash:读取表信息和列信 ... -
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
2012-09-19 20:21 781MySQL主从复制(Master-Slave)与读写分离(My ... -
mysql显示见表语句
2012-09-03 19:13 1191show create table mysql.slow_l ... -
mysql主从同步延迟问题
2012-08-30 14:18 865见http://www.ixpub.net/thread-13 ... -
二进制日志文件
2012-08-29 19:33 1162mysqld在每个二进制日志 ... -
备份恢复数据库
2012-08-28 20:18 838全备份 mysqldump -utest -ptest -- ... -
mysql用户修改密码
2012-08-28 19:37 774mysqladmin -utest -ptest passwo ... -
set session sql_log_bin=0
2012-08-21 15:22 4048引自http://blog.sina.com.cn/s/blo ... -
字符串转换成date
2012-08-15 20:00 934SELECT STR_TO_DATE('Tue 05 June ... -
selecting top N records per group
2012-08-15 18:56 925http://code.openark.org/blog/my ... -
MySQL DELAY_KEY_WRITE
2012-08-02 20:03 1145MySQL DELAY_KEY_WRITE 引自http:// ... -
Mysql Merge表的优点
2012-07-09 13:52 965在Mysql数据库中,Mysql Me ... -
MySQL线程共享内存参数
2012-07-03 16:48 898MySQL线程共享内存参数 引用 http://mxohy. ...
相关推荐
mysql链接建立之后,通过如下方式设置编码: 复制代码 代码如下: mysql_query(“SET character_set_connection=” . $GLOBALS[‘charset’] . “,character_set_results=” . $GLOBALS[‘charset’] . “,character_...
1.在SQLyog下输入下面代码,全部执行 SET character_set_client = utf8; SET character_set_results = gb2312; SET character_set_connection = utf8; 如果上边的不行,还可以改成Gbk。总以根据你的数据的文字编码...
'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 服务器的各种编码方式,包括 character_set_client、character_set_connection、character_set_database、character_set_filesystem、character_set_results 和 character_set_server 等。...
这将显示数据库的编码方式信息,包括 character_set_client、character_set_connection、character_set_database、character_set_results、character_set_server 等。 character_set_client character_set_client ...
这将显示 MySQL 数据库的所有字符编码信息,包括 character_set_client、character_set_connection、character_set_database 等等。 使用 SET 命令修改字符编码 除了修改 my.ini 文件外,我们也可以使用 SET 命令...
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 */; /*!...
`set names`命令是一个便捷的工具,用于同时设置`character_set_client`、`character_set_results`和`character_set_connection`这三个变量的会话级别字符集。 在C#的MySQL Connector中,字符集的确定和配置如下: ...
代码如下:character_set_client、 character_set_connection、character_set_results 就始终都是和服务器端保持一致了,即便在mysql客户端加上选项 代码如下:–default-character-set=utf8 也不行,除非连接进去后...
这是因为`names`指令同时设置了`character_set_client`、`character_set_connection`和`character_set_results`,这三个字符集需要与数据实际存储的字符集匹配,才能正确显示数据。 解决MySQL乱码问题的基本策略是...
这包括`character_set_client`、`character_set_connection`、`character_set_database`、`character_set_results`、`character_set_server`和`character_set_system`等关键变量。 #### 3. **临时调整字符集** ...
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 = ...
例如,当客户端发送数据时,首先会通过`character_set_client`进行编码,然后由服务器根据`character_set_connection`进行解码并执行查询。最后,查询结果再通过`character_set_results`进行编码后返回给客户端。 #...
这个命令会列出所有与字符集相关的系统变量,包括`character_set_client`、`character_set_connection`、`character_set_database`等。这些变量分别表示客户端发送的数据编码、连接的字符集、数据库的默认字符集等。...
character_set_connection ,MySQL接受到用户查询后,按照character_set_client将其转化为character_set_connection设定的字符集。 character_set_results , MySQL将存储的数据转换成character_set_results中设定...
7_MYSQL视频教程 字符集操作原理与乱码解决方案character_set_client_character_set_connection_character_set_results
mysql> SET character_set_connection = utf8mb4; mysql> SET character_set_database = utf8mb4; mysql> SET character_set_results = utf8mb4; mysql> SET character_set_server = utf8mb4; mysql> SET collation_...
`character_set_client`、`character_set_connection`和`character_set_results`确认了客户端连接和结果返回的字符集,而`character_set_database`和`character_set_server`则表明数据库和服务器级别的字符集也是UTF...