重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
导出前 mysql_query("set names utf8");
创新互联建站主要为客户提供服务项目涵盖了网页视觉设计、VI标志设计、网络营销推广、网站程序开发、HTML5响应式网站建设公司、移动网站建设、微商城、网站托管及网站维护、WEB系统开发、域名注册、国内外服务器租用、视频、平面设计、SEO优化排名。设计、前端、后端三个建站步骤的完善服务体系。一人跟踪测试的建站服务标准。已经为iso认证行业客户提供了网站开发服务。
当然,实际情况可能更复杂,还得看数据库本身的编码
建议看mysql 的 系统变量
mysql show variables like "%charset%";
展开快讯
登录
首页
专栏
问答
沙龙
快讯
团队主页
开发者手册
智能钛AI
在线学习中心
TVP
返回腾讯云官网
彻底解决MySQL中文乱码
mysql是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面就来介绍一下如何彻底解决数据库中文乱码情况。
1、中文乱码
1.1、中文乱码
无法插入中文字符:
1.2、查看表字符编码
我们可以看到表的默认字符集是latin1.
所以我们在创建表的时候就需要指定表的字符集:
这样在Linux里面可以访问并且可以插入与访问这个表了。
1.3、数据库与操作系统编码
虽然在服务器端可以显示中文正常,但是在客户端可能会显示乱码。因为我们的服务器是UTF8。
而且数据库的编码也存在问题。
这里我们可以看character_sert_database与character_set_server的字符集都是latin1.那么在mysql数据库中,server,database,table的字符集都默认是latin1.下面我们就来看看如何解决mysql乱码情况。
2、mysql设置变量的范围
2.1、session范围
查看数据库编码:
修改字符编码:
我们可以看到字符集已经修改成都是utf8了。但是这里有一个问题,那就是我们重新打开一个命令窗口然后查看数据编码就会出现下面的画面:
数据库使用utf8编码,需要在操作的过程中统一全部编码。
1.数据库默认编码
CREATE DATABASE `test` DEFAULT CHARACTER SET 'utf8';
2.表默认编码
CREATE TABLE `tablea`(
`id` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(100) NULL,
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.字段默认编码
默认情况下,字段的编码同表的编码,但是如果修改了表的编码,字段编码不会同步修改,需要手动修改
这里修改编码测试我将utf8 改为 gb2312 ,仅用于观察修改后的情况(实际使用中可能是将gbk修改为utf8)
ALTER TABLE `test`.`tablea` CHARACTER SET = gb2312 ;
-- 修改表编码后,查看建表语句
show create table `tablea`;
-- 可以看到输出的建表语句中字段单独设置了编码
CREATE TABLE `tablea`(
`id` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(100) CHARACTER SET utf8 NULL,
)ENGINE=InnoDB DEFAULT CHARSET=gb2312;
-- 需要手动修改字段编码
ALTER TABLE `tablea`
CHANGE COLUMN `title` `title` VARCHAR(100) CHARACTER SET 'gb2312' NULL DEFAULT NULL ;
4.当前数据库连接的编码
连接数时设置编码
// PDO 连接
$db = new PDO('mysql:host=myhost;dbname=test', 'login', 'password',
array(PDO::MYSQL_ATTR_INIT_COMMAND = 'SET NAMES \'UTF8\'')
);
// mysqli连接
$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "test");
mysqli_query($link,"SET NAMES 'utf8';");
通过以上几步操作,基本可以保证数据库使用过程中不会出现乱码