mysql_query("set names gb2312")设置客户端字符集
<?php
$conn=mysql_connect("localhost","root","123456");
mysql_select_db("db_bcty365",$conn);
mysql_query("set names gb2312");
?>
其中:
SET NAMES ‘x‘语句与这三个语句等价:
mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET character_set_connection = x;
是用来设置客户端的字符集的,与服务器端的字符集无关,应该说msyql服务器端存储的字符是一定的。
==============================================
MYSQL 字符集问题
MySQL的字符集支持(Character Set Support)有两个方面:
字符集(Character set)和排序方式(Collation)。
对于字符集的支持细化到四个层次:
服务器(server),数据库(database),数据表(table)和连接(connection)。
1.MySQL默认字符集 MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符
集。
但是,传统的 程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么
,默认的配置从何而来呢?
(1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
(2)安装MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继
承自编译时指定的;
(3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置
文件中的配置,此时 character_set_server 被设定为这个默认的字符集;
(4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为
character_set_server;
(5)当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;
(6)在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个
数据库默认的字符集;
(7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;
简单的总结一下,如果什么地方都不修改,那么所有的数据库的所有表的所有栏位的都用 latin1 存储,
不过我们如果安装 MySQL,一般都会选择多语言支持,也就是说,安装程序会自动在配置文件中把
default_character_set 设置为 UTF-8,这保证了缺省情况下,所有的数据库的所有表的所有栏位的都用
UTF-8 存储。
2.查看默认字符集(默认情况下,mysql的字符集是latin1(ISO_8859_1)
通常,查看系统的字符集和排序方式的设定可以通过下面的两条命令:
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+---------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | D:"mysql-5.0.37"share"charsets" |
+--------------------------+---------------------------------+
mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3.修改默认字符集
(1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,
如 default-character-set = utf8
character_set_server = utf8
修改完后,重启mysql的服务,service mysql restart
使用 mysql> SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8
+--------------------------+---------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | D:"mysql-5.0.37"share"charsets" |
+--------------------------+---------------------------------+
(2) 还有一种修改字符集的方法,就是使用mysql的命令
mysql> SET character_set_client = utf8 ;
mysql> SET character_set_connection = utf8 ;
mysql> SET character_set_database = utf8 ;
mysql> SET character_set_results = utf8 ;
mysql> SET character_set_server = utf8 ;
mysql> SET collation_connection = utf8 ;
mysql> SET collation_database = utf8 ;
mysql> SET collation_server = utf8 ;
一般就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码
。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句: SET NAMES
'utf8';
它相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
总结:
因此,使用什么数据库版本,不管是3.x,还是4.0.x还是4.1.x,其实对我们来说不重要,重要的有二:
1) 正确的设定数据库编码.MySQL4.0以下版本的字符集总是默认ISO8859-1,MySQL4.1在安装的时候会
让你选择。如果你准备使用UTF- 8,那么在创建数据库的时候就要指定好UTF-8(创建好以后也可以改,
4.1以上版本还可以单独指定表的字符集)
2) 正确的设定数据库connection编码.设置好数据库的编码后,在连接数据库时候,应该指定.
=============================================================================
mysql5提供了以下几个设置字符集的系统变量:
character_set_client 客户端字符集
character_set_connection 客户端与服务器端连接采用的字符集
character_set_results SELECT查询返回数据的字符集
character_set_database 数据库采用的字符集
乱码问题一般是由于以上几个变量设置错误照成的,所以只要理解这几个变量,就可以与告别乱码了。
使用上述变量,要理解这个核心思想: character_set_client,character_set_connection这两个变量保证要与 character_set_database编码的一致,而 character_set_results则保证与SELECT返回的结果与程序的编码一致。
我们可以在程序中使用 set names来同时设置character_set_client, character_set_connection, character_set_results这三个系统变量。
例如 set names 'utf8' 等同于 :
set @@character_set_client = 'utf8'
set @@character_set_connection = 'utf8'
set @@character_set_results = 'utf8'
一般情况下,当数据库与数据库表的字符集为utf8,我们再在程序里设置set names 'utf8'命令,这样就能保证无乱码了,但是,这里还要注意character_set_results变量的值,character_set_results的字符值是用来显示返回给用户的编码的。
例如,你的数据库(character_set_database)用的是utf8的字符集,那么你就要保证character_set_client,character_set_connection也是utf8的字符集。而你的程序也许采用的并不是utf8,比如你的程序用的是gbk,那么你若把character_set_results也设置为utf8的话就会出现乱码问题。此时你应该把character_set_results设置为gbk。这样就能保证数据库返回的结果与你的程序的编码一致。
以下摘自网络的一程序段:
<?
//假设我们的程序采用的是utf8的字符集
$program_char = 'utf8';
//先检查mysql的版本号,如果版本号大于4我们才可以设置这些系统变量(mysql4还没有这些系统变量)
$version = current($db->fetch_one('SELECT VERSION()'));
if (substr($version, 0, 1) > 4)
{
//取出当前数据库的字符集
$sql = 'SELECT @@character_set_database';
$char = current($db->fetch_one($sql));
//将客户端字符集(character_set_client)和连接字符集(character_set_connection)设置为与数据库字符集(character_set_database)一致
$db->query('SET @@character_set_client = "' . $char . '"');
$db->query('SET @@character_set_connection = "' . $char . '"');
//将SELECT查询返回数据的字符集设置为与当前程序的字符集一致
$db->query('SET @@character_set_results = "' . $program_char . '"');
}
?>
1、要保证数据库中存的数据与数据库编码一致,即数据编码与character_set_database一致;
2、要保证通讯的字符集与数据库的字符集一致,即character_set_client, character_set_connection与character_set_database一致;
3、要保证SELECT的返回与程序的编码一致,即character_set_results与程序编码一致;
4、要保证程序编码与浏览器编码一致,即程序编码与<meta http-equiv="Content-Type" content="text/html; charset=?"/>一致。
分享到:
相关推荐
3. **修改my.cnf配置文件**:编辑MySQL服务端的配置文件`my.cnf`,在`[mysqld]`或`[mysql]`节下添加`init-connect='SET NAMES utf8'`,这样每次启动MySQL服务时都会自动设置字符集为UTF-8。 - 示例配置: ``` ...
当通过 DOS 命令行导入 SQL 文件时,确保在 MySQL 客户端设置正确的字符集。例如,如果数据库的字符集是 UTF-8,则应使用 `SET NAMES UTF8`;如果是 GBK,则使用 `SET NAMES GBK`。导入命令如下: ``` mysql -u...
对于支持的版本,会构造出SET NAMES命令的字符串,并通过mysql_real_query()执行,将结果集的字符集设置为期望的字符集。这样做的好处是确保了在不同版本的MySQL服务器上都能有一致的字符集设置行为。 SET NAMES...
error_reporting(0); ob_start(); session_start(); //打开会话 $HOST="localhost";... mysql_query("SET NAMES 'gb2312'"); //mysql 字符集 mysql_select_db($DBNAME,$dblink); //选择数据库 ?>
在这种情况下,可以在导入前使用`SET NAMES`指令来设置字符集,如`SET NAMES GBK`或`SET NAMES UTF8`。 2. **PHP连接MySQL时的字符集设置** 在使用PHP连接MySQL时,通过`mysql_connect`建立连接后,应立即执行`SET...
如果你遇到的问题是在MYSQL Query Browser或其他客户端工具中输入中文时出现乱码,或者导入包含中日文数据后显示乱码,那么可能需要调整这些字符集设置。 解决方法如下: 1. **修改MySQL配置文件**:在非安装版...
另外,还可以使用 `mysql_query("SET CHARACTER SET UTF8")` 和 `mysql_query("SET CHARACTER_SET_RESULTS=UTF8'")` 来确保结果集的字符集正确。 3. **配置文件修改** 对于服务器级别的字符集设置,可以在 `my.ini...
mysql_query("set names utf8;"); mysql_query(mb_convert_encoding("insert into my_table values('测试');", "utf-8", "gb2312")); ?> ``` 4. 读取数据 在读取数据时,我们需要将 UTF-8 编码转换成 GB2312 编码...
确保客户端和服务器之间通信的字符集一致,可以使用`mysql_query("set names XXX")`或`mysql_set_charset("XXX")`来设置,其中XXX应替换为相应的字符集,如'utf8'。 选择要操作的数据库,可以使用`mysql_query("use...
在使用PHP连接MySQL时,可以在`mysql_connect`之后添加`SET NAMES`语句来指定字符集。对于UTF-8数据库: ```php $mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass); mysql_query("SET NAMES '...
在PHPmyAdmin的配置中,确保MySQL字符集设置为`UTF-8 Unicode (utf8)`,连接校对设置为`utf8_unicode_ci`。 7. **数据库创建**: 新建数据库时,确保在“整理”(Collation)栏选择`utf8_unicode_ci`,以确保所有新...
2. **连接时设定**:在使用`mysql_connect`建立数据库连接时,立即设置字符集,如`mysql_query("SET NAMES 'UTF8'");`或`mysql_query("SET NAMES 'GBK'");`,以确保数据读取和写入时使用的字符集正确无误。 3. **...
MySQL数据库编码问题涉及到字符集的选择、配置以及数据的迁移和处理。字符集是决定数据库中存储和检索文本数据的方式,对于多语言支持和数据迁移至关重要。UTF-8是一种广泛使用的多字节字符编码,支持全球大部分语言...
mysql_query("SET NAMES gb2312"); // 设置字符集 ``` ### 二、数据提取与导入 #### 2.1 从SQL Server中提取数据 为了从SQL Server数据库中提取数据,我们可以使用`mssql_query`函数执行查询语句。例如,如果我们...
上述代码中的`mysql_real_query`函数用于执行SQL语句,设置字符集为GBK,确保客户端与服务器之间的通信也能正确处理中文。 5. **验证设置**: 通过MySQL命令行客户端,执行`STATUS`命令,查看当前的系统状态,...
例如,如果客户端发送给MySQL的数据字符集和MySQL服务器设置的字符集不匹配,就可能出现乱码。 2. 如何设置MySQL的字符集:文档中提到了使用`mysql_query("setnamesutf8;")`来设置字符集,这是通过PHP代码进行设置...
总之,正确设置MySQL连接的字符集是确保数据完整性和正确性的基础,而`mysql_set_charset()`是实现这一目标的推荐方法。同时,了解如何在PHP和MySQL中处理随机数、优化SQL查询以及使用Python连接MySQL都是开发者必备...
SET NAMES命令告诉MySQL客户端程序将会用什么字符集来发送和接收数据。该命令实际上是向MySQL发送了三个命令:SET character_set_client, SET character_set_results, 以及 SET character_set_connection。当SET ...