`
iihero
  • 浏览: 258093 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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代码显示字符集变量及测试字符集的显示
因为只是作测试用,所以没加修饰。测试时,只需要按照上述三个方法修改字符集即可。

importjava.sql.*;

/***//**
*<p>Title:</p>
*
*<p>Description:</p>
*
*<p>Copyright:Copyright(c)2006</p>
*
*<p>Company:</p>
*
*
@authornotattributable
*
@version1.0
*/

publicclassTestCharset...{
Stringusername
="root";
Stringpasswd
="";
Connectionconn
=null;
Stringcharset
=null;
publicTestCharset()...{
}


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


publicvoidgetCharset()throwsSQLException...{
Statementstmt
=conn.createStatement();
System.out.println(
"=======showvariableslike'chara%'========");
ResultSetrset
=stmt.executeQuery("showvariableslike'chara%'");
while(rset.next())...{
System.out.println(rset.getString(
1)+"------>"+rset.getString(2));
}

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

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


publicvoidtestGetValuesISO8859_1()throwsException...{
Statementstmt
=conn.createStatement();
try...{
stmt.executeUpdate(
"droptablet12345");
}
catch(Exceptione)...{

}

stmt.executeUpdate(
"createtablet12345(idintprimarykey,namevarchar(32))");
Stringsz
=newString("中文".getBytes("gbk"),"ISO8859_1");
stmt.executeUpdate(
"insertintot12345values(1,'"+sz+"')");
ResultSetrset
=stmt.executeQuery("select*fromt12345");
rset.next();
System.out.println(
"测试中文值:"+newString(rset.getString(2).getBytes("ISO8859_1"),"GBK"));
rset.close();

stmt.close();
}

publicvoidtestGetValuesGBK()throwsException...{
Statementstmt
=conn.createStatement();
try...{
stmt.executeUpdate(
"droptablet12345");
}
catch(Exceptione)...{

}

stmt.executeUpdate(
"createtablet12345(idintprimarykey,namevarchar(32))");
stmt.executeUpdate(
"insertintot12345values(1,'中文')");
ResultSetrset
=stmt.executeQuery("select*fromt12345");
rset.next();
System.out.println(
"测试中文值:"+rset.getString(2));
rset.close();

stmt.close();
}

publicvoidtestGetValuesUTF8()throwsException...{
Statementstmt
=conn.createStatement();
try...{
stmt.executeUpdate(
"droptablet12345");
}
catch(Exceptione)...{

}

stmt.executeUpdate(
"createtablet12345(idintprimarykey,namevarchar(32))");
//Stringsz=newString("中文".getBytes("gbk"),"UTF8");
stmt.executeUpdate("insertintot12345values(1,'中文')");
ResultSetrset
=stmt.executeQuery("select*fromt12345");
rset.next();
System.out.println(
"测试中文值:"+rset.getString(2));
rset.close();

stmt.close();
}

publicvoiddisconnect()throwsSQLException...{
if(conn!=null)conn.close();
}

publicstaticvoidmain(String[]args)...{
TestCharsett
=newTestCharset();
try...{
t.connect();
t.getCharset();
if(t.charset.equals("ISO8859_1"))
t.testGetValuesISO8859_1();
elseif(t.charset.equals("GBK"))
t.testGetValuesGBK();
elseif(t.charset.equals("UTF-8"))
t.testGetValuesUTF8();
}
catch(Exceptione)...{
//System.out.println(e.getMessage());
e.printStackTrace();
}
finally...{
try...{
t.disconnect();
}
catch(Exceptione2)...{
}

}

}

}


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

分享到:
评论

相关推荐

    MYSQL修改字符集默认问题

    在深入探讨修改字符集的方法之前,我们首先需要了解MySQL中的字符集概念。字符集是指一系列字符及其编码方式的集合。在MySQL中,常用的字符集有`latin1`、`utf8`等。其中: - **`latin1`**:支持西欧语言,占用一个...

    设置mysql字符集

    在IT领域,尤其是在数据库管理与应用中,字符集的设置...通过上述方法,可以有效避免和解决由字符集配置不当导致的乱码问题,确保MySQL中的数据能够被正确地存储、检索和展示,从而提高数据库系统的稳定性和用户体验。

    mysql字符集转换

    在开始详细介绍之前,我们先来了解下MySQL中字符集的基本概念。字符集(Character Set)是指一组字符及其编码方式的集合。在MySQL中,主要涉及以下几种常见的字符集: - **Latin1 (latin1)**:ISO/IEC 8859-1标准,...

    mysql字符集查看以及修改

    MySQL 字符集是 MySQL 数据库中最重要的配置之一,它影响着数据库的字符存储和比较方式。本文将介绍如何查看和修改 MySQL 字符集。 查看 MySQL 字符集 要查看 MySQL 字符集,可以使用 MySQL 命令行工具。在 MySQL ...

    精通MySQL字符集与校对集

    总结来说,掌握MySQL中的字符集和校对集设置对于避免乱码和数据丢失等问题至关重要。正确配置字符集不仅可以提高数据的一致性,还可以确保数据的完整性和准确性。在实际应用中,应根据具体需求选择合适的字符集和...

    关于MySQL字符集查看与修改

    使用下面的命令来查看MySQL中与字符集相关的变量设置: ```sql mysql&gt; SHOW VARIABLES LIKE 'character_set_%'; ``` 这个命令会显示所有以`character_set_`开头的变量,包括但不限于: - `character_set_client`:...

    MYSQL字符集乱码的解决

    ### MySQL字符集乱码问题及解决方案 #### 一、问题背景 在使用MySQL数据库时,很多用户会遇到中文字符显示为乱码的情况。这通常是因为MySQL数据库中的字符集设置不一致导致的。例如,在命令行下操作MySQL时,可能会...

    mysql字符集和校对集

    总结来说,合理设置MySQL中的字符集和校对集不仅可以提高数据处理的准确性,还能确保数据在不同语言环境下的正确性。开发者应当根据实际需求选择合适的字符集和校对集,并在各个层级上进行合理的配置,以避免因字符...

    mysql 字符集 乱码问题

    通过对MySQL中的字符集配置进行合理的调整,可以有效地解决由于字符集不匹配导致的数据乱码问题。需要注意的是,在实际操作中应根据具体的场景选择合适的解决方案,并确保所有相关配置的一致性,以保证数据的正确性...

    mysql字符集设置

    以下将详细讲解MySQL字符集的概念、设置方法以及在实际应用中可能出现的问题和解决方案。 1. **字符集概念**: - **字符集(Character Set)**:是一系列字符的集合,例如ASCII、GBK、UTF-8等,定义了字符的编码...

    linux修改mysql字符集

    在 Linux 系统中,MySQL 的字符集默认为 latin1,然而在某些情况下,我们需要修改 MySQL 的字符集以确保某些迁移的程序可以正常显示。在本文中,我们将介绍如何在 Linux 下修改 MySQL 的字符集。 首先,我们需要...

    设定mysql字符集解决终端乱码

    假设我们有一个使用 GBK 字符集的客户端,并且想要向一个使用 UTF-8 字符集的表中插入数据。这时,我们需要先将客户端的字符集设置为 UTF-8: ```sql SET NAMES utf8; INSERT INTO t1 VALUES ('示例数据'); ``` ...

    mysql数据库互相转换及同步工具-MySQL_MySQL字符集互转

    2. **MySQL字符集转换**:在MySQL中,可以使用ALTER TABLE语句来更改表的字符集,或者在创建数据库、表或列时指定字符集。对于整个数据库的转换,需要备份现有数据,然后重建数据库并导入数据。过程中要特别注意数据...

    Mysql字符集设置原理及常见问题解决

    在MySQL中,字符集主要分为全局字符集、数据库字符集、表字符集和字段字符集四级。全局字符集是服务器级别的设置,影响所有数据库;数据库字符集在创建数据库时指定,适用于该数据库的所有表;表字符集用于单个表,...

    linux下设置mysql字符集为UTF-8以及mysql重启.docx

    总结一下,设置Linux下MySQL字符集为UTF-8主要包含以下几个步骤: 1. 找到`my.cnf`配置文件。 2. 在`[mysqld]`段落下添加UTF-8相关配置。 3. 保存并关闭配置文件。 4. 重启MySQL服务,使配置生效。 通过这些操作,...

    Mysql字符集

    本文将深入探讨MySQL字符集的基础概念、设置方法以及如何在实际操作中进行字符集的转换。 #### 一、理解MySQL字符集与校对规则 **1. 字符集(Character Set)**:字符集是数据库用来存储和处理文本数据的一组字符...

    MySQL字符集

    在MySQL中,字符集主要分为两个层次:服务器级和数据库级。服务器级字符集是整个MySQL实例的默认字符集,而数据库级字符集则为特定数据库设置。此外,表和列也可以有自己的字符集设置,这允许对不同数据进行定制化的...

    查看mysql字符集MySQL 乱码的根源是的 MySQL 字符

    查看mysql字符集MySQL 乱码的根源是的 MySQL 字符

    字符集相关学习探讨(字符集相关定义以及MySQL中字符集分析)

    ### 字符集相关学习探讨(字符集相关定义以及MySQL中字符集分析) #### 一、字符集基础概念 1. **字节(Byte)**: 计算机存储的基本单位,一个字节等于8位(bit)。在计算机科学中,用于衡量数据存储量的大小。 2. **...

Global site tag (gtag.js) - Google Analytics