五.乱码的避免
最好让上述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中,常用的字符集有`latin1`、`utf8`等。其中: - **`latin1`**:支持西欧语言,占用一个...
在IT领域,尤其是在数据库管理与应用中,字符集的设置...通过上述方法,可以有效避免和解决由字符集配置不当导致的乱码问题,确保MySQL中的数据能够被正确地存储、检索和展示,从而提高数据库系统的稳定性和用户体验。
在开始详细介绍之前,我们先来了解下MySQL中字符集的基本概念。字符集(Character Set)是指一组字符及其编码方式的集合。在MySQL中,主要涉及以下几种常见的字符集: - **Latin1 (latin1)**:ISO/IEC 8859-1标准,...
MySQL 字符集是 MySQL 数据库中最重要的配置之一,它影响着数据库的字符存储和比较方式。本文将介绍如何查看和修改 MySQL 字符集。 查看 MySQL 字符集 要查看 MySQL 字符集,可以使用 MySQL 命令行工具。在 MySQL ...
总结来说,掌握MySQL中的字符集和校对集设置对于避免乱码和数据丢失等问题至关重要。正确配置字符集不仅可以提高数据的一致性,还可以确保数据的完整性和准确性。在实际应用中,应根据具体需求选择合适的字符集和...
使用下面的命令来查看MySQL中与字符集相关的变量设置: ```sql mysql> SHOW VARIABLES LIKE 'character_set_%'; ``` 这个命令会显示所有以`character_set_`开头的变量,包括但不限于: - `character_set_client`:...
### MySQL字符集乱码问题及解决方案 #### 一、问题背景 在使用MySQL数据库时,很多用户会遇到中文字符显示为乱码的情况。这通常是因为MySQL数据库中的字符集设置不一致导致的。例如,在命令行下操作MySQL时,可能会...
总结来说,合理设置MySQL中的字符集和校对集不仅可以提高数据处理的准确性,还能确保数据在不同语言环境下的正确性。开发者应当根据实际需求选择合适的字符集和校对集,并在各个层级上进行合理的配置,以避免因字符...
通过对MySQL中的字符集配置进行合理的调整,可以有效地解决由于字符集不匹配导致的数据乱码问题。需要注意的是,在实际操作中应根据具体的场景选择合适的解决方案,并确保所有相关配置的一致性,以保证数据的正确性...
以下将详细讲解MySQL字符集的概念、设置方法以及在实际应用中可能出现的问题和解决方案。 1. **字符集概念**: - **字符集(Character Set)**:是一系列字符的集合,例如ASCII、GBK、UTF-8等,定义了字符的编码...
在 Linux 系统中,MySQL 的字符集默认为 latin1,然而在某些情况下,我们需要修改 MySQL 的字符集以确保某些迁移的程序可以正常显示。在本文中,我们将介绍如何在 Linux 下修改 MySQL 的字符集。 首先,我们需要...
假设我们有一个使用 GBK 字符集的客户端,并且想要向一个使用 UTF-8 字符集的表中插入数据。这时,我们需要先将客户端的字符集设置为 UTF-8: ```sql SET NAMES utf8; INSERT INTO t1 VALUES ('示例数据'); ``` ...
2. **MySQL字符集转换**:在MySQL中,可以使用ALTER TABLE语句来更改表的字符集,或者在创建数据库、表或列时指定字符集。对于整个数据库的转换,需要备份现有数据,然后重建数据库并导入数据。过程中要特别注意数据...
在MySQL中,字符集主要分为全局字符集、数据库字符集、表字符集和字段字符集四级。全局字符集是服务器级别的设置,影响所有数据库;数据库字符集在创建数据库时指定,适用于该数据库的所有表;表字符集用于单个表,...
总结一下,设置Linux下MySQL字符集为UTF-8主要包含以下几个步骤: 1. 找到`my.cnf`配置文件。 2. 在`[mysqld]`段落下添加UTF-8相关配置。 3. 保存并关闭配置文件。 4. 重启MySQL服务,使配置生效。 通过这些操作,...
本文将深入探讨MySQL字符集的基础概念、设置方法以及如何在实际操作中进行字符集的转换。 #### 一、理解MySQL字符集与校对规则 **1. 字符集(Character Set)**:字符集是数据库用来存储和处理文本数据的一组字符...
在MySQL中,字符集主要分为两个层次:服务器级和数据库级。服务器级字符集是整个MySQL实例的默认字符集,而数据库级字符集则为特定数据库设置。此外,表和列也可以有自己的字符集设置,这允许对不同数据进行定制化的...
查看mysql字符集MySQL 乱码的根源是的 MySQL 字符
### 字符集相关学习探讨(字符集相关定义以及MySQL中字符集分析) #### 一、字符集基础概念 1. **字节(Byte)**: 计算机存储的基本单位,一个字节等于8位(bit)。在计算机科学中,用于衡量数据存储量的大小。 2. **...