MySql修改数据库编码为UTF8防止造成乱码难题

作者:数据库

 

mysql 创制数据库时钦赐编码很要紧,大多开采者都施用了默许编码,乱码难点而是防不胜防。制定数据库的编码能够极大程度上防止倒入导出带来的乱码问题。

一:mysql字符集

在mysql应用中变成mysql普通话乱码的主题素材不意外便是编码难题了,但在编码难题上有服务器编码依旧latin1或都数据库编码与程序页面编码未管理好,只要变成这两点mysql普通话难点就足以消除了。

前段时间的yymysqlsdk的开源项目里,对普通话的支撑不到位,由此用了1.5天的光阴,对粤语管理的各类情形张开了深入分析。

网页数据一般选取UTF8编码,而数据库默以为latin 。我们能够经过退换数据库暗中认可编码方式为UTF8来压缩数据库创造时的安装,也能最大限度的幸免因马虎产生的乱码难题。

mysql的字符集帮助(Character Set Support)有多少个品种:字符集(Character set)和一而再核查(Collation)。对于字符集的支撑细化到多个档次: 服务器(server),数据库(database),数据表(table)和接二连三(connection)。mysql对于字符集的钦定能够细化到一个数据库,一张表,一列。一般的次第在成立数据库和数目表时并从未运用那么复杂的配置,它们用的是暗许的配置

初阶写过一篇关于怎么样管理mysql普通话乱码的主题材料,结果发掘依旧有供给再写这一篇。

 

咱俩依照的规范是,数据库,表,字段和页面或文本的编码要合并起来
咱俩得以通过命令查看数据库当前编码: mysql> SHOW VA奥迪Q3IABLES LIKE 'character%';
意识多数相应的都是latin1,大家的指标正是在下一次利用此命令时latin1能被UTF8替代。

(1)编写翻译mysql时,暗中同意的字符集是 latin1;
(2)安装mysql时,能够在布置文件 (my.ini) 中钦赐四个默许的的字符集,倘诺没钦定这几个值选取暗中同意的;
(3)运转mysql时,可以在命令行参数中内定私下认可的的字符集,如若没钦点则继续自配置文件中的配置,此时 character_set_server 被设定为那么些暗许的字符集;
(4)当制造叁个新的数据库时,除非显著钦定,这些数据库的字符集被缺省设定为character_set_server;
(5)当选定了一个数据库时,character_set_database 被设定为那些数据库私下认可的字符集;
(6)在这么些数据Curry创制一张表时,表暗中认可的字符集被设定为 character_set_database,相当于以此数据库暗许的字符集;
(7)当在表内设置一栏时,除非明显钦点,不然此栏缺省的字符集正是表暗中认可的字符集;
若是什么地点都不修改,那么具有的数据库的全体表的装有栏位的都用 latin1 存款和储蓄。

由来是众多时候,为了安全,不允许mysql管理工科具连接线上的专门的学业碰到,那样的景色下,就不能够信赖mysql管理工科具来转变编码来缓和粤语乱码的主题材料。
诸如此类的事态下只好透过putty恐怕secureCRT远程连接mysql server,然后经过mysql命令分界面来对mysql数据库导出,再做其余的编码转变操作。笔者前几日面前境遇的条件正是这么。

 

先是等级:
mysql设置编码命令

所以mysql的默许编码是Latin1,不支持普通话,要帮衬中文须求把数据库的暗中认可编码修改为gbk也许utf8。

这段日子,描述一下本人的多寡意况,笔者急需导出中文乱码的数据表account.user:

 

复制代码 代码如下:

二:mysql乱码原因:

 代码如下

1.第一肯定你的mysql配置文件,my.ini (只针对windows)里的布置,如未有则增进

SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_database = utf8;
SET character_set_results = utf8;
SET character_set_server = utf8;

       由以上可见:

复制代码

 

然后 mysql> SHOW VA奥迪Q3IABLES LIKE 'character%'; 你能够见到全变为 utf8 。
然则,那只是一种假象

1.server本身设置,比方编码还在运用latin1

mysql> show create database account;
———- ——————————————————————————————
| Database | Create Database |
———- ——————————————————————————————
| account | CREATE DATABASE `account` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */ |
———- ——————————————————————————————
1 row in set (0.00 sec)

[client]

此种形式只在此时此刻事态下有效,当重启数据库服务后失效。
所以借使想要不出现乱码唯有修改my.ini文件,
从my.ini出手(标签下并未有的丰富,有的修改)
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
上述3个section都要加default-character-set=utf8,经常大家只怕只加了mysqld一项。
下一场重启mysql,施行
mysql> SHOW VARIABLES LIKE 'character%';
管教全数的Value项都以utf8就可以。
唯独讨厌的政工又来了,
|character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 注意 该配置| character_set_server | latin1 不也许设置成UTF8 交互时候依然会冒出乱码。

