$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、要保证程序编码与浏览器编码一致,即程序编码与一致。

mysql names gb2312_mysql_query(set names gb2312)设置客户端字符集相关推荐

  1. mysql 特殊字符集_特殊汉字“”引发的对于字符集的思考;mysql字符集;sqlalchemy字符集设置;客户端字符集设置;...

    字符集.字符序的概念与联系 在数据的存储上,MySQL提供了不同的字符集支持.而在数据的对比操作上,则提供了不同的字符序支持. MySQL提供了不同级别的设置,包括server级.database级. ...

  2. sqlldr 导入乱码,Oracle客户端字符集问题

    2019独角兽企业重金招聘Python工程师标准>>> 1,查Oracle数据库创建时候的字符集: Oracle服务器端执行 SQL> select name, value$ ...

  3. mysql中gbk编码汉字和英文_MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题...

    MySQL中涉及的几个字符集 character-set-server/default-character-set:服务器字符集,默认情况下所采用的. character-set-database:数 ...

  4. mysql字符集与校对规则设置_MySQL 字符集与校对规则

    1.创建对象时的默认值MySQL 的设置可以分为两类 , 创建对象时的默认值 , 在服务器和客户端通信时的设置 . MySQL 服务器有默认的字符集和校对规则 , 每个数据库也有自己的默认值 . 每个 ...

  5. mysql字符集在哪设置_MySQL字符集设置

    最近,在项目组使用的mysql数据库中,插入数据出现乱码,关于这个问题做了下总结,我们从最基本的地方说起,到错误产生的深层次原因和解决办法. 基本概念 • 字符(Character)是指人类语言中最小 ...

  6. 华为H3C交换机+Radius+mysql Radius认证认证方案,嵌入式客户端代码,配置(下:交换机和Radius服务器配置)

    (一交互机配置) 1 802.1x本地认证方案配置 当Radius服务器不可用的时候,需要在交换机本地有一个备用认证方案,用户名和密码设置在交换机上替换Radius Server完成对交换机端口的认证 ...

  7. 技术分享 | 为什么我的 MySQL 客户端字符集为 latin1

    作者:秦广飞 爱可生 DBA 团队成员,负责项目日常问题处理及公司平台问题排查,对数据库有兴趣,对技术有想法.一入 IT 深似海,从此节操是路人. 本文来源:原创投稿 *爱可生开源社区出品,原创内容未 ...

  8. MySQL导入sql脚本中文乱码设置和常用命令

    MySQL导入sql脚本中文乱码设置和常用命令 1. use database_name;  2. set names utf8; (或其他需要的编码)  3. source example.sql ...

  9. mysql 连接 字符集设置_Mysql 字符集的设置和修改

    Show variables like 'character%';  //显示目前mysql默认 字符集 显示数据连接字符集 修改字符集 D:\mysql>Net stop mysql   // ...

最新文章

  1. mongodb php 支持
  2. HALCON窗口出界解决方法
  3. linux mint 下载迅雷安装包,linux mint 最新版本下载地址
  4. 南昌大学c程序计算机作业,南昌大学计算机作业第二章答案
  5. mysql语句的左外链接_MySQL中的JOIN连接
  6. 攻防世界web题ics-06(爆破id值)
  7. UI设计素材|底部导航设计的黄金法则
  8. 图的最短路算法(Dijkstra和Floyd-Warshall)
  9. 游标遍历所有数据库循环执行修改数据库的sql命令
  10. 清爽登录界面html,基于css3实现扁平简洁清爽的登录注册页面代码
  11. Pr 入门教程,如何倾斜移位效果?
  12. Atitit.互联网 软件编程 数据库方面 架构 大牛 牛人 attilax总结
  13. 视频显示器与服务器之间使用什么线连接,显示器连接线有哪些?四种主流连线科普。...
  14. python第三方库怎么下载安装_简谈下载安装Python第三方库的三种方法
  15. 无线路由器WINS服务器,怎么创建和配置wins服务器
  16. java毕业设计选题基于SSM毕业设计管理系统|毕设管理文档成绩Shiro
  17. 疫情中的云与教育:“停课不停学”背后的百度技术密码
  18. java实现面向对象的23种设计模式【超长预警,读完超过2小时】
  19. runtime无法执行grep_Runtime.getRuntime.exec()执行linux脚本导致程序卡死有关问题
  20. C++ VARIANT数据类型操作详解

热门文章

  1. 项目学生:JPA标准查询
  2. ActiveMQ群集,持久订阅者和虚拟主题可助您一臂之力
  3. 在Eclipse中有效使用JUnit
  4. JavaFX 2 GameTutorial第3部分
  5. MyEclipse 如何使用断点调试
  6. 双非计算机考研推荐学校传菜电梯,22考研双非院校排名Top100,前3名竟然是这几所!...
  7. r语言三维柱状图_R语言三维图的绘制
  8. linux过滤端口抓包_Linux抓包工具tcpdump使用总结,WireShark的过滤用法
  9. php 异步post,php – 使用POST的异步cURL
  10. ue4 设置intellisence_UE4.22编辑器界面操控设置(4)