大家都知道
SET NAMES x
相当于
SET character_set_client = x;
SET character_set_results = x;
SET character_set_connection = x;
是用来设置客户端的字符集的,与服务器端的字符集无关,应该说msyql服务器端存储的字符是一定的。
因此在只要保持set names x 与页面的编码一致 ,无论什么编码都可以正确显示.
以下从MySQL5.0官方文档上摘录了相关内容,并翻译,说明了相关系统变量的用处:
What character set is the statement in when it leaves the client?
statement离开客户端的时候是什么字符集?
The server takes the character_set_client system variable to be the character set in which statements are sent by the client.
客户端送过来的statement,服务器认为它的字符集是系统变量character_set_client的值。
What character set should the server translate a statement to after receiving it?
服务器收到一个statement后,会把它转换成什么字符集?
For this, the server uses the character_set_connection and collation_connection system variables. It converts statements sent by the client from character_set_client to character_set_connection (except for string literals that have an introducer such as _latin1 or _utf8). collation_connection is important for comparisons of literal strings. For comparisons of strings with column values, collation_connection does not matter because columns have their own collation, which has a higher collation precedence.
为了这一用途,服务器使用系统变量character_set_connection和collation_connection。它把客户端传来的 statement,从character_set_client字符集转换成character_set_connection字符集(除非字符串中有类似_latin1或者_utf8的字符集声明)。collation_connection对于字符串的比较是非常重要的。对于字符类型的字段值的比较,collation_connection是不起作用的。因为字段有自己的collation,有更高的优先级。
What character set should the server translate to before shipping result sets or error messages back to the client?
在结果集由服务器传递给客户端之前,需要转换成什么字符集?
The character_set_results system variable indicates the character set in which the server returns query results to the client. This includes result data such as column values, and result metadata such as column names.
character_set_results系统变量表明了服务器返回查询结果时使用的字符集。返回的数据,有比如字段的值和元数据(例如字段名)。
If you are using the mysql client with auto-reconnect enabled (which is not recommended), it is preferable to use the charset command rather than SET NAMES. For example:
如果你使用mysql客户端的自动重连(不推荐使用),最好用charset命令,而不是SET NAMES。例如:
mysql> charset utf8
Charset changed
The charset command issues a SET NAMES statement, and also changes the default character set that is used if mysql reconnects after the connection has dropped.
charset命令发出了一个SET NAMES语句,并且连接断开后自动重连时使用的缺省字符集也被修改了。
The database character set and collation are used as default values if the table character set and collation are not specified in CREATE TABLE statements. They have no other purpose.
如果CREATE TABLE中没有明确指出字符集和collation,那么database字符集和collation将做为缺省值,它们没有其他的用处。
The character set and collation for the default database can be determined from the values of the character_set_database and collation_database system variables. The server sets these variables whenever the default database changes. If there is no default database, the variables have the same value as the corresponding server-level system variables, character_set_server and collation_server.
缺省database的字符集和collation可以通过系统变量character_set_database和 collation_database查看。服务器当缺省database改变时设置这些变量的值。如果没有缺省的database,这些变量的将与对应的服务器级的系统变量-character_set_server和collation_server的值相同。
The table character set and collation are used as default values if the column character set and collation are not specified in individual column definitions. The table character set and collation are MySQL extensions; there are no such things in standard SQL.
表的字符集和collation会作为缺省值,如果列的定义中没有指明字符集和collation的话。
Every “character” column (that is, a column of type CHAR, VARCHAR, or TEXT) has a column character set and a column collation.
每个“字符”字段(即CHAR、VARCHAR或者TEXT类型的字段)都有一个字段字符集和字段校验(collation)。
Every character string literal has a character set and a collation.
每个字符串有一个字符集和一个较验。
A character string literal may have an optional character set introducer and COLLATE clause:
每个字符串有一个可选的字符集introducer和COLLATE子句:
[_charset_name]’string’ [COLLATE collation_name]
Examples:
SELECT ’string’;
SELECT _latin1’string’;
SELECT _latin1’string’ COLLATE latin1_danish_ci;
分享到:
相关推荐
本文将详细介绍如何解决“MySQL修改字符集默认问题”,包括修改步骤、注意事项以及可能遇到的问题及其解决方案。 ### 一、理解MySQL字符集 在深入探讨修改字符集的方法之前,我们首先需要了解MySQL中的字符集概念...
### 设定 MySQL 字符集解决终端乱码 在处理数据库操作时,经常遇到的一个问题是字符集编码不一致导致的数据乱码问题。对于 MySQL 数据库来说,合理设置字符集可以有效避免此类问题的发生。本文将详细介绍如何通过...
本文将深入探讨如何设置MySQL的字符集,以及解决因字符集配置不当导致的乱码问题。 ### MySQL字符集的基本概念 字符集(Character Set)定义了数据在存储和处理时所采用的编码标准,而校对集(Collation)则规定了...
本篇文章将深入探讨MySQL中的字符集和校对集的基本概念、配置方法以及常见问题解决方案。 #### MySQL字符集概述 MySQL中的字符集是指用于存储和处理文本数据的一组符号和编码方式。不同的字符集支持不同的语言和...
3. **修改my.cnf配置文件**:编辑MySQL服务端的配置文件`my.cnf`,在`[mysqld]`或`[mysql]`节下添加`init-connect='SET NAMES utf8'`,这样每次启动MySQL服务时都会自动设置字符集为UTF-8。 - 示例配置: ``` ...
Mysql字符集编码详解 Mysql数据库中的字符集编码问题是许多开发者经常遇到的一个问题,特别是在JAVA项目中。解决这个问题需要从多方面入手,包括服务器、数据库、数据表和连接等四个层次。这篇文章将详细介绍如何...
Linux 修改 MySQL 字符集 在 Linux 系统中,MySQL 的字符集默认为 latin1,然而在某些情况下,我们需要修改 MySQL 的字符集以确保某些迁移的程序可以正常显示。在本文中,我们将介绍如何在 Linux 下修改 MySQL 的...
3. **修改字符集**:在数据导出文件中,将`SET NAMES gbk`等语句修改为目标字符集,如`SET NAMES utf8`。 4. **创建新数据库**:使用新字符集创建数据库。 5. **导入表结构和数据**:先导入修改后的表结构,再导入...
在MySQL中,字符集(Character Set)是指一个字符集合以及如何将这些字符编码为数字值,而排序规则(Collation)则是一组用于比较字符的规则。解决MySQL中文乱码问题的关键在于正确设置和使用字符集与排序规则。 - ...
`set names`命令是一个便捷的工具,用于同时设置`character_set_client`、`character_set_results`和`character_set_connection`这三个变量的会话级别字符集。 在C#的MySQL Connector中,字符集的确定和配置如下: ...
在这种情况下,可以在导入前使用`SET NAMES`指令来设置字符集,如`SET NAMES GBK`或`SET NAMES UTF8`。 2. **PHP连接MySQL时的字符集设置** 在使用PHP连接MySQL时,通过`mysql_connect`建立连接后,应立即执行`SET...
`mysql_set_character_set` 的关键在于,它不仅执行了`SET NAMES` SQL命令(对于MySQL 4.1及以上版本),还处理了字符集目录(`charset_dir`),以确保能找到相应的字符集定义。对于旧版本的MySQL服务器,如果版本低于...
解决这个问题需要理解字符集和编码的概念,并对MySQL的配置有一定了解。以下是一些关键知识点: 1. **字符集与编码**: - **字符集(Character Set)**:定义了一组特定的字符集合,如ASCII、GBK、UTF-8等。 - **...
- 登录MySQL服务器,执行`show variables like 'character_set%'`命令,以确认字符集是否已成功更改为`utf8`。 通过上述步骤,可以成功地将MySQL的字符集从`latin1`更改为`utf8`,从而更好地支持各种字符编码需求...
解决MySQL乱码问题的关键在于确保各个层级(服务器端、客户端、数据库、表、字段)的字符集设置一致,并且正确。通过上述方法,我们可以有效地避免和解决MySQL中的乱码问题,从而保证数据的一致性和准确性。
可以使用`mysql_query("SET NAMES 'GBK'")`或`mysql_query("SET NAMES 'UTF8'")`来指定连接的字符集。如果你的数据库是UTF-8编码,使用`SET NAMES UTF8`,如果是GBK,则使用`SET NAMES GBK`。不过,这些函数在较新的...
- 当客户端连接到MySQL时,可以通过`SET NAMES`命令指定字符集,确保客户端和服务器之间的字符集一致: ```sql SET NAMES 'gbk'; ``` #### 四、导出与导入数据时的字符集处理 在进行数据备份或迁移时,需要...