MYSQL使用UTF8中文乱码解决办法
中文乱码解决大全
SSH开发过程中的中文问题汇总作者:Rainisic来源:博客园发布时间:2012-01-11 14:26 阅读:50 次原文链接[收藏]在使用SSH开发的过程中,我们经常会因为各种各样的中文乱码问题而苦恼。
之前开发的过程中遇到过一些,但是都没有记录下来,这次,我就遇到的中文问题进行一个汇总,希望能够对大家有所帮助。
1. 平台环境参数操作系统:Windows 7 旗舰版64位JDK版本:JDK 1.6 / JDK 1.7 (此处由于JDK 7 发布不久,所以对两个版本进行测试)开发环境:Eclipse Java EE Indigo网站容器:Tomcat 7.0开发框架:Struts 2.3.1.1-GASpring 3.1.0-releaseHibernate 4.0.0-Final / Hibernate 3.6.9-Final (此处由于Hibernate 4 final 刚刚发布不久,所以对两个版本进行测试)2. 中文问题汇总(1)HTML中未指定文件编码问题描述:在HTML中未指定文件编码,在部分浏览器中将会出现中文乱码。
解决方案:在HTML的head标签中指定文档编码,代码如下(请根据DOCTYPE选择):// HTML 4.01 Transitional<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">// HTML 5<meta charset="UTF-8">(2)表单提交使用GET方法问题描述:在HTML form 中提交表单的时候使用method="get"导致中文乱码。
解决方案:form表单的method设置为post,代码如下:<form action="test" method="post"><input type="submit"/></form>(3)JSP文件中未指定文档编码类型问题描述:在JSP文件中未指定JSP文档编码,在浏览器中会出现中文乱码。
mysql解决生僻字,特殊字符插入失败
mysql解决⽣僻字,特殊字符插⼊失败MySQL 的 utf8 实际上不是真正的 UTF-8。
utf8 只⽀持每个字符最多三个字节,⽽真正的 UTF-8 是每个字符最多四个字节。
MySQL ⼀直没有修复这个 bug,他们在 2010 年发布了⼀个叫作 utf8mb4 的字符集,绕过了这个问题。
当然,他们并没有对新的字符集⼴⽽告之(可能是因为这个 bug 让他们觉得很尴尬),以致于现在⽹络上仍然在建议开发者使⽤ utf8,但这些建议都是错误的。
简单概括如下:MySQL 的 utf8mb4 是真正的 UTF-8。
MySQL 的 utf8 是⼀种专属的编码,它能够编码的 Unicode 字符并不多。
所有在使⽤ utf8 的 MySQL 和 MariaDB ⽤户都应该改⽤ utf8mb4,永远都不要再使⽤ utf8。
为什么会有UTF8MB4?既然utf8应付⽇常使⽤完全没有问题,那为什么还要使⽤utf8mb4呢? 低版本的MySQL⽀持的utf8编码,最⼤字符长度为 3 字节,如果遇到 4 字节的字符就会出现错误了。
三个字节的 UTF-8 最⼤能编码的 Unicode 字符是 0xFFFF,也就是 Unicode 中的基本多⽂平⾯(BMP)。
也就是说,任何不在基本多⽂平⾯的 Unicode字符,都⽆法使⽤MySQL原有的 utf8 字符集存储。
这些不在BMP中的字符包括哪些呢?最常见的就是Emoji 表情(Emoji 是⼀种特殊的 Unicode 编码,常见于 ios 和 android ⼿机上),和⼀些不常⽤的汉字,以及任何新增的 Unicode 字符等等。
UTF-8编码理论上将, UTF-8 格式使⽤⼀⾄六个字节,最⼤能编码 31 位字符。
最新的 UTF-8 规范只使⽤⼀到四个字节,最⼤能编码21位,正好能够表⽰所有的 17个 Unicode 平⾯。
关于UTF编码,请阅读《常见编码总结》⼀⽂。
⽽utf8 则是 Mysql 早期版本中⽀持的⼀种字符集,只⽀持最长三个字节的 UTF-8字符,也就是 Unicode 中的基本多⽂本平⾯。
JSP+MySQL中文乱码问题post提交乱码解决方案
JSP+MySQL中⽂乱码问题post提交乱码解决⽅案写了两个jsp页⾯index.jsp和mysql_insert.jsp。
数据处理流程为:在浏览器(chrome)上访问index.jsp后在其表单上输⼊数据,提交⾄mysql_insert.jsp,mysql_insert.jsp⾸先将接收到的数据按变量存⼊MySQL的html_db数据库的person_tb中(该表原有部分数据),然后mysql_insert.jsp再拿出该表中所有数据显⽰在mysql_insert.jsp页⾯上。
现在发现,当提交的数据中含有中⽂(⽐如变量姓名的值为中⽂)时,mysql_insert.jsp页⾯上显⽰新增的那条记录中的相应中⽂(姓名的值)乱码,其他数据都显⽰正常,查看数据库,发现也是相应的含有中⽂的变量值(姓名的值)乱码。
乱码情况如下图:index.jsp中第⼀⾏有语句:<%@ page contentType="text/html;charset=gb2312"%> ,在浏览器(chrome)中访问此页⾯时⽆乱码(主要指中⽂乱码,英⽂乱码现象还没遇见过)。
(试过将gb2312换成utf-8,访问后中⽂乱码)mysql_insert.jsp中第⼀⾏有语句:<%@page language="java" pageEncoding="UTF-8"%>,在浏览器中直接访问此页⾯时⽆乱码。
mysql_insert.jsp页⾯的代码如下:复制代码代码如下:<%@page language="java" pageEncoding="UTF-8"%><%@ page import="java.sql.*" %><HTML><HEAD><TITLE>add message into table </TITLE></HEAD><BODY><%String id=request.getParameter("id"); //从表单获得String name=request.getParameter("name"); //从表单获得String sex=request.getParameter("sex"); //从表单获得String age=request.getParameter("age"); //从表单获得try{/** 连接数据库参数 **/String driverName = "com.mysql.jdbc.Driver"; //驱动名称String DBUser = "root"; //mysql⽤户名String DBPasswd = "123456"; //mysql密码String DBName = "html_db"; //数据库名String connUrl = "jdbc:mysql://localhost/" + DBName + "?user=" + DBUser + "&password=" + DBPasswd;Class.forName(driverName).newInstance();Connection conn = DriverManager.getConnection(connUrl);Statement stmt = conn.createStatement();stmt.executeQuery("SET NAMES UTF8");String insert_sql = "insert into person_tb values('" + id + "','" + name + "','" + sex + "','" + age + "')";String query_sql = "select * from person_tb";try {stmt.execute(insert_sql);}catch(Exception e) {e.printStackTrace();}try {ResultSet rs = stmt.executeQuery(query_sql);while(rs.next()) {%>ID:<%=rs.getString("id")%> </br>姓名:<%=rs.getString("name")%> </br>性别:<%=rs.getString("sex")%> </br>年龄:<%=rs.getString("age")%> </br> </br><%}}catch(Exception e) {e.printStackTrace();}//rs.close();stmt.close();conn.close();}catch (Exception e) {e.printStackTrace();}%></body></html>我的数据库设置的是全部使⽤UTF-8编码,如下图:我的虚拟⽬录下的web.xml内容如下:tomcat/conf⽬录下的server.xml⽂件的内容如下:复制代码代码如下:<U><?xml version='1.0' encoding='utf-8'?></U><Server port="8005" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JasperListener" /><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources><Resource name="UserDatabase" auth="Container"type="erDatabase"description="User database that can be updated and saved"factory="ers.MemoryUserDatabaseFactory"pathname="conf/tomcat-users.xml" /></GlobalNamingResources><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="erDatabaseRealm" resourceName="UserDatabase"/></Realm><Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /></Host></Engine></Service></Server>tomcat/conf⽬录下web.xml⽂件的主要内容如下:复制代码代码如下:<U><?xml version="1.0" encoding="UTF-8"?></U><web-app xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><servlet><servlet-name>default</servlet-name><servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class><init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>listings</param-name><param-value>false</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet><servlet-name>jsp</servlet-name><servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class><init-param><param-name>fork</param-name><param-value>false</param-value></init-param><init-param><param-name>xpoweredBy</param-name><param-value>false</param-value></init-param><load-on-startup>3</load-on-startup></servlet><servlet-mapping><servlet-name>default</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- The mappings for the JSP servlet --><servlet-mapping><servlet-name>jsp</servlet-name><url-pattern>*.jsp</url-pattern><url-pattern>*.jspx</url-pattern></servlet-mapping><session-config><session-timeout>30</session-timeout></session-config><此处省略了mime-mapping的内容><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>现在我能想到的设置编码的地⽅也就只有这么多了,其他还有哪⾥需要设置编码?恳求指导。
启用utf8后乱码解决方法
启用utf8后乱码解决方法启用UTF-8后出现乱码可能是由于多种原因造成的,下面是一些可能的解决方法:1. 检查数据库编码设置:确保数据库、表和列的编码设置为UTF-8。
你可以使用以下命令来检查和设置编码:```sql-- 检查数据库编码SHOW VARIABLES LIKE 'character_set_database';-- 设置数据库编码为UTF-8ALTER DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;-- 检查表的编码SHOW FULL COLUMNS FROM your_table_name;-- 设置表的编码为UTF-8ALTER TABLE your_table_name CONVERT TO CHARACTER SETutf8mb4 COLLATE utf8mb4_unicode_ci;```2. 检查连接编码设置:确保在连接数据库时使用的编码设置为UTF-8。
你可以在连接数据库的代码中设置编码,例如在PHP中:```php$conn = new mysqli($servername, $username, $password, $dbname); $conn->set_charset('utf8'); // 设置连接编码为UTF-8```3. 检查输入输出编码设置:确保在输入和输出数据时使用的编码设置为UTF-8。
你可以在输入输出代码中设置编码,例如在PHP中:```phpheader('Content-Type: text/html; charset=utf-8'); // 设置输出编码为UTF-8echo '<meta charset="UTF-8">'; // 设置HTML文档编码为UTF-8```4. 检查文本编辑器设置:如果你在编辑器中输入了乱码,可能是由于编辑器的编码设置不正确。
MYSQL数据库使用UTF-8中文编码乱码的解决办法
MYSQL数据库使⽤UTF-8中⽂编码乱码的解决办法1.⽤phpmyadmin创建数据库和数据表创建数据库的时候,请将“整理”设置为:“utf8_general_ci”或执⾏语句:复制代码代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;创建数据表的时候:如果是该字段是存放中⽂的话,则需要将“整理”设置为:“utf8_general_ci”,如果该字段是存放英⽂或数字的话,默认就可以了。
相应的SQL语句,例如:CREATE TABLE `test` (`id` INT NOT NULL ,`name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,PRIMARY KEY ( `id` )) ENGINE = MYISAM ;2.⽤PHP读写数据库在连接数据库之后:复制代码代码如下:$connection = mysql_connect($host_name, $host_user, $host_pass);加⼊两⾏:mysql_query("set character set 'utf8'");//读库mysql_query("set names 'utf8'");//写库就可以正常的读写MYSQL数据库了。
⽤的appserv-win32-2.5.10做的环境,装这个包的时候⽤默认的utf8编码。
在写数据库连接⽂件时,写成:$conn = mysql_connect("$host","$user","$password");mysql_query("SET NAMES 'UTF8'");mysql_select_db("$database",$conn);然后在做页⾯时,注意这句:复制代码代码如下:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />这样不管输⼊数据库的中⽂,还是页⾯显⽰,就都正常了。
UTF-8中文乱码怎么去解决(多个解决方案)
网站建设中UTF-8与GB2312互转方法为什么在ASP里指定了CodePage为65001还经常出现中文显示乱码?我在这里将这个问题详细解释一下,以免很多朋友再走弯路,甚至排斥UTF-8。
如果你还不知道UTF-8是什么东东,那我建议你先去搜索一下UTF-8的相关资料吧。
UTF-8编码之所以被越来越多的人接受甚至喜欢,肯定是有道理的。
在WEB2.0盛行的今天,在大谈多浏览器兼容的同时,不得不想到字符编码不同所造成的乱码现象同样需要得到很好的处理……在N年以前,IE6以下的所有版本,只要没有安装相应的中文字库,访问相关的页面都是会乱码的,例如:我是IE5 (Windows2000默认)的版本,在没有安装IE繁体字库的情况下,访问任何繁体页面的网站都是会乱码的,当然前提是该页面采用了BIG5的Charset。
而UTF-8作为一种国际编码就能很好的处理该问题,只要将页面存为UTF-8编码格式,再在页面上将CodePage及Charset 全部定义为UTF-8,就可以在任何客户端浏览器中显示出完全正确的内容,完全不会乱码。
好了,这里以ASP页面为例,以一个实例来看具体操作吧:打开新建一个ASP页面,相信玩ASP的朋友都会留意到,许多下载的源码里,页面最上方一般都有一句:<%@Language="VBScript" CodePage="936"%>前面的language应该不用多说了,vbscript就是ASP默认的脚本语言,其实完全可以不用写,写了好像还会影响页面执行效率,在这里我们先不讨论这个问题。
后面的CodePage就是关键了,目的就是告诉浏览器,此页面是何种编码,936代表是简体中文,而950代表繁体中文,65001就是我们今天说的UTF-8编码了。
我们将936改成65001,整句如下:<%@Language="VBScript" CodePage="65001"%>再加上输出几个中文字看看能不能正确显示吧:<%Response.Write "第一次测试UTF-8页面"%>OK,直接点击"保存",执行这个页面看看,如果不出意外,大家可能看到显示出的是“一尾UTF-8页”这几个字,中文有乱码的现象,什么原因呢?OK,请大家再点击最上面的“文件”菜单,选择“另存为”,最下面一行有个编码,默认应该是"ANSI"的,请大家点下拉框,选择"UTF-8",再点“保存”,再执行试试看,如果不出意外,乱得更厉害了,呵呵,晕了吧。
mysql中Incorrectstringvalue乱码问题解决方案
mysql中Incorrectstringvalue乱码问题解决⽅案mysql中Incorrect string value乱码问题解决⽅案你是否遇到过类似以下错误?java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x9C' for column 'content' at row 1.产⽣这种异常的原因在于,mysql中的utf8编码最多会⽤3个字节存储⼀个字符,如果⼀个字符的utf8编码占⽤4个字节(最常见的就是ios中的emoji表情字符),那么在写⼊数据库时就会报错。
mysql从5.5.3版本开始,才⽀持4字节的utf8编码,编码名称为utf8mb4(mb4的意思是max bytes 4),这种编码⽅式最多⽤4个字节存储⼀个字符。
要想证明这个问题,可以执⾏以下sql:select * frominformation_schema.CHARACTER_SETSwhere CHARACTER_SET_NAME like 'utf8%'结果如图:因此,要解决上述异常的发⽣,需要使⽤utf8mb4编码。
解决数据库编码后,还需要解决客户端Connection连接对象使⽤的编码问题。
调⽤创建的Connection对象执⾏以下sql:conn.createStatement().execute("SET names 'utf8mb4'");如果项⽬中使⽤了DataSource数据源,只需要对数据源进⾏相关配置即可,这⾥以apache的DBCP数据源为例讲解,在spring框架下配置如下:<!-- 数据源 --><bean id="dataSource" class="mons.dbcp.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://${${data-source.prefix}.data-source.host-name}:3306/${${data-source.prefix}.data-source.db-name}?characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&maxReconnec <property name="username" value="${${data-source.prefix}ername}" /><property name="password" value="${${data-source.prefix}.data-source.password}" /><property name="maxActive" value="150" /><property name="maxIdle" value="2" /><property name="testOnBorrow" value="true" /><property name="testOnReturn" value="true" /><property name="testWhileIdle" value="true" /><property name="validationQuery" value="select 1" /><!-- 此配置⽤于在创建Connection对象时执⾏指定的初始化sql --><property name="connectionInitSqls"><list><value>set names 'utf8mb4'</value></list></property></bean>以下解释引⽤⾃mysql参考⼿册:SET NAMES 'charset_name'SET NAMES显⽰客户端发送的SQL语句中使⽤什么字符集。
解决mysql数据库数据迁移达梦数据乱码问题
解决mysql数据库数据迁移达梦数据乱码问题受到领导的嘱托,接⼿了⼀个java项⽬,要进⾏重构,同时了项⽬的整体建设要满⾜信创的要求。
那么⾸先就要满⾜两点:1,使⽤国产数据库达梦8替换mysql数据库2,使⽤⾦蝶中间件替换tomcat进⾏容器部署在不懈的努⼒下,我已在本地的搭建和安装完成达梦8(dm8)数据库,也完成了代码框架更改数据库源,替换达梦数据库的demo验证⼯作。
driverClassName: dm.jdbc.driver.DmDriverurl: jdbc:dm://10.0.3.132:5236/XC-SERVICE?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8username: XC-SERVICEpassword: 123456789现在代码也能正常运⾏了。
除了部分sql脚本要进⾏规范外,也没有什么其它问题了。
现在最重要的事情来了,就是把数据进⾏迁移也就是将mysql的库迁移到dm8当中。
迁移的⽅式,采⽤达梦⾃带的数据库迁移⼯具达梦⾃带数据库迁移⼯具数据表结构和数据迁移后效果迁移完成后,会惊奇的发现,数据表结构倒是没有什么问题,但是中⽂数据全是乱码。
尝试了很多⽅法,百度了⼏圈,都没有找到解决⽅案,后来没有办法,只有去达梦的论坛上⾯去找解决⽅案。
终于,我找到了,⼀个很神奇的解决⽅式,解决数据迁移后乱码的问题。
使⽤数据迁移⼯具,进⾏数据源配置的时候,选择指定驱动。
url地址进⾏指定:jdbc:mysql://10.0.3.131:3306/sys-service?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai同时指定maven下载到本地的驱动。
MySQL中文乱码问题的解决方法
MySQL中文乱码问题的解决方法在使用MySQL数据库过程中,经常会遇到中文乱码的问题。
这是由于MySQL默认使用的字符集是Latin1,而大部分中文系统使用的是UTF-8字符集所致。
本文将介绍在MySQL中解决中文乱码问题的几种方法。
一、修改MySQL配置文件MySQL配置文件(f)是MySQL服务器的设置文件,通过修改该文件可以改变MySQL的默认字符集。
在Linux系统中,该文件通常位于/etc/mysql/f或者/etc/f。
在Windows系统中,该文件通常位于MySQL安装目录下的my.ini文件。
步骤如下:1. 找到f或my.ini文件并打开。
2. 在[mysqld]部分添加或修改以下内容:```[mysqld]character-set-server=utf8collation-server=utf8_general_ci```3. 保存文件并重启MySQL服务。
二、修改数据库、数据表、字段字符集如果修改MySQL配置文件没有解决中文乱码问题,可以尝试直接修改数据库、数据表、字段字符集。
1. 修改数据库字符集可以使用ALTER DATABASE语句修改数据库的字符集。
例如:```ALTER DATABASE database_name CHARACTER SET utf8 COLLATEutf8_general_ci;```2. 修改数据表字符集可以使用ALTER TABLE语句修改数据表的字符集。
例如:```ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;```3. 修改字段字符集可以使用ALTER TABLE语句修改字段的字符集。
例如:```ALTER TABLE table_name MODIFY column_name VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci;```其中,table_name为表名,column_name为字段名。
史上最全的PHP+MySql中文乱码解决方案
我相信PHPmyadmin里查看是乱码,调用出来的话肯定100%也是乱码。
乱码问题其实也就是编码不一致导致的。
要解决这个问题需要回顾乱码问题出现以前的操作是否使用的是同一种编码。
总之一句话,要解决PHP中文乱码最好最快的解决办法就是:页面申明的编码与数据库内部编码一致,如果页面申请的页码与数据库内部编码不一致时,就设定连接编码mysql_query(”SET NAMES XXX”); XXX为连接编码。
一定可以解决乱码的问题。
在mysql+php程序开发中,总结了产生乱码原因:mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码.MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码.MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码.用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成PHP页面乱码.如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成PHP页面乱码.PHP页面字符集不正确.PHP连接MYSQL数据库语句指定的编码不正确.一.首先是PHP网页的编码1. php文件本身的编码与网页的编码应匹配a. 如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charset=gb2312″),静态页面添加<metahttp-equiv=”Content-Type” content=”text/html; charset=gb2312″>,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码为ANSI,覆盖源文件。
b. 如果欲使用utf-8编码,那么php要输出头:header(“Content-Type: text/html; charset=utf-8″),静态页面添加<metahttp-equiv=”Content-Type” content=”text/html; charset=utf-8″>,所有文件的编码格式为utf-8。
网页中文乱码完美解决方案
网页中文乱码<meta http-equiv="Conten t-Type" conten t="text/html; charse t=gb2312">既然后面ch arset设置为gb2312,那么你打开这个网页,然后另存,保存的时候记得把编码改成gb2312,不然的话ch arset就会误导浏览器,这样就会乱码了。
2.php编网页出现乱码,我把编码改成u tf-8 前台显示正常了,但是有东西输入到数据库再提取出来还是不正常3.apache+php+mysql为何会出现乱码我们在做PH P项目的时候,经常会遇到中文乱码的问题,有时候编码问题还导致M YSQL的报错。
中文乱码总共有三个原因1:APACHE服务器设置导致乱码2:PHP,或者HTML页面编码导致中文乱码3:MYSQL数据库的表以及字段编码导致中文乱码我们分别从这三个部分来探究PHP程序设计中的编码问题在这之前我们要了解一些基本理论:1、文件编码每个文件在保存的时候都可以选择以什么编码保存,例如用WIN DOWS的记事本创建一个文件可以选择AN SI 以及UTF8等等编码。
我们选择了什么编码该文件就以这种编码方式保存在硬盘上。
读取该文件数据的时候也会指定一种编码来打开,如果指定的编码与文件保存的时候的编码不一样的话就会出现乱码2、HTML的编码在网页头部一般有这样一个区域这个的意思是让客户端知道,接下来输出的是html代码(text/html),并且以下输出的内容都将是utf-8编码的。
如果我们用记事本创建一个HTML文件该文件包含但是在保存的时候却以A N SI编码格式保存,那么我们用浏览器打开这个文件时,浏览器看见M E T A 行的UTF8编码设置后就将文件以U TF8格式输出,而文件本来是A NSI编码,这样便出现了中文乱码。
Java读写以latin1编码存储以UTF-8输出的MySQL数据库(中文乱码)
Java读写以latin1编码存储以UTF-8输出的MySQL数据库(中文乱码)(2011-09-14 20:09:26)转载▼分类:MySql标签:jdbcmysqllatin1编码utf-8编码中文乱码杂谈原文:/huyiyang2010/article/details/6202656使用Java读写存储在latin1编码的MySQL中的UTF-8编码的中文绝大多数情况下,一个项目中,都是使用同一套编码。
如,全部使用UTF-8或者GBK。
但是当涉及到多个项目合并、新手加入等情况时,不可避免出现使用多套编码的情况。
所有字符串都是英文的情况还好,若是出现了中文,就导致了乱码的出现。
下面以我碰到的问题的解决方案说明。
前置说明:==============Java MySQLUTF-8 utf8ISO-8859-1 latin1==============MySQL数据库使用latin1的编码,导入导出的数据是UTF-8编码的(即其与java端的交互是utf-8编码格式的),即将MySQL当做一个透明的存储。
============================character_set_client latin1character_set_connection latin1character_set_database latin1character_set_filesystem binarycharacter_set_results latin1character_set_server latin1character_set_system utf8=============================Java编写的导入数据程序(包括查看数据校验,即涉及到数据的导入导出)C++编写的导出数据程序(仅涉及到数据的导出)Java程序如何读写中文第一种解决办法:0 .Java文件设置为UTF-8编码(Eclipse的设置方法为:点击Window->Preferences->General->Workspace->Text file encoding->Other 填入UTF-8)1 .设置URL参数characterEncoding为utf8。
彻底解决MySql在UTF8字符集下乱码问题 - mysql
为了顺利的开发一个多语言的国际化J2EE程序,需要修改数据库字符集,我的做法如下:安装MySq时选择字符集为UTF-8修改MySql安装目录下的my.ini中配置的默认编码:该文件中有两处这样的配置:default-character-set=latin1将这两处改成:default-character-set=utf8新建数据库需指定字符集:UTF8: CREATE DA TABASE mmtye DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;在命令行查看字符集编码:show variables like '%char%'; 会看到如下信息:character_set_client | utf8character_set_connection | utf8character_set_database | utf8character_set_filesystem | binarycharacter_set_results | utf8character_set_server | utf8character_set_system | utf8character_sets_dir | D:\MySQL\share\charsets\以上内容在重启MySql后也一直有效,无需每次启动数据库都要指定。
A、为了在命令行下能正确查看中文,命令行下执行:set character_set_results=gbk;B、若需要在windows命令行执行insert、update,则执行:set character_set_client=gbk;A、B 两个命令重启数据库前有效,重启后就失效了。
MYSQL的乱码问题,总结了一下几个处理方法:1:改变数据库的默认编码配置,在MYSQL的安装目录中,找到my.ini,修改默认编码为:default-character-set=utf82:建立数据库时,CREATE DATABASE ms_db CHARACTER SET utf8 COLLATEutf8_general_ci;3:执行脚本:指定编码格式set names utf8(注意,不是UTF-8)4:如果你采用的是外部接入的方式,在连接中确定请求的编码格式如:jdbc:mysql://localhost:3306/ms_db?useUnicode=true&characterEncoding=U TF-8(不要出现任何空格,否则出错)。
关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)
关于Mysql中⽂乱码问题该如何解决(乱码问题完美解决⽅案)最近两天做项⽬总是被乱码问题困扰着,这不刚把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%”;着两条语句查询⼀下字符集。
如图:到此就配置完成了。
注意:如果以前建有数据库没有删除的请⽤ show database 数据库名;和 show create table 表名;查看⼀下数据库和表的字符集是否为UTF8 ,因为修改my.ini⽂件,它不能修改原来数据库的的字符集。
在命令⾏下⾯可以⽤alter database 数据库名 character set “字符集”;命令来修改数据库字符集还有⼀点要注意的是,修改为UTF8以后,在命令⾏下⾯中⽂是乱码的,只输出到页⾯或控制台是正常的,这个问题我也上⽹查了⼀下,貌似命令⾏下⾯不⽀持UTF8,我也不太清楚。
当修改以后,在命令⾏下⾯如果要插⼊中⽂,可以在插⼊语句之前执⾏,set names gbk2312;就可以插⼊中⽂了,但是不能插⼊繁体和⼀些特殊符号。
以上就是这⼏天解决乱码的成果。
Mysql中文乱码问题完美解决方案
转载:Mysql中文乱码的解决方法第一种方法,很精辟的总结:经常更换虚拟主机,而各个服务商的MYSQL版本不同,当导入数据后,总会出现乱码等无法正常显示的问题,查了好多资料,总结出自己的一点技巧:WINDOWS 下导入应该这样使用MYSQL的命令在DOS 命令下进入mysql的bin目录下,输入mysql -uroot -p密码数据库名称<要恢复的数据库, 例如我们要把D盘的一个名称为test.sql的数据库恢复到本地的test2这个数据库,那么就这样: mysql -uroot -p密码test2以前的国外主机用的Mysql是4.x系列的,感觉还比较好,都无论GBK和UTF-8都没有乱码,没想到新的主机的Mysql是5.0版本的,导入数据后,用Php读出来全是问号,乱码一片,记得我以前也曾经有过一次切换出现乱码的经验,原因肯定是Mysql版本之间的差异问题。
只好查资料,发现了一个解决方法,就是在mysql_connect后面加一句SET NAMES UTF8,即可使得UTF8的数据库消除乱码,对于GBK的数据库则使用SET NAMES GBK,代码如下:$mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass);mysql_query("SET NAMES 'GBK'");数据库字符集为utf-8连接语句用这个mysql_query("SET NAMES 'UTF8'");mysql_query("SET CHARACTER SET UTF8");mysql_query("SET CHARACTER_SET_RESULTS=UTF8'");还有个方法就是,如果你自己的机器的话,可以更改MYSQL字符集,一般在MYSQ4和MYSQL5这两个版本中有效。
MySQL字符集GBK、GB2312、UTF8区别解决MYSQL中文乱码问题
MySQL字符集GBK、GB2312、UTF8区别解决MYSQL中⽂乱码问题character-set-server/default-character-set:服务器字符集,默认情况下所采⽤的。
character-set-database:数据库字符集。
character-set-table:数据库表字符集。
优先级依次增加。
所以⼀般情况下只需要设置character-set-server,⽽在创建数据库和表时不特别指定字符集,这样统⼀采⽤character-set-server字符集。
character-set-client:客户端的字符集。
客户端默认字符集。
当客户端向服务器发送请求时,请求以该字符集进⾏编码。
character-set-results:结果字符集。
服务器向客户端返回结果或者信息时,结果以该字符集进⾏编码。
在客户端,如果没有定义character-set-results,则采⽤character-set-client字符集作为默认的字符集。
所以只需要设置character-set-client字符集。
要处理中⽂,则可以将character-set-server和character-set-client均设置为GB2312,如果要同时处理多国语⾔,则设置为UTF8。
解决乱码的⽅法是,在执⾏SQL语句之前,将MySQL以下三个系统参数设置为与服务器字符集character-set-server相同的字符集。
character_set_client:客户端的字符集。
character_set_results:结果字符集。
character_set_connection:连接字符集。
设置这三个系统参数通过向MySQL发送语句:set names gb2312UTF-8:Unicode Transformation Format-8bit,允许含BOM,但通常不含BOM。
是⽤以解决国际上字符的⼀种多字节编码,它对英⽂使⽤8位(即⼀个字节),中⽂使⽤24为(三个字节)来编码。
中文乱码问题
一、中文乱码问题及其解决方法中文乱码原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。
首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java 和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。
基于这种乱码,建议在Java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding GBK或-ecoding gb2312或-ecoding UTF-8编译;对于JSP,在文件头加上<%@ page contentType="text/html;charset=GBK"%>或<%@ page contentType="text/html;charset=gb2312"%>基本上就能解决这类乱码问题。
1.解决HTML页面中的中文问题:为了使HTML页面很好地支持中文,就必须在每个HTML页面的头部增加如下代码:<HEAD>。
<META http-equiv=Content-Type content="text/html;charset=gb2312">。
<HEAD>2、解决JSP页面中的中文问题为了使JSP页面很好地支持中文,就必须在每个JSP页面的头部增加如下代码:<%@ page contentType="text/html;charset=gb2312" language="java"%>3.解决Servlet响应结果的中文问题为了使Servlet页面很好地支持中文,就必须在每个Servlet页面的头部增加如下代码:response.setCharacterEncoding("gb2312");4.解决页面数据传输的中文问题为了使中文数据在各页面(组件)之间正常传递,最佳的方法就是采用编码过滤器来解决。
JSP与MySQL交互的中文乱码解决方案及总结
String s2 = new String(s1.getBytes("gb2312"),"ISO-8859-1")进行转码,其中s1为中文字符串.然后再写入到数据库一切显示正常。
为解决这个问题查看了n多资料,现作一个总结:由于字符集和字符编码方式的不同,在OS以及程序之间传递数据(尤其是multiple character sets中的数据)时便会产生乱码以及字符信息的丢失.解决这个问题的关键便是了解数据输出端和接收端使用的字符集和字符编码方式,如果这两种编码方式不同,便需要在数据出口或入口处进行 转码。一般的说,在编写代码,编译,以及运行期间都会字符数据的传递,因此需要特别小心。
IE也可以设置成总是使用UTF-8编码来发送请求.应用程序层,每个配置在服务器下的程序都可以设置自己的编码方式,这个我目前还没有用到,以后再学习。
运行时的转码,运行时期,应用程序很可能需要与外部系统进行交互,例如对数据库进行读写,对外部文件进行读写.在这些情况下,应用程序免不了要和外部系统进行数据交换。那么对于中文字符, 数据出入口的编码方式就显得特别重要了。一般外部系统都有自己的字符编码方式,我的例子中配置的MySQL就是使用的UTF-8编码。JSP页面通过设定"charset=gb2312",
encoding for text file"。如果设置为GBK,那么编写代码并保存这关就过了。
对于JSP程序而言,编写完代码后就交给Container,首先它们会被转成.java文件,然后编译成.class才能提交给服务器执行.这个过程也存在字符编码问题.java编译器(javac)使用操作系统的语言环境作为默认的字符编码方式,JRE(Java Runtime Environment)也是这样。只有当编译和运行环境的字符编码方式与存储源文件的编码方式相同时,中文字符才能正确地显示。否则就需要在运行时进行转码,使它们使用兼容的编码。这里的设置可以分为几个层次:操作系统层支持的语言,这是最重要的,因为它会影响JVM的默认字符编码方式,同时对字符的显示,如字体等有直接影响;J2EE服务器层,大多数服务器都可以对字符编码进行自定义的配置,例如Tomcat就可以通过web.xml中设置javaEncoding参数设置字符编码,默认是UTF-8.
MySQL的中文UTF8乱码问题
MySQL的中⽂UTF8乱码问题从MySQL⽀持Unicode后,为了与时俱进,我们的web程序也开始考虑⽤UTF8了。
其实UTF8也⽤了好⼏年了,程序基本能跑,没什么⼤问题,但是数据倒换的时候,总是遇到不爽的事情。
【问题现象】⽹页xxx.php⽤EditPlus另存为UTF8格式,MySQL在my.ini⾥设置default-character-set=utf8,建表时加了CREATE TABLE`xxx ` (myname varchar(255)) ENGINE=MyISAM DEFAULT CHARSET=utf8,⽤xxx.php执⾏insert/update/select出来的都是中⽂,貌似没问题,但是⽤phpMyAdmin看select是乱码,⽤第三⽅⼯具软件(如SQLyog)看select也是乱码,mysqldump也是乱码,很不爽。
当然,如果你建表的时候,选择了binary/varbinary/blob类型,不会发现乱码,因为指定的是⼆进制保存,MySQL保存数据时就没有编码的概念了。
【查找问题】虽然在my.ini⾥设置default-character-set=utf8,但是执⾏以下命令时有新发现:mysql> SHOW VARIABLES LIKE 'character%';+----------------------------------------+-------------------------| Variable_name | Value+----------------------------------------+-------------------------| character_set_client | latin1| character_set_connection | latin1| character_set_database | utf8| character_set_filesystem | binary| character_set_results | latin1| character_set_server | utf8| character_set_system | utf8| character_sets_dir | D:\mysql\share\charsets\+----------------------------------------+-------------------------8 rows in set (0.00 sec)mysql> SHOW VARIABLES LIKE 'collation_%';+---------------------------------------+------------------| Variable_name | Value+---------------------------------------+------------------| collation_connection | latin1_swedish_ci| collation_database | utf8_general_ci| collation_server | utf8_general_ci+--------------------------------------+------------------3 rows in set (0.00 sec)发现Value列⾥⾯不全是utf8,仍然有部分是latin1,⽐如其中的client和connection。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MYSQL使用UTF8中文乱码解决办法
MYSQL乱码的问题主要有几个环节决定,一个是前端网页;二是字符传输;三是连接MYSQL;四是MYSQL的存贮方式。
MYSQL的缺省字符集为latin1;如果不做任何处理,则存贮方式为latin;此时虽然在PHP 程序中设置set names 'utf8',可以正确存取中文;但其实utf8的字符按照latin1来存贮,占用的字节数差不多翻倍。
这样的方式,本质上是按照乱码存放,读取的时候再还原,是不太可取的。
我们要做的是实现前端UTF-8,传输UTF-8,接口UTF8,存贮UTF8。
1、前端问题:网页和PHP程序存贮为UTF-8格式;网页中指定编码格式: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
2、传输问题:apache的配置
vim /etc/apache2/conf.d/charset AddDefaultCharset UTF-8
3、MYSQL的连接和存贮问题:修改MYSQL配置 vim /etc/mysql/f
[client]
default-character-set = utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
skip-character-set-client-handshake
[mysql]
default-character-set = utf8
重启mysql
/etc/init.d/mysql restart 进入MYSQL,查看配置是否正确:
mysql> show variables like 'character_set_%';
| 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 | /usr/share/mysql/charsets/ |
mysql> show variables like 'collation_%';
+----------------------+-----------------+ |
Variable_name | Value |
+----------------------+-----------------+ |
collation_connection | utf8_general_ci | |
collation_database | utf8_general_ci | |
collation_server | utf8_general_ci |
MYSQL创建库和表的时候,都不要指定编码格式。
此时MYSQL数据库的编码格式为utf8_general_ci ,表格式也是utf8_general_ci,中文字段也是用utf8_general_ci 实现以上步骤,则网页、phpmyadmin都不是乱码。
而且phpmyadmin导出中文均为正常可见的字符。
如果在此之前使用了不正确的配置,那么转换到新的正确配置,之前的内容会出现乱码,所以需要注意做旧数据保存和重新导入。