2.数据表和字段的编码设定难题(包蕴character与collation)

mysql> show create table user;
——————— ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————–

 

第二品级:找到下边那东东
X:%path%MySQLMySQL Server 5.0binMySQLInstanceConfig.exe
再一次起动设置,将暗中认可编码设置为utf8.那样就会到达大家所要的效益了。
mysql> SHOW VARIABLES LIKE 'character%';
-------------------------- ---------------------------------------------------------
| 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 | C:Program FilesMySQLMySQL Server 5.0sharecharsets |
-------------------------- ---------------------------------------------------------
8 rows in set
此外注意事项:

3.客户端程式(例如php)的连线语系设定难点

| Table | Create Table |
——————— ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————–
| user_agreement_info | CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`uid` bigint(21) unsigned NOT NULL,
`realname` char(32) NOT NULL,
`id_type` smallint(11) unsigned NOT NULL,
`id_num` char(32) DEFAULT NULL,
`create_time` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `uid` (`uid`)
) ENGINE=MyISAM AUTO_INCREMENT=129287 DEFAULT CHARSET=utf8 |
——————— ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————–
1 row in set (0.02 sec)

default-character-set=gbk (是为着,开垦客户端程序时,对中文的支撑;倘使这里安装为utf8,笔者平昔不表明过,稍后验证,哈哈)

1、建表时加utf8,表字段的Collation可加可不加,不加时暗中同意是utf8_general_ci了。

  注意:GBK与GB2312的分别就在于:GBK能比GB2312呈现更加的多的字符,要出示简体码的繁体字,就只可以用GBK。

#查询数据乱码,看下边:

 

复制代码 代码如下:

三:编码查询

mysql> select * from user limit 10;
—- ———— ————————— ——— ——————– ————-
| id | uid | realname | id_type | id_num | create_time |
—- ———— ————————— ——— ——————– ————-
| 23 | 1000001229 | �陈 | 1 | 410101234567891234 | 1272619237 |
| 2 | 1000001207 | 王文鉴 | 1 | 320211198511261933 | 1272546559 |
| 3 | 1000001208 | 蒋家锋 | 1 | 513023198808294915 | 1272547009 |
| 4 | 1000001209 | zhaojing | 1 | 320822198704286120 | 1272550654 |
| 5 | 1000001210 | 阮�武 | 1 | 31020619840214283X | 1272562857 |
数据库,| 6 | 1000001211 | 黑夜精ç?µ | 1 | 412723798204103835 | 1272588671 |
| 7 | 1000001212 | 谢勇 | 1 | 330722198408168210 | 1272591799 |
| 8 | 1000001213 | 邵明芳 | 3 | 0621316 | 1272592840 |
| 9 | 1000001215 | 王维纪 | 1 | 330382198611030393 | 1272592959 |
| 10 | 1000001216 | 谈� | 1 | 430721198309272802 | 1272595142 |
—- ———— ————————— ——— ——————– ————-
10 rows in set (0.00 sec)

[mysql]

CREATE TABLE `tablename4` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`varchar1` varchar(255) DEFAULT NULL,
`varbinary1` varbinary(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

    查看数据库的编码形式命令为: 

#数据库编码设置处境:
mysql> show variables like ‘%char%’;
————————– —————————————-

 

2、网页xxx.php/jsp保存时精选utf8编码,页头最棒增加
header('conten-type:text/html;charset=utf-8');
在施行CRUD操作前施夷光行一下
mysql_query("set names utf8");

 1 mysql>show variables like 'character%'; 
 2  -------------------------- ---------------------------- 
 3 | Variable_name | Value |
 4  -------------------------- ---------------------------- 
 5 | character_set_client | latin1 |
 6 | character_set_connection | latin1 |
 7 | character_set_database | latin1 |
 8 | character_set_filesystem | binary |
 9 | character_set_results | latin1 |
10 | character_set_server | latin1 |
11 | character_set_system | utf8 |
12 | character_sets_dir | /usr/share/mysql/charsets/ |
13  -------------------------- ---------------------------- 、
15 mysql> show variables like 'collation%';(或者使用 >show variables like 'collation%';)
16  ---------------------- ------------------- 
17 | Variable_name | Value |
18  ---------------------- ----------------------- 
19 | collation_connection | latin1_swedish_ci |
20 | collation_database   | latin1_swedish_ci |
21 | collation_server       | latin1_swedish_ci |
22  ---------------------- -----------------------         

| 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/local/mysql/share/mysql/charsets/ |
————————– —————————————-
8 rows in set (0.02 sec)

本文由ca88发布,转载请注明来源

关键词: ca88网址 MySQL 数据库 亚洲城88官网