最近关于中文显示乱码的贴子比较多,所以也做了个总结:

可以参考一下杨涛涛版主的《各种乱码问题汇总》
http://topic.csdn.net/u/20071124/08/3b7eae69-ed1d-4a77-8895-9930bf3601af.html

MySQL字符集的原理介绍。摘录于官方文档。http://dev.mysql.com/doc/refman/5.1/zh/charset.html

不同的编码格式会导致同一字符,在不同字符集下的编码会不同。同样同一编码在不同的字符集中代码的字符也不相同。当你的MySQL返回的字符串的编码格式(字符集)与你的客户工具程序(mysql, php, query browser, ...)当前使用的字符集不同时,就会造成乱码。 比如一个英国朋友告诉你Long, 当一位中国小学生看到后就会告诉你“龙”而不是“长”

关于字符集的详细介绍和例子,建议花一点时间看一下 
http://dev.mysql.com/doc/refman/5.1/zh/charset.html  (第10章:字符集支持)。

这里仅摘要一下。

MySQL中默认字符集的设置有四级:服务器级,数据库级,表级 。最终是字段级 的字符集设置。注意前三种均为默认设置,并不代码你的字段最终会使用这个字符集设置。所以我们建议要用show create table table ; 或show full fields from tableName; 来检查当前表中字段的字符集设置。

MySQL中关于连接环境的字符集设置有  Client端,connection, results 通过这些参数,MySQL就知道你的客户端工具用的是什么字符集,结果集应该是什么字符集。这样MySQL就会做必要的翻译,一旦这些参数有误,自然会导致字符串在转输过程中的转换错误。基本上99%的乱码由些造成。

乱码后需要检查的信息。(如果需要论坛上的朋友帮助,建议你提供以下信息 )

1. 数据库表中字段的字符集设置 。show create table TableName 或 show full columns from tableName

mysql> show create table t1;
+-------+------------------------------------
| Table | Create Table                       
+-------+------------------------------------
| t1    | CREATE TABLE `t1` (
  `id` int(11) NOT NULL,
  `c1` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)    
) ENGINE=InnoDB DEFAULT CHARSET=gbk |
+-------+------------------------------------
1 row in set (0.00 sec) 
                        
mysql> show full columns from t1;
+-------+-------------+----------------+------+-----+-
| Field | Type        | Collation      | Null | Key | 
+-------+-------------+----------------+------+-----+-
| id    | int(11)     | NULL           | NO   | PRI | 
| c1    | varchar(30) | gbk_chinese_ci | YES  |     | 
+-------+-------------+----------------+------+-----+-
2 rows in set (0.00 sec) 
mysql>

2. 当前联接系统参数  show variables like 'char%'

mysql> show variables like 'char%';
+--------------------------+----------------
| Variable_name            | Value
+--------------------------+----------------
| character_set_client     | gbk
| character_set_connection | gbk
| character_set_database   | latin1
| character_set_filesystem | binary
| character_set_results    | gbk
| character_set_server     | latin1
| character_set_system     | utf8
| character_sets_dir       | C:/Program File
+--------------------------+----------------
8 rows in set (0.00 sec) 
mysql>

1. 中文,请确保 表中该字段的字符集为中文兼容: 
 big5     | Big5 Traditional Chinese
 gb2312   | GB2312 Simplified Chinese
 gbk      | GBK Simplified Chinese
 utf8     | UTF-8 Unicode

2. 确保,联接参数与这个字段字符集一致,你可以用 set name 'charsetname'; 
 比如, set name 'gbk';
 这条命令会同时修改 character_set_client,character_set_connection,character_set_results
 (如果你的这架MySQL中都为中文,则你可以在my.ini或my.cnf中加上或修改这个参数, 参数文件修改后需重启MySQL服务)
[mysql]
default-character-set=gbk

3. PHP 乱码, 同样 mysql_query("set name 'gbk'"); 其它API也类似。

4. phpmyadmin里乱码 
phpMyAdmin的config.inc.php中有没有设置$cfg['DefaultCharset']='utf-8';

5. Windows操作系统中命令行("DOS"窗口)下。 
 在你的DOS窗中的左上角标题栏片左键,属性,
 在字体中,选择“宋体”,确认
 mysql中 set names 'gbk';

6. ADO.NET, ADO中 ,可以连接字符串中加入CharSet=UTF8;类似指令以说明connection的字符集。
 Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword; CharSet=UTF8;

(utf8不行的话就换gbk试试)

C#往mysql中插入数据的时候,所有中文字符显示的都是?,但是从mysql数据库中读出来的数据都可以正常识别中文。

用这个连接字符串
server=aaa;database=bbb;uid=user;pwd=password;charset=gbk

7. SQL Manager for MySQL

用EMS建数据库,

Character Set设为utf-8

client charset设UTF-8

Font charset 设为GB2312_CHARSET

8. jdbcodbc桥接 http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/bridge.html

// Load the JDBC-ODBC bridge driver 
       Class.forName(sun.jdbc.odbc.JdbcOdbcDriver) ;

// setup the properties 
       java.util.Properties prop = new java.util.Properties();
       prop.put( " charSet " , " Big5 " );
       prop.put( " user " , username);
       prop.put( " password " , password);

// Connect to the database 
       con = DriverManager.getConnection(url, prop);

9.  PHP 5.2 版本以上解决乱码问题的一个方法 (由 ljf_ljf [Mark Liang] 提供)

$conn = mysql_connect ( " 192.168.1.133 " , " root " , " 123456 " ) or
        die ( " Could not connect: " . mysql_error ());

$program_char = " utf8 " ;

