mysql设置mysql 字符集 utf8mb4为utf8还是中文乱码

没有更多推荐了,
不良信息举报
举报内容:
MySQL数据库字符集由utf8修改为utf8mb4一例
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!mysql字符集含义请看mysql手册第10.1节
mysql的字符集转换过程请看
0. 初始状态
debian使用apt安装的mysql一开始是这样的
可以看到默认情况下
sever的字符集是latin1
db的字符集是latin1
mysql cli的client和connect的字符集是utf8
(pdo连接的client和connect的默认字符集是latin1)
1. server charset
server的字符集设置可以通过配置文件修改
vim /etc/mysql/my.cnf
在[mysqld]部分添加
character_set_server = utf8
可以看到server的默认字符集变成了utf8
2. db charset
设置server字符集后,数据库的默认字符集也变成了和server相同的utf8
此外,在修改server字符集的情况下,还可以通过创建数据库时指定字符集的方式设置数据库字符集
如下图,server和database的默认字符集都是latin1
创建数据库test
create database test character set utf8;
此时默认的server和db字符集仍是latin1
但是此时数据库test的默认字符集已经被修改为utf8
3.table charset
设置了数据库的字符集,表的字符集若未设置则使用数据库的字符集
此外,还可以在创建表时指定表的字符集
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL DEFAULT '',
`email` varchar(64) NOT NULL DEFAULT '',
`age` tinyint(3) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4. column charset
设置了表的字符集,表列的字符集默认使用表的字符集
此外,还可以在创建表时指定列的字符集
CREATE TABLE `user2` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) CHARACTER SET latin1 NOT NULL DEFAULT '',
`email` varchar(64) CHARACTER SET latin1 NOT NULL DEFAULT '',
`age` tinyint(3) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
下图可见,表字符集为utf8,列字符集为latin1
5.conect charset
客户端和连接的字符集需要在客户端设置,否则默认为latin1
$dsn = 'mysql:host=127.0.0.1;dbname=test';
$user = 'root';
$password = 'root';
$pdo = new PDO($dsn, $user, $password);
$name = $_GET['name'];
$email = $_GET['email'];
$age = $_GET['age'];
$sql = 'insert into user (name,email,age) values (:name,:email,:age)';
$stmt = $pdo-&prepare($sql);
$stmt-&bindParam(':name', $name, PDO::PARAM_STR);
$stmt-&bindParam(':email', $email, PDO::PARAM_STR);
$stmt-&bindParam(':age', $age, PDO::PARAM_INT);
$stmt-&execute();
执行上述代码,在mysql cli的字符集为utf8时name显示乱码,
客户端在连接到mysql后,执行
set names utf8;
php代码中表示为
$pdo = new PDO($dsn, $user, $password);
$pdo-&exec('set names utf8');
再次访问url,可见连接字符集已设置为utf8
此外,还可以通过pdo连接时设置字符集
$dsn = 'mysql:host=127.0.0.1;dbname=charset=utf8';
$user = 'root';
$password = 'root';
$pdo = new PDO($dsn, $user, $password);
$attr = array(PDO::MYSQL_ATTR_INIT_COMMAND =& 'SET NAMES UTF8');
$pdo = new PDO($dsn, $user, $password, $attr);
laruence博客
stackoverflow
&&&&&&&&&&&&&&&&&&&&&
阅读(...) 评论()温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(924)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'windows中mysql5.5.10默认字符集修改,字符编码设置,中文乱码,gb2312,gbk,utf8格式存储数据',
blogAbstract:'转自:http://jmhmlu.blog.163.com/blog/static//
windows中mysql5.5.10默认字符集修改,字符编码设置,中文乱码,gb2312,gbk,utf8格式存储数据
通过修改mysql默认字符集,可以存储中文数据,以免出现中文乱码,以下以设置为utf8为例。
=================================================================================
以下内容是在本机安装的mysql-5.5.10上,没有修改my.ini前显示结果===================================================================================',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:2,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}彻底解决mysql中文乱码的办法
MySQL会出现中文乱码的原因不外乎下列几点:1.server本身设定问题,例如还停留在latin12.table的语系设定问题(包含character与collation)3.客户端程式(例如php)的连线语系设定问题强烈建议使用utf8!!!!utf8可以兼容世界上所有字符!!!!Linux下Mysql插入中文显示乱码解决方案mysql -uroot -p 回车输入密码进入mysql查看状态如下:mysql不能插入中文默认的是客户端和服务器都用了latin1,所以会乱码。解决方案:mysql&mysql&alter database mydb &character set utf8;!另一种方法是直接修改默认的Mysql配置文件在debian环境下,彻底解决mysql无法插入中文和中文乱码的办法上面提到了用临时方法更改数据库的字符集设置,显示中文,但是后来发现在有的系统下并不能成功,比如我用的debian 7.0,找了好久终于找到一个适合debian系统的解决方案,debian 7.0下测试成功,其他诸如修改client和mysql加入default-character-set=utf8的方法之类的,只适用与5.5以前的系统!终极决绝方案,一劳永逸:debian下mysql的字符串修改为utf8(参考:rainysia的专栏)一、进入mysql(mysql -uroot -p),查看当前数据库字符集()二、查看当前系统版本(lsb_release -a)Mysql不能插入中文三、#vim /etc/mysql/my.cnf 。(5.5以前系统)在【client】下面加入&default-character-set=utf8在【mysqld】下面加入default-character-set=utf8Notice:注意 如果修改后不能启动报错试试把default-character-set=utf8改为character_set_server=utf8,仅仅加入到mysqld下面的.client就不需要加了四、#vim /etc/mysql/my.cnf 。(5.5以后系统)如下修改:[client]default-character-set=utf8[mysqld]default-storage-engine=INNODBcharacter-set-server=utf8collation-server=utf8_general_ci五、重启mysql(/etc/init.d/mysql stop & /etc/init.d/mysql &start)六、修成成功,进入mysql查看字符集(mysql&show variables like ‘character_set_%’;)Mysql无法插入中文一、避免创建数据库及表出现中文乱码和查看编码方法1、创建数据库的时候:CREATE DATABASE `test`CHARACTER SET 'utf8'COLLATE 'utf8_general_ci';2、建表的时候 CREATE TABLE `database_user` (`ID` varchar(40) NOT NULL default '',`UserID` varchar(40) NOT NULL default '',) ENGINE=InnoDB DEFAULT CHARSET=utf8;这3个设置好了,基本就不会出问题了,即建库和建表时都使用相同的编码格式。但是如果你已经建了库和表可以通过以下方式进行查询。1.查看默认的编码格式:mysql& show variables like &%char%&;+--------------------------+---------------+| Variable_name | Value |+--------------------------+---------------+| character_set_client | gbk || character_set_connection | gbk || character_set_database | utf8 || character_set_filesystem | binary || character_set_results | gbk || character_set_server | utf8 || character_set_system | utf8 |+--------------------------+-------------+注:以前2个来确定,可以使用set names utf8,set names gbk设置默认的编码格式;执行SET NAMES utf8的效果等同于同时设定如下:SET character_set_client='utf8';SET character_set_connection='utf8';SET character_set_results='utf8';2.查看test数据库的编码格式:mysql& show +------------+------------------------------------------------------------------------------------------------+| Database | Create Database |+------------+------------------------------------------------------------------------------------------------+| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET gbk */ |+------------+------------------------------------------------------------------------------------------------+3.查看yjdb数据库的编码格式:mysql& sh| yjdb | CREATE TABLE `yjdb` (`sn` int(5) NOT NULL AUTO_INCREMENT,`type` varchar(10) NOT NULL,`brc` varchar(6) NOT NULL,`teller` int(6) NOT NULL,`telname` varchar(10) NOT NULL,`date` int(10) NOT NULL,`count` int(6) NOT NULL,`back` int(10) NOT NULL,PRIMARY KEY (`sn`),UNIQUE KEY `sn` (`sn`),UNIQUE KEY `sn_2` (`sn`)) ENGINE=MyISAM AUTO_INCREMENT=1826 DEFAULT CHARSET=gbk ROW_FORMAT=DYNAMIC |二、避免导入数据有中文乱码的问题1:将数据编码格式保存为utf-8设置默认编码为utf8:set names utf8;设置数据库db_name默认为utf8:ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_设置表tb_name默认编码为utf8:ALTER TABLE `tb_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_导入:LOAD DATA LOCAL INFILE 'C:\\utf8.txt' INTO TABLE2:将数据编码格式保存为ansi(即GBK或GB2312)设置默认编码为gbk:设置数据库db_name默认编码为gbk:ALTER DATABASE `db_name` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_设置表tb_name默认编码为gbk:ALTER TABLE `tb_name` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_导入:LOAD DATA LOCAL INFILE 'C:\\gbk.txt' INTO TABLE注:1.UTF8不要导入gbk,gbk不要导入UTF8;2.dos下不支持UTF8的显示;三、解决网页中乱码的问题将网站编码设为 utf-8,这样可以兼容世界上所有字符。  如果网站已经运作了好久,已有很多旧数据,不能再更改简体中文的设定,那么建议将页面的编码设为 GBK, GBK与GB2312的区别就在于:GBK能比GB2312显示更多的字符,要显示简体码的繁体字,就只能用GBK。1.编辑/etc/my.cnf ,在[mysql]段加入default_character_set=utf8;2.在编写Connection URL时,加上?useUnicode=true&characterEncoding=utf-8参;3.在网页代码中加上一个&set names utf8&或者&set names gbk&的指令,告诉MySQL连线内容都要使用utf8或者
阅读本文后您有什么感想? 已有
人给出评价!
04-10-0804-10-0704-10-0704-10-0704-10-0704-10-0704-10-0704-10-07
注:您的评论需要经过审核才会显示出来
没有查询到任何记录。
Copyright &
PC6下载(www.pc6.com).All Rights Reserved
备案编号:湘ICP备号没有更多推荐了,
不良信息举报
举报内容:
CentOS 7下MySQL5.7的修改字符集编码为UTF8(解决中文乱码问题)
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 mysql 字符集 乱码 的文章

 

随机推荐