mysql怎么打中文乱码 mysql输入中文显示乱码

在mysql中输入中文的时候是乱码mysql怎么打中文乱码你这个看不清楚mysql怎么打中文乱码,不过mysql中输入中文的时候是乱码,一般都是编码的问题,关于编码的解决办法请参照下面mysql怎么打中文乱码:
一、页面编码
【mysql怎么打中文乱码 mysql输入中文显示乱码】1. 使用 META http-equiv="content-type" content="text/html; charset=xxx" 标签设置页面编码
这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx可以为GB2312,GBK,UTF-8(和MySQL不同 , MySQL是 UTF8)等等 。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码 。但是有的时候我们会发现有了这句还是不行,不管xxx是哪一种,浏览器采用的始终都是一种编码 , 这个情况我后面会谈到 。
请注意 , meta是属于html信息的,仅仅是一个声明 , 它起作用表明服务器已经把HTML信息传到了浏览器 。
2. header("content-type:text/html; charset=xxx");
这个函数header()的作用是把括号里面的信息发到http标头 。
如果括号里面的内容为文中所说那样,那作用和META标签基本相同,大家对照第一个看发现字符都差不多的 。但是不同的是如果有这段函数,浏览器就会永远采用你所要求的xxx编码,绝对不会不听话,因此这个函数是很有用的 。为什么会这样呢?那就得说说HTTPS标头和HTML信息的差别了:
https标头是服务器以HTTP协议传送HTML信息到浏览器前所送出的字串 。
因为meta标签是属于html信息的,所以header()发送的内容先到达浏览器,通俗点就是header()的优先级高于meta(不知道可不可以这样讲) 。加入一个php页面既有header("content-type:text/html; charset=xxx"),又有META http-equiv="content-type" content="text/html; charset=xxx",浏览器就只认前者http标头而不认meta了 。当然这个函数只能在php页面内使用 。
同样也留有一个问题,为什么前者就绝对起作用,而后者有时候就不行呢?这就是接下来要谈的Apache的原因了 。
3. AddDefaultCharset
Apache 根目录的 conf 文件夹里,有整个Apache的配置文档httpd.conf 。
用文本编辑器打开httpd.conf,第708行(不同版本可能不同)有AddDefaultCharset xxx,xxx为编码名称 。这行代码的意思:设置整个服务器内的网页文件https标头里的字符集为你默认的xxx字符集 。有这行,就相当于给每个文件都加了一行header("content-type:text/html; charset=xxx") 。这下就明白为什么明明meta设置了是utf-8,可浏览器始终采用gb2312的原因 。
如果网页里有header("content-type:text/html; charset=xxx") , 就把默认的字符集改为你设置的字符集,所以这个函数永远有用 。如果把AddDefaultCharset xxx前面加个“#”,注释掉这句,而且页面里不含header("content-type…"),那这个时候就轮到meta标签起作用了 。
4. default_charset
在 php.ini 文件中可以定义 php 的默认语言: default_charset = "xxx",xxx为编码名称 。这行代码的意思是设置所有 php 的输出页面编码为 xxx 。
总结:
以上 4 种编码设置方法的优先级如下:
header("content-type:text/html; charset=xxx")
default_charset xxx
AddDefaultCharset xxx
META http-equiv="content-type" content="text/html; charset=xxx"
如果你是web程序员,给你的每个页面都加个header("content-type:text/html; charset=xxx"),保证它在任何服务器都能正确显示,可移植性强 。
至于那句AddDefaultCharset xxx , 要不要注释就仁者见仁了 。反正我是注释掉了,不过我写页子也要写header(),便于放到服务器上能正常显示 。
二、数据库编码
PHP 程序在查询数据库之前,首先执行 mysql_query(“SET NAMES xxxx”);其中 xxxx 是你网页的编码(charset=xxxx) , 如果网页中 charset=utf8,则 xxxx=utf8,如果网页中 charset=gb2312 , 则xxxx=gb2312,几乎所有WEB程序,都有一段连接数据库的公共代码 , 放在一个文件里,在这文件里,加入mysql_query(“set names”)就可以了 。
SET NAMES 显示客户端发送的 SQL 语句中使用什么字符集 。因此,SET NAMES 'utf-8'语句告诉服务器“将来从这个客户端传来的信息采用字符集utf-8” 。它还为服务器发送回客户端的结果指定了字符集 。(例如 , 如果你使用一个SELECT语句,它表示列值使用了什么字符集 。)
三、中文文件名
默认情况下,文件名为中文时不能访问 。要使中文文件名能正常访问,需进行如下设置:
在ie中选择 工具 - internet选项 - 高级 - 取消“总是以UTF-8发送URL” 。
mysql输入中文乱码怎么解决首先:
用show variables like “%colla%”;show varables like “%char%”;这两条命令查看数据库与服务端的字符集设置
如果查看出来都是gbk2312,或 gbk,那么就只能支持简体中文,繁体和一些特殊符号是不能插入的 , 我们只有修改字符集为UTF-8,
修改方法如下:
用记事本或UitraEdit打开mysql数据库安装目录下的my.ini文件打开,然后Ctrl F搜索default-character-set,将后面的字符集修改为UTF8 , 注意要修改两个地方,一个事客户端的,一个是服务端的 。
然后保存 , 重启mysql服务、、进去继续用show variables like “%colla%”;show varables like “%char%”;着两条语句查询一下字符集 。
MySQL数据库中的中文乱码如何解决mysql数据乱码问题可能有以下三种原因:
1.server本身设定问题,例如还停留在latin1版本;
2.table的语系设定问题(包含character与collation);
3.客户端程式(例如php,java)的连线语系设定问题;
建议使用utf8!!!!
想要避免mysql的中文乱码问题,可以尝试以下方法:
1,对于版本问题,建议去官网更新最新的版本或者比较好用的版本;
2,创建数据库 , 创建表时没有对字符编码进行设定会造成乱码问题:
创建数据库的时候:CREATE DATABASE `test`
CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';
建表的时候 CREATE TABLE `database_user` (
`ID` varchar(40) NOT NULL default '',
`UserID` varchar(40) NOT NULL default '',
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3,对于第三种情况,参考一下方法:
编辑linux服务器中/etc/my.cnf文件,在[mysql]段加入default_character_set=utf8;
如果只是调试遇到乱码问题:
在编写Connection URL时,加上?useUnicode=truecharacterEncoding=utf-8参数;
并且在网页代码中加上一个"set names utf8"或者"set names gbk"的指令,告诉MySQL连线内容都要使用utf-8或者gbk 。
utf8或者gbk;
mysql数据库表里中文乱码应该选哪种编码?数据库中关于字符集的种类有很多,个人建议,数据库字符集尽量使用utf8(utf-8),以使mysql怎么打中文乱码你的数据能很顺利的实现迁移,因为utf8字符集是目前最适合于实现多种不同字符集之间的转换的字符集,尽管你在命令行工具上无法正确查看数据库中的内容,我依然强烈建议使用utf8作为默认字符集.如果你想使用gb2312编码,那么建议你使用latin1作为数据表的默认字符集,这样就能直接用中文在命令行工具中插入数据,并且可以直接显示出来.而不要使用gb2312或者gbk等字符集,如果担心查询排序等问题,可以使用binary属性约束 对编程有影响的主要是客户端字符集和数据库字符集(还有一个服务器字符集mysql怎么打中文乱码,不知道干什么用的), 数据库中常用的操作就是保存数据和读取数据mysql怎么打中文乱码,在这过程中,乱不乱码和数据库字符集貌似没有什么关系 。我们只要保证写入时选择的字符集和读取时选择的字符集一致,即只需保证两次操作的客户端字符集一致即可 。\x0d\x0a在MySQL的客户端上执行一次查询的过程一般是,在客户端的提示符后面输入一条SQL语句 , 回车,然后终端显示出查询的结果 。这个过程中 , 只有终端和三个MySQL的系统变量指定mysql怎么打中文乱码了正确的字符集,才能保证我们将一个正确的SQL语句送到服务器,然后服务器返回正确的结果 , 并且在终端正确显示 。\x0d\x0a三个MySQL的系统变量是: \x0d\x0a1. character_set_client,终端字符集,告诉Server客户端提交的SQL语句的编码格式\x0d\x0a2. character_set_connection,连接字符集,是服务器翻译SQL语句时用到的编码格式 \x0d\x0a3. character_set_results,返回的结果集的字符集,是服务器返回结果集之前把结果集转换成的编码格式 \x0d\x0a在MySQL终端通过执行命令 show variables like ‘char%’ 可以查看这几个变量的值 。这三个变量通常都设定为同一种字符集 , 用命令set names [charset name]就可以修改这三个变量的值 。一般来说,只要你设定了能够表示你的数据的字符集 , 你查询的结果都可以在终端正确显示 。\x0d\x0a举个例子,使用的表t1是utf8编码,表中的字段c1继承了这个编码 , 表创建如下 \x0d\x0amysql create table t1 ( c1 text not null ) character set utf8; \x0d\x0a用的字符是汉字“范”,gbk编码为B7 B6 , utf8编码为E8 8C 83 \x0d\x0a用下面的SQL语句插入数据 \x0d\x0amysql insert into t1 values( ‘范’); \x0d\x0aa)如果终端设置为utf8,并且执行了 set names utf8,那么插入到数据库中的就是“范”这个字的utf8编码,这个过程中MySQL不需要做编码转换 。写入数据库的内容可以通过执行 select hex( c1 ) from t1 得到数据的十六进制编码来验证 。\x0d\x0a\x0d\x0ab)如果终端设置为 utf8,并且执行了set names gbk,那么执行完这个插入操作后,写入的二进制数据是E9 91 BC,这是“汉字“锣”的utf8编码 。这是因为 , 终端输入的“范”用的是utf8编码,而服务器以为终端发送过来的内容是gbk编码,所以在向t1表中插入的时候进行了一次gbk到utf8的转换 , 结果当然是错误的 。\x0d\x0a\x0d\x0ac)如果终端设置为gbk,并且执行了set names gbk , 那么执行完插入操作后,写入t1的依然是“范”这个字的utf8编码 。插入过程中,终端输入的是“范”的gbk编码B7 B6,服务器被告知终端发过来的SQL语句是gbk编码(由character_set_client指定),所以在插入数据前做了一次gbk到utf8的编码转换 。\x0d\x0a\x0d\x0ad)如果终端设置为gbk,并且执行了set names utf8 , 那么执行完插入操作后,MySQL会报出一个数据被截断的警告 。实际上,输入终端的是“范”这个字符的gbk编码B7 B6 , 而服务器被告知客户端发过来的SQL语句是utf8编码,所以在执行过程中没有做转码,直到插入数据的时候 , 发现B7 B6不符合utf8的编码规则,给出了警告信息,实际插入的数据是3F 3F,也就是两个问号 。\x0d\x0a\x0d\x0a查询的时候是同样的道理,MySQL也是根据set names设定的字符集来对返回给客户端的结果集做相应的编码转换,如果转换的结果和终端显示的字符集一致,就能正确显示 , 如果不一致就是乱码 。\x0d\x0a\x0d\x0a结论是,只要终端的字符集和set names指定的字符集一致就可以让MySQL在处理过程中执行正确的转码并且正确地显示 。\x0d\x0a\x0d\x0a另外,如果通过程序操作MySQL数据库 , 那么也需要事先执行set names命令来指定程序希望输出的字符集 。比如,用程序从一个utf8编码的数据库向另外一个gbk编码的数据库进行数据迁移,在选取源数据库数据之前 , 需要执行set names gbk,才能取到gbk编码的数据 。
mysql怎么打中文乱码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mysql输入中文显示乱码、mysql怎么打中文乱码的信息别忘了在本站进行查找喔 。

    推荐阅读