php+mysql乱码解决(好)
- 格式:doc
- 大小:1.29 MB
- 文档页数:3
数据库读出乱码解决一、分析常见数据库问题修改MYSQL数据库,数据表,字段的编码(解决JSP乱码)要解决JSP乱码,首先就要了解JSP乱码的原因1.架设服务器安装MYSQL时的会让你选择一种编码,如果这种编码与你的网页不一致,可能就会造成JSP页面乱码2.在PHPMYADMIN或mysql-front等系统创建数据库时会让你选择一种编码,如果这种编码与你的网页不一致,也有可能造成JSP页面乱码3.创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成JSP页面乱码4.创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成JSP 页面乱码5.用户提交JSP页面的编码与显示数据的JSP页面编码不一致,就肯定会造成JSP页面乱码.如用户输入资料的JSP页面是big5码,显示用户输入的JSP页面却是gb2312,这种100%会造成JSP页面乱码6.字符集不正确要注意:1.平时你在某些网站看到的文字可能有几种编码,如你看到一个繁体字,它有可能是big5编码,也有可能是utf-8编码的,更有可能是gb码的,没错,也就是说有简体编码的繁体字,也有繁体编码的简体字,一定要了解这一点.如果你是做一个简体编码的网页,编码定为GB2312,如果有香港和台湾地区的访客提交繁体的信息,就可能会造成乱码,解决方法就是(1)将网站编码设为utf-8,这样可以兼容世界上所有字符,(2)如果网站已经运作了好久,已有很多旧数据,不能再更改简体中文的设定,那么建议将页面的编码设为GBK,GBK与GB2312的区别就在于:GBK能比GB2312显示更多的字符,要显示简体码的繁体字,就只能用GBK7.JSP连接MYSQL数据库语句指定的编码不正确8.JSP页面没有指定数据提交的编码,就会造成乱码:所以,JSP乱码的原因无非就是以上几种,知道原因之后,要解决JSP乱码的方法也容易多了我们一一来表达:1.如果安装mysql的编码已不能更改,很多朋友是购买虚拟主机建立网站,无权更改MYSQL的安装编码,这一关我们可以跳过,因为只要后面的步聚正确,一样能解决乱码问题2.修改数据库编码,如果是数据库编码不正确:可以在phpmyadmin执行如下命令:ALTER DATABASE`test`DEFAULT CHARACTER SET utf8COLLATE utf8_bin以上命令就是将test数据库的编码设为utf83.修改表的编码:ALTER TABLE`category`DEFAULT CHARACTER SET utf8COLLATE utf8_bin以上命令就是将一个表category的编码改为utf84.修改字段的编码:ALTER TABLE`test`CHANGE`dd``dd`VARCHAR(45)CHARACTER SET utf8COLLATEutf8_bin NOT NULL以上命令就是将test表中dd的字段编码改为utf85.如果是这种情况容易解决,只需检查下页面,修改源文件的charset即可,//这个正确就无问题了6.这种情况也是修改页面charset即可,7.在JSP连接数据库的语句中,private String url="jdbc:mysql://localhost/"+DB_NAME+"user="+LOGIN_NAME+"&password="+LOGIN_PASSWORD+"&characterEncoding=GBK";//相键要看characterEncoding8.这种乱码的情况,只需在页面开头加上request.setCharacterEncoding("GBK");指定提交的即可注意:按照以上方法修改以后只能保证你新插入的数据不会乱码,举个例:如果你用户已提交的数据是BIG5,你却想通过以上方法改为可以在GB2312的网页正确显示是不可能的,这种文字内码的变换只能通过另写程序来解决,请其它相关文章总结:先要判断JSP乱码是插入数据库之后乱码,还是JSP页面刚提交过来就乱码了,如果JSP 刚接收上一页面的数据显示就乱码了,肯定是字符集不对,可者没有加request.setCharacterEncoding("GBK");如果是数据库的原因就参考上面的2,3,4种方法可能是编码问题这样连接一下数据库看看jdbc:mysql://localhost:3306/xxxx useUnicode=true&characterEncoding=UTF-8看看能否有效果二、乱码案例使用MYSQL数据库,用JSP去连接结果发现出了很多问题,主要集中在乱码显示上面,实际开发中,想必这类问题是见怪不怪了。
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" />这样不管输⼊数据库的中⽂,还是页⾯显⽰,就都正常了。
新手刚开始学习php,安装wamp成功后,开始一步步学习php的语法和知识,但突然学到用php文件写入mysql时,就出现了中文乱码问题。
在网上找啊找啊,找到的答案都是一知半解。
有人建议在php中插入:mysql_query(“set names uft8”);但是这个方法却只能作用于character_set_client,character_set_connection,character_set_results,但是在mysql中,用showvar iables like ‘char%’显示的结果还有两个没有达到预期要求,character_set_database,character_set_server,他们的value依旧是latin1,mysql默认的字符格式。
你在php中使用mysql_query(“set names uft8”);插入,然后将以下代码运行:<?php$connection = mysql_connect ("localhost", "root", "");if($connection){mysql_query("drop database books");$create_db=mysql_query("Create Database Books",$connection);if(!$create_db)echo "create database failed!<br>";else{echo "create database successfully!<br>";mysql_select_db("Books", $connection);mysql_query("SET NAMES 'UTF8'");//创建表Computers$query="CREATE TABLE Computers ( ";$query.="id int(3) auto_increment not null primary key, ";$query.="name char(10) not null, ";$query.="price float default 0,";$query.="publish_date date)";echo $query."<br>";$result=mysql_query($query);if(!$query)echo "create talbe failed!<br>";else{echo "create talbe successfully!<br>";//插入一条记录$query="INSERT INTO Computers (name,price,publish_date) ";$query.="VALUES ('数据结构',20.00,'2001-1-1')";echo $query."<br>";$result=mysql_query($query);if(!$query)echo "insert data failed!<br>";elseecho "insert data successfully!<br>";//修改记录$query="UPDATE Computers ";$query.="SET price=price+2 ";$query.="WHERE name='数据结构'";echo $query."<br>";$result=mysql_query($query);if(!$query)echo "update data failed!<br>";elseecho "update data successfully!<br>";}}}?>数据库中books中的表computer在name中,中文“数据结构”依旧显示为????,为什么呢?因为上面的character_set_database,character_set_server,依旧是latin1,在网上查阅资料,中文从utf8传到数据库,然后要经过set_database,将数据写入,但latin1它不认识中文,是以出现了乱码。
网页中文乱码<meta http-equiv="Content-Type" content="text/html; charset=gb2312">既然后面charset设置为gb2312,那么你打开这个网页,然后另存,保存的时候记得把编码改成gb2312,不然的话charset就会误导浏览器,这样就会乱码了。
2.php编网页出现乱码,我把编码改成utf-8 前台显示正常了,但是有东西输入到数据库再提取出来还是不正常3.apache+php+mysql 为何会出现乱码我们在做PHP项目的时候,经常会遇到中文乱码的问题,有时候编码问题还导致MYSQL的报错。
中文乱码总共有三个原因1:APACHE服务器设置导致乱码2:PHP,或者HTML页面编码导致中文乱码3:MYSQL数据库的表以及字段编码导致中文乱码我们分别从这三个部分来探究PHP程序设计中的编码问题在这之前我们要了解一些基本理论:1、文件编码每个文件在保存的时候都可以选择以什么编码保存,例如用WINDOWS的记事本创建一个文件可以选择ANSI 以及UTF8等等编码。
我们选择了什么编码该文件就以这种编码方式保存在硬盘上。
读取该文件数据的时候也会指定一种编码来打开,如果指定的编码与文件保存的时候的编码不一样的话就会出现乱码2、HTML的编码在网页头部一般有这样一个区域这个的意思是让客户端知道,接下来输出的是html代码(text/html),并且以下输出的内容都将是utf-8编码的。
如果我们用记事本创建一个HTML文件该文件包含但是在保存的时候却以ANSI编码格式保存,那么我们用浏览器打开这个文件时,浏览器看见META 行的UTF8编码设置后就将文件以UTF8格式输出,而文件本来是ANSI编码,这样便出现了中文乱码。
一:APACHE服务器编码在APACHE配置文件中有一行是编码的设置默认的是AddDefaultCharset ISO-8859-1,大部分人认为应该将这句改为AddDefaultCharset UTF-8 。
PHPMYSQL乱码问题,使⽤SETNAMESutf8校正
先记下,免得以后想不起来⼜到处去找!
PHP操作数据库的时候,数据库中数据使⽤UTF8编码,在读出来的时候,显⽰的全是问号乱码,找了⼀些资料原来是在读取之前进⾏⼀次编码设置:
复制代码代码如下:
create table tablename
(
id int not null auto_increment,
title varchar(20) not null,
contnet varchar(300) defalut null,
primary key ('id')
)begin=MyISAM DEFAULT CHARSET =UTF8;
在插⼊数据之前执⾏:
复制代码代码如下:
mysql_query("SET NAMES utf8");
然后
mysql_query("insert into tablename .....")
读出数据之前执⾏:
复制代码代码如下:
mysql_query("SET NAMES utf8");
然后 mysql_query("select * from tablename")
注意:此处读出的编码是把原来编码的内容重新经过编码后输出的,⽐如输出内容所在页⾯是GBK编码,那么在读出的时候在页⾯显⽰也为乱码,所以在查询之前执⾏ mysql_query("SET NAMES gbk"),在页⾯就可以正常显⽰GBK编码的⽂字内容。
数据库中乱码问题解决方案数据库中乱码问题是一个常见的问题,特别是在多语言环境下。
在这种情况下,有时候我们会发现数据库中存储的数据出现乱码,这可能导致数据的有效性受到影响。
以下是一些解决方案,可以帮助您解决这个问题。
1. 确认数据库的字符集在创建数据库的时候,需要确认数据库的字符集是否正确。
如果字符集不正确,那么在存储数据的时候就会出现乱码问题。
可以通过以下查询语句来查看数据库的字符集:SHOW VARIABLES LIKE 'character_set_database';如果发现字符集有误,可以通过以下语句来修改数据库的字符集:ALTER DATABASE database_name CHARACTER SET utf8;2. 确认连接字符集连接字符集也可能导致乱码问题。
如果您的连接字符集与数据库字符集不同,那么在查询数据时就会出现乱码问题。
可以通过以下语句来查询连接字符集:SHOW VARIABLES LIKE 'character_set_connection';如果连接字符集有误,可以通过以下语句来修改连接字符集:SET NAMES utf8;3. 确认表的字符集在创建表的时候,需要确认表的字符集是否正确。
如果表的字符集不正确,那么在存储数据的时候就会出现乱码问题。
可以通过以下语句来查询表的字符集:SHOW CREATE TABLE table_name;如果发现字符集有误,可以通过以下语句来修改表的字符集:ALTER TABLE table_name CONVERT TO CHARACTER SET utf8;4. 确认字段的字符集在创建字段的时候,需要确认字段的字符集是否正确。
如果字段的字符集不正确,那么在存储数据的时候就会出现乱码问题。
可以通过以下语句来查询字段的字符集:SHOW FULL COLUMNS FROM table_name;如果发现字符集有误,可以通过以下语句来修改字段的字符集:ALTER TABLE table_name MODIFY column_name varchar(255) CHARACTER SET utf8;5. 确认应用程序的字符集除了数据库和连接字符集之外,应用程序的字符集也需要与数据库的字符集相同。
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数据库过程中,经常会遇到中文乱码的问题。
这是由于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为字段名。
我相信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。