精华内容
下载资源
问答
  • 在telnet终端操作mysql数据库时会遇到中文乱码问题,是由于字符集设定错误造成的。涉及到好几个地方的...这个过程中,只有终端和 三个mysql的系统变量指定了正确的字符集,才能保证将一个正确的sql语句送到服务器...

    在telnet终端操作mysql数据库时会遇到中文乱码问题,是由于字符集设定错误造成的。

    涉及到好几个地方的字符集设置,如果搞清楚它后面的原理,就可以很容易解决这些乱码问题。

    在mysql的客户端上执行一次查询的过程一般是,在客户端的提示符后面输入一条sql语句,回车,然后终端显示出查询的结果。

    这个过程中,只有终端和 三个mysql的系统变量指定了正确的字符集,才能保证将一个正确的sql语句送到服务器,然后服务器返回正确的结果,并且在终端正确显示。

    三个mysql的系统变量是:

    ①character_set_client,终端字符集,告诉server客户端提交的sql语句的编码格式

    ②character_set_connection,连接字符集,是服务器翻译sql语句时用到的编码格式

    ③character_set_results,返回的结果集的字符集,是服务器返回结果集之前把结果集转换成的编码格式

    在mysql终端通过执行命令 show variables like 'char%';可以查看这几个变量的值。这三个变量通常都设定为同一种字符集,用命令set names [charset name]; 就可以修改这三个变量的值。

    一般来说,只要设定了能够表示数据的字符集,查询的结果都可以在终端正确显示。比如在数据库中存入了中文数据,不管 存入时使用的什么字符集,在终端即可以用set names命令设置为utf8,也可以设置为gbk编码,只要的终端显示的字符集和的设定一致就可以正确处理中文。

    例子,使用的表t1是utf8编码,表中的字段c1继承了这个编码,表创建如下

    复制代码 代码示例:

    mysql> create table t1 ( c1 text not null ) character set utf8;

    //用的字符是汉字“范”,gbk编码为b7 b6,utf8编码为e8 8c 83

    插入数据:

    mysql> insert into t1 values ('范');

    1、如果终端设置为utf8,并且执行了 set names utf8,那么插入到数据库中的就是“范”这个字的utf8编码,这个过程中mysql不需要做编码转换。写入数据库的内容可以通过执行 select hex( c1 ) from t1;得到数据的十六进制编码来验证。

    2、如果终端设置为utf8,并且执行了set names gbk,那么执行完这个插入操作后,写入的二进制数据是e9 91 bc,这是汉字“鑼”的utf8编码。这是因为,终端输入的“范”用的是utf8编码,而服务器以为终端发送过来的内容是gbk编码,所以在向t1表中插 入时进行了一次gbk到utf8的转换,结果当然是错误的。

    3、如果终端设置为gbk,并且执行 了set names gbk, 那么执行完插入操作后,写入t1的依然是“范”这个字的utf8编码。插入过程中,终端输入的是“范”的gbk编码b7 b6,服务器被告知终端发过来的sql语句是gbk编码(由character_set_client指定),所以在插入数据前做了一次gbk到utf8 的编码转换。

    4、如果终端设置为gbk,并且执行了set names utf8,那么执行完插入操作后,mysql会报出一个数据被截断的警告。实际上,输入终端的是“范”这个字符的gbk编码b7 b6,而服务器被告知客户端发过来的sql语句是utf8编码,所以在执行过程中没有做转码,直到插入数据时,发现b7 b6不符合utf8的编码规则,给出了警告信息,实际插入的数据是3f 3f,也就是两个问号。

    查询时是同样的道理,mysql也是根据set names设定的字符集来对返回给客户端的结果集做相应的编码转换,如果转换的结果和终端显示的字符集一致,就能正确显示,如果不一致就是乱码。

    结论是,只要终端的字符集和set names指定的字符集一致就可以让mysql在处理过程中执行正确的转码并且正确地显示。

    另外,如果通过程序操作mysql数据库, 那么也需要事先执行set names命令来指定程序希望输出的字符集。

    比如,用程序从一个utf8编码的数据库向另外一个gbk编码的数据库进行数据迁移,在选取源数据库数据之前,需要执行set names gbk,才能取到gbk编码的数据。

    展开全文
  • MySQL字符编码问题

    2010-08-12 10:20:45
    这是整理的一些东西,仅供参考。...可以使用SHOW CHARACTER SET语句列可用的字符集:  3,查看系统默认字符集    要是编码不正确可以根据自己需要在 my.ini 文件中修改默认编码  修改了默认字符集,需...


     这是整理的一些东西,仅供参考。
    相关资料,可以参阅
    MySQL 5.1中文参考手册

     

    1, 可以通过 status \s查看数据库状态 

     

    2,MySQL服务器能够支持多种字符集。可以使用SHOW CHARACTER SET语句列出可用的字符集: 

     

    3,查看系统默认字符集


     
     

     要是编码不正确可以根据自己需要在 my.ini 文件中修改默认编码

     

    修改了默认字符集,需要重启MySQL服务 (可能需要重新创建数据库和表)

    net stop mysql

    net start mysql

    然后重新测试web应用,看是否正常,若果还不正常,则考虑重新创建数据库

     

    drop database xxxName –删除数据库

    create database xxxName –创建数据库

     

    创建好了数据库之后,可以从 mysql\data\xxxName\db.opt 文件中,查看字符编码 如下:

    default-character-set=utf8

    default-collation=utf8_general_ci

     

    注意:不能通过dos窗口来检验,因为dos窗口的编码是GBK,如果我们想要的编码是utf8,则通过dos窗口是不行,插入时会报错:Incorrect string value: '\xA9p\xC1\xF7\xB6\xAF...' for column 'pdetails' at row 1,所以可以通过web应用测试看看来确定是否正常.

     

    需要注意:启动 mysql时,如果没指定指定一个默认的的字符集,这个值继承自配置文件中的;此时 character_set_server 被设定为这个默认的字符集; 

    当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为 character_set_server;  

    当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;
    在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;

     

    当在表内设置一列时,除非明确指定,否则此列缺省的字符集就是表默认的字符集。

     

    这样问题就随之而来了,假如一数据库是gbk编码。如果访问数据库时没指定其的字符集是gbk。那么这个值将继承系统的latin1,这样就做成mysql中文乱码。

     

    创建新的数据库时,指定数据库的编码
    如:create database address character set utf8;

     

    建表时指定编码,如下
    CREATE TABLE `book` (
      `ID` int(4) NOT NULL auto_increment,
      `NAME` varchar(25) default NULL,
      `PHONE` varchar(10) default NULL,
      `ADDRESS` varchar(50) default NULL,
      PRIMARY KEY  (`ID`)
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;


    当确认表的编码和数据库编码一致时,建表时可以不指定编码,默认以库的编码一致。同理,列也一样。

     

    另外可以在列定义时可以指定编码,如下:(一般不会这样,而是采用默认的,即和表的编码一致)
    `name` VARCHAR(45) CHARACTER SET gbk

     

     

     

     

     

     

     

     

     



     

     

    展开全文
  • 服务器网站进修改,下载文件到电脑中,会发现文件中出现乱码,以下给解决办法:   1.首先,要确定文件字符编码类型,以我下载的function.php为例: liam@liam:/liam$ sudo vim function.php :set file...

    对服务器网站进修改,下载文件到电脑中,会发现文件中出现乱码,以下给出解决办法:

     

    1.首先,要确定文件字符编码类型,以我下载的function.php为例:

    liam@liam:/liam$ sudo vim function.php
    :set fileencoding
    

       显示  fileencoding=utf-8 ,这里会有一个问题。看到后面就知道了

    2.接下来,我们要把它转译为gbk格式。

     

    出现了短暂的问题,我们看下这个命令

    liam@liam:/liam$iconv -f UTF8 -t gb18030 function.php -o function.php.new

       显示 iconv: 未知 301 处的非法输入序列

    我们把 -f 与 -t 后面的参数对调,编码格式居然成功转换。

    请哪位能够道破其中玄机。

     

    展开全文
  • 复制内容,我们经常遇到,估计也很少出问题。特殊情况下就需要注意:   从word里拷贝文本内容,里面包括了一个“—”横线,拷到html页面(gb2312)时发生编码不一致的问题,无法保存,当时没多看错误信息,直接...

      复制内容,我们经常遇到,估计也很少出问题。特殊情况下就需要注意:

     

    从word里拷贝文本内容,里面包括了一个“—”横线,拷到html页面(gb2312)时发生编码不一致的问题,无法保存,当时没多看错误信息,直接save as utf-8,最终发布到apache服务器时,页面无法展示。后来再次重现问题时,看到了最后一个选择,“找到第一个无法识别的字符”,然后保存,据此找出所有与当前页面不兼容的字符,然后修改,保存,问题就解决了

    展开全文
  • MySQL字符编码问题

    2014-12-03 17:58:10
    今天项目中,用中断命令导入sql脚本,发现其报出编码错误,后来进过一番分析查询后,发现字符集utf8mb4在mysql 5.5.3之后才支持,顿时无语,随后改字符编码为utf8。 注意:查询MySQL版本命令:  mysql -V; ...
  • 当高高兴兴写好shell脚本并跑了起来的时候,前端那边开始出问题了,项目开始抛出异常(项目使用的是谷歌的),maven如下: <dependency> <groupId>com.github.penggle</groupId> <artifactId&...
  • 四、JSP读取request.getParameter里的中文参数后,在...而导致这种复杂性的,主要是此过程中字符编解码次数非常多,而且无论是浏览器还是WEB服务器特别是TOMCAT总是不能给我们一个比较满意的支持。 首先我们来分...
  • 四、JSP读取request.getParameter里的中文参数后,在页面...而导致这种复杂性的,主要是此过程中字符编解码次数非常多,而且无论是浏览器还是WEB服务器特别是TOMCAT总是不能给我们一个比较满意的支持。 首先我们来...
  • 编码问题深入浅

    2013-03-26 23:17:25
     编码问题是JAVA初学者在web开发过程中经常会遇到问题,网上也有大量相关的文章介绍,但其中很多文章并没有对URL中使用了中文等非ASCII的字符造成服务器后台程序解析出现乱码的问题作出准确的解释和说明。...
  •  相信一定有不少的程序开发人员时常会遇到字符编码问题,而这个问题也是非常让人头痛的。因为这些都是潜在的错误,要找这些错误也得要有这方面的开发经验才行。特别是在处理xml文档时 ,该问题的出现就更加的...
  • web 编码问题

    2008-09-28 13:38:04
    规范规定网络中传输都是二进制编码的,这里所说的编码只是将字符编码为二进制传输到服务器,具体解析仍要依靠服务器,可能不同的二进制流最终会解析相同的字符 (经过字符解码与 url 解码). form 讨论: form ...
  • post请求,在发送一个图片base64编码字符串时,服务端报这个错误。 报错信息中给了解决办法: 最可能的原因: Web 服务器上的请求筛选被配置为拒绝该请求,因为查询字符串过长。 可尝试的操作: 确认 ...
  • 深入浅URL编码

    2015-05-23 00:40:11
    编码问题是JAVA初学者在web开发过程中经常会遇到问题,网上也有大量相关的文章介绍,但其中很多文章并没有对URL中使用了中文等非ASCII的字符造成服务器后台程序解析出现乱码的问题作出准确的解释和说明。...
  • 我用nginx和php在本机搭了一个简单的服务器, ...就是输出"项目"两个中文字符 但是,当我在浏览器访问的时候(浏览器用utf-8编码), 显示的却是 \u9879\u76ee 它把utf-8编码直接显示出来了,这是怎么回事? 恳请大神教导.
  • 每个字体编码出的结果不一样,本身在自己的网页上显示是正常的,如下图 但是截图生成的图片上是 后来网页F12发现,其实数据是正确的,但是被字体渲染之后在界面上显示就是错误的 纠其原因发现,本身浏览器对...
  • post请求,在发送一个图片base64编码字符串时,服务端报这个错误。 报错信息中给了解决办法: 最可能的原因: Web 服务器上的请求筛选被配置为拒绝该请求,因为查询字符串过长。 可尝试的操作: 确认 ...
  • 当访问某个服务器的的时候 需要用到NSURL 构建URL的时候路径其中可能包含中文或者一些像&……+¥等符号,但是我们知道如果不对其进行处理的话,访问时就会出问题:如http:/www.nihao.com?arguments=我是一名程序员&...
  • 关于字符编码可以衍生很大一块内容,这里我就按照自己的理解简单说明一下。 首先我们需要知道的是任何数据在计算机里面都是以二进制形式存在的。而对于日常使用的字符(包括英文字符,中文字符,日日韩文字符等等...
  • 在Windows操作系统中,每个汉字字符编码均使用GBK标准的双字节编码,而在Linux系统中,每个汉字字符编码均使用UTF-8的3字节编码。 输出 输出所有包含数字的成语,每个成语占一行。请按照成语输入时顺序输出。...
  • 关于ext编码问题.

    2009-07-20 10:21:36
    数据库结构比如说是就一个...但绑定的时候显示却又问题.显示的也是经过编码的内容. 而且因为name是xtype: "textarea",回车不能处理的话也挺难看的.求个解决方法. 其实就是求大家给个解决方法.能有代码例子更好.
  • HTTP传输默认的编码是ISO-8859-1,因此在浏览器发出请求时给的url是编码后的字符串,这样当有中文时,服务器得到的是一个包含乱码的url字符串,在目标页面中很难正确解析参数值,为了解决这个问题,给以下解决...
  • JackSon解析json中文出现的编码问题

    千次阅读 2018-03-09 00:47:16
    原因是而json字符串的分隔符必须是英文标点,当json字符串中含有中文时,使用jackson解析会异常。 目前有两种解决方式: 第一种方式: 在服务器中修改JVM配置: tomcat: 在catalina.bat文...
  • 编码问题是JAVA初学者在web开发过程中经常会遇到问题,网上也有大量相关的文章介绍,但其中很多文章并没有对URL中使用了中文等非ASCII的字符造成服务器后台程序解析出现乱码的问题作出准确的解释和说明。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 447
精华内容 178
关键字:

服务器字符编码出问题