$conn . mysql_select_db ( " test " );
    // $conn.mysql_query('SET @@character_set_results = "'.$program_char.'"'); 
    
    mysql_set_charset( $program_char , $conn ); 
    $charset = mysql_client_encoding ( $conn );
    printf ( " current character set is %s <br> " , $charset );
    $result = mysql_query ( " SELECT id, task_no,pack_path FROM tb_workplan where id = 1 " , $conn );
    while ( $row = mysql_fetch_array ( $result , MYSQL_BOTH)) {
        printf ( " ID: %s <br> task_no: %s  <br> pack_path :%s <BR> " , $row [ " id " ] , $row [ 1 ] , $row [ "pack_path " ]);  
    }
    $conn . mysql_free_result ( $result );
    $conn . mysql_close ();

9.  存储过程参数乱码

create procedure t ( aa char(10) charset 'gbk')

 

MySQL 中文显示乱码以及中文查询条件返回0条结果的问题解决的更多相关文章

  1. 01_Linux系统系统语言查询,设置Xshell工具,中文显示,测试Xshell中文字符显示,Linux中文显示乱码设置

              Xshell是一个强大的安全终端模拟软件,它支持SSH1,SSH2,以及Microsoft Windows平台的TELNETNetSarang Xshell 4 Build 0 ...

  2. hive表查询中文显示乱码

    hive在查询表信息时,中文显示乱码,数字或者url显现null问题解决思路. 1.确定create hive表时指定的row format delimited fields terminated b ...

  3. MySQL 中文显示乱码

    最近关于中文显示乱码的贴子比较多,所以也做了个总结: 可以参考一下杨涛涛版主的<各种乱码问题汇总> http://topic.csdn.net/u/20071124/08/3b7eae69 ...

  4. C#.NET ORM FreeSql 读取使用 US7ASCII 的 Oracle 数据库中文显示乱码问题

    前言 关于 Oracle US7ASCII 中文乱码的问题,Ado.Net 和 Odbc 无法解决.包括最新的.Net Core..NET6..NET7 都无法解决这个问题. FreeSql 对 Or ...

  5. Xshell4连接,Linux系统中文显示乱码解决办法

    Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET NetSarang Xshell 4 Build 0120议.使用 ...

  6. Oralce Plsql 中文显示乱码问题无需修改注册表完美解决

    此方法在其它版系统也可以解决 win10-64 plsql oracle 11g绿色版客户端 错误现象: 因为oracle用的是绿色版,无法设置注册表,尝试以下方法. 解决方法: 1.在plsql中查 ...

  7. PLSQL Developer 中文显示乱码的解决方法

    PLSQL Developer 中文显示乱码是因为 Oracle 数据库所用的编码和 PLSQL Developer 所用的编码不同所导致的. 解决方法: 1. 先查询 Oracle 所用的编码 se ...

  8. HTML 表单 存为EXCEL文件时 中文显示乱码

    在做宣传品发放系统时,需求要把数据库查询的记录生成表单并转存excel文件. 在转存的EXCEL文件中文显示乱码,表格和其他字符正常,检查后发现是创建EXCEL文件打开模式不对 之前: myfile ...

  9. idea操作maven时控制台中文显示乱码/maven项目启动方式

    在idea中通过maven启动项目时,在前台显示数据库信息,没有中文乱码问题,在控制台中mybatis显示数据库的信息,中文显示乱码. 在程序中用 System.out.println 输出中文的时候 ...

随机推荐

  1. Sending HTML Form Data

    public Task<HttpResponseMessage> PostFormData(){ // Check if the request contains multipart/fo ...

  2. hadoop结构出现后format变态

    14/07/10 18:50:47 FATAL conf.Configuration: error parsing conf file: com.sun.org                     ...

  3. Web 开发中 9 个有用的提示和技巧

    在本文中,我们给出 9 个有用的 HTML.CSS 和 JavaScript 的技巧和提示,可能在做 Web 开发中经常会需要用到的,其中有几个是关于 HTML5 和 CSS3 的,如果你是一个前端开 ...

  4. linode最新试用(购买)流程

    最新linode官网www.linode.com可以免费试用7天,但是需要你的身份认证 第一步:注册一个linode账号email填写国内的163.126.qq邮箱是不能认证的,这里可以填写gmail ...

  5. mongodb简单初级操作

    学习之余记录,仅供参考 mongodb启动: mongodb安装在D:\mongodb 目录下,启动时在该目录bin文件夹下打开命令行窗口 在启动数据库时,将datapath参数指向db目录   输入 ...

  6. 怎么使用dreamweaver制作网页教程 dw建站设计网页

    对于网页制作相关专业人士一定对dreamweaver有所认识,下面小编就问大家总结一下相关网页制作的一些步骤,喜欢的朋友可以一起来学习一下   Dreamweaver这一款专业的网页制作软件,相信相关 ...

  7. sqlserver 2008存储过程 多个可空条件任意组合

    很多程序员在实际开发中,经常遇到这种情况,列表上方有很多条件,包含下拉框,输入框等等,这些条件都可以不输入,如果我们需要写一个存储过程,很多条件挨个判断是否为空,且进行任意组合,任何一个开发人员都会疯 ...

  8. 学习Oracle一个星期以来的总结

    公司开发部门主要分2部分:.net开发和Oracle PL\SQL开发.刚入职的我被分到Oracle PL\SQL组了.Oracle是比SQL Server更大的数据库应用,我在学校只接触过SQL S ...

  9. 由chkconfig 引发的联想——怎么查看程序是否已经安装/成功安装

    由chkconfig 引发的联想--怎么查看程序是否已经安装/成功安装 某天需要运行chkconfig,root登录依然找不到该命令. [root@localhost ~]# chkconfig ba ...

  10. send()和recv()函数详解

    send()函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连 ...