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

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

阅读更多

如若转载,请注明出处,谢谢。
一、显示字符集相关的变量值
mysql> show variables like 'chara%';
+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | d:\mysql-5.0.9-beta-win32\share\charsets/ |
+--------------------------+-------------------------------------------+
7 rows in set (0.02 sec)

mysql> show variables like 'collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

需要说明的是: collation是与排序相关的字符集变量, 上述变量值是mysql中缺省的字符集变量。

二、字符集相关各变量的意义
character_set_client: 客户端字符集(应用程序客户端使用的字符集),实际上它与当前会话相关。
character_set_connection: 连接字符集,指的是mysql网络传输中使用的字符集,也与会话相关。
character_set_database: 指的数据库表中物理存储使用的字符集。
character_set_results: 指的是使用sql查询处理以后返回结果使用的字符集。
character_set_server:指的是mysql数据库服务器端使用的字符集。
character_set_system:指的是数据库中存储元信息使用的字符集。

collation_connection:意义可以类推

三、字符集的修改
我们可以对单个变量进行修改,如
set character_set_client=gbk
也可以使用set names 来同时修改几个变量, 如
set names 'gbk' 可一下子全部修改字符集
等价于:
SET character_set_client = x;
SET character_set_results = x;
SET character_set_connection = x;

值得注意的是:collation_connection变量缺省下与character_set_connection是相关联的,即
collation_connection取决于character_set_connection的值。
如:
mysql> set names 'gbk';
Query OK, 0 rows affected (0.08 sec)

mysql> show variables like 'chara%';
+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | latin1 |
| character_set_results | gbk |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | d:\mysql-5.0.9-beta-win32\share\charsets/ |
+--------------------------+-------------------------------------------+
7 rows in set (0.00 sec)

mysql> show variables like 'collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | gbk_chinese_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)
我们可以看到 set names 'gbk'改变了character_set_client, character_set_connection, character_set_results, collation_connection的值.
如果要单独指定collation_name,可以使用
SET NAMES 'charset_name' COLLATE 'collation_name'

另一种修改多个变量的命令是:
SET CHARACTER SET x 等价于:
SET character_set_client = x;
SET character_set_results = x;
SET collation_connection = @@collation_database;
你可以自己体验一下该命令带来的字符集变量值的变动。

那么character_set_server, character_set_database的值怎么修改呢?直接在命令行里修改是不起作用的。
最好的方式是在配置文件my.ini中直接修改,在[mysqld]项下边添加:
default_character_set=GBK
当然,你如果想尝试,使用mysqld-nt --default_character_set=GBK来启动数据库也未尝不可,但我并不推荐这么做。

my.ini文件的搜索顺序是:
在版本4.1.5之前,必须在c:\my.cnf or c:\Windows\my.in下边,这个有待检验。
在后续版本里,my.ini缺省就在mysql的安装目录下边。

强调一点:
mysql --default-character-set=gbk -u root

mysql --defaults-file=c:\my.ini -u root
在my.ini中添加如下内容
[mysql] or [client]
default-character-set=gbk

mysql -u root
再执行set names 'gbk'
这三者效果完全一样。

四.乱码的产生
乱码的产生主要是由于字符集变量设置的不一致造成的。
操作系统有一个在显示字符时要使用的locale变量,linux下使用locale命令可以看到。
windows下使用chcp可以看到,gbk对应的code page应该是936。
如果操作系统安装了当前字符集与目标字符集的转换表,则能正确显示目标字符集中的字符,否则就会出现乱码。
latin1对应的是iso8859_1字符集,默认情况下,可以与gbk相互转换,至少在操作系统一级是这样。

分享到:
评论

相关推荐

    MYSQL修改字符集默认问题

    在MySQL数据库管理与维护的过程中,修改字符集是一个常见的需求,特别是在需要处理多语言或特定编码格式的情况下。本文将详细介绍如何解决“MySQL修改字符集默认问题”,包括修改步骤、注意事项以及可能遇到的问题...

    设置mysql字符集

    MySQL作为全球广泛使用的开源关系型数据库管理系统之一,其字符集的设置直接影响到数据的编码方式,进而影响到数据的正确性与国际化支持。本文将深入探讨如何设置MySQL的字符集,以及解决因字符集配置不当导致的乱码...

    精通MySQL字符集与校对集

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

    mysql字符集转换

    本文将围绕“MySQL字符集转换”这一主题展开讨论,通过对给定文件中的标题、描述、标签以及部分内容进行分析,旨在深入讲解MySQL字符集转换的相关知识点。 #### 二、MySQL字符集概述 在开始详细介绍之前,我们先来...

    关于MySQL字符集查看与修改

    **临时修改**:可以在MySQL命令行中使用以下命令临时修改服务器级别的字符集: ```sql mysql> SET GLOBAL character_set_server = 'utf8'; ``` **永久修改**:需要编辑MySQL配置文件,通常位于`/etc/mysql/my.cnf`...

    MYSQL字符集乱码的解决

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

    mysql字符集设置

    MySQL字符集设置是数据库管理中的一个重要环节,尤其是在处理多语言数据或者有特殊字符需求的应用中。字符集决定了数据库、表以及字段如何存储和显示字符,影响到数据的正确性及兼容性。以下将详细讲解MySQL字符集的...

    mysql字符集和校对集

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

    mysql 字符集 乱码问题

    在MySQL数据库管理中,字符集的配置与使用是十分重要的环节之一,尤其在处理多语言环境的数据时更是如此。如果字符集配置不当,很容易导致数据插入、查询过程中出现乱码问题。本文将根据提供的文件信息,详细解释...

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

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

    Mysql字符集编码详解

    Mysql数据库中的字符集编码问题是许多开发者经常遇到的一个问题,特别是在JAVA项目中。解决这个问题需要从多方面入手,包括服务器、数据库、数据表和连接等四个层次。这篇文章将详细介绍如何解决Mysql数据库乱码问题...

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

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

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

    MySQL字符集设置原理及其常见问题解决是数据库管理中不可或缺的一部分,尤其对于处理多语言或特殊字符的数据时,正确的字符集配置至关重要。字符集定义了数据库、表和字段能存储的字符范围,它决定了数据的编码和...

    MySQL字符集

    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中字符集分析) #### 一、字符集基础概念 1. **字节(Byte)**: 计算机存储的基本单位,一个字节等于8位(bit)。在计算机科学中,用于衡量数据存储量的大小。 2. **...

Global site tag (gtag.js) - Google Analytics