中文编码难题,修改及查看mysql数据库的字符集

图片 10

原文:

正文内容:

 

  • 怎么样是字符集?什么是核对集?
  • 查阅字符集和查对集
  • 安装字符集和核对集
  • mysql中的中文数据难点

 

首发日期:2018-04-19


Liunx下修改MySQL字符集:
1.查找MySQL的cnf文件的职位
find / -iname ‘*.cnf’ -print

什么样是字符集?什么是核对集?

 

  • 字符集是字母和标识的集合,每三个字符编码都由字符集决定。
  • 查对集是字母和标识的核对标准。查对集影响着字符的排序和寻觅。

 

 


/usr/share/mysql/my-innodb-heavy-4G.cnf
/usr/share/mysql/my-large.cnf
/usr/share/mysql/my-small.cnf
/usr/share/mysql/my-medium.cnf
/usr/share/mysql/my-huge.cnf
/usr/share/texmf/web2c/texmf.cnf
/usr/share/texmf/web2c/mktex.cnf
/usr/share/texmf/web2c/fmtutil.cnf
/usr/share/texmf/tex/xmltex/xmltexfmtutil.cnf
/usr/share/texmf/tex/jadetex/jadefmtutil.cnf
/usr/share/doc/MySQL-server-community-5.1.22/my-innodb-heavy-4G.cnf
/usr/share/doc/MySQL-server-community-5.1.22/my-large.cnf
/usr/share/doc/MySQL-server-community-5.1.22/my-small.cnf
/usr/share/doc/MySQL-server-community-5.1.22/my-medium.cnf
/usr/share/doc/MySQL-server-community-5.1.22/my-huge.cnf

翻开字符集和查对集:

 

翻开mysql协助的字符集:show character set;

  • 图片 1

翻看mysql支持的核查集:show collation;

  • 图片 2

翻看服务端暗中认可的字符集:show variables like ‘char%’;

  • 图片 3

查阅服务端私下认可的字符集:show variables like ‘collation%’;

  • 图片 4

 

 

 

服务端暗许的字符集的意思:

图片 5

服务端私下认可的核查集的意思:

图片 6

 


  1. 拷贝
    small.cnf、my-medium.cnf、my-huge.cnf、my-innodb-heavy-4G.cnf在那之中的三个到/etc下,命名称为my.cnf
    cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

  2. 修改my.cnf
    vi /etc/my.cnf
    在[client]下添加
    default-character-set=utf8
    在[mysqld]下添加
    default-character-set=utf8

设置字符集和核对集

 

4.重复启航MySQL
[root@bogon ~]# /etc/rc.d/init.d/mysql restart
Shutting down MySQL                                         [ 确定 ]
Starting MySQL.                                             [ 确定 ]
[root@bogon ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1
Server version: 5.1.22-rc-community-log MySQL Community Edition (GPL)
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.

设置数据库数据表的字符集:

实则,字符集相当少是服务器范围(以至数据库范围)的装置。不相同的表,甚至分歧的列都大概要求区别的字符集,并且双方都可以在创制表时内定【语出mysql必知必会】。上面介绍不选择暗许配置来创制数据库、数据表

创造数据库:create database 数据库名 charset 字符集 collate
核对集;【核查集并不是不可或缺的,每三个字符集都有暗中认可的查对集,若无核对集将使用暗中认可的】

  • 图片 7

始建数据表:create table 表名 charset 字符集 collate 核查集;

  • 图片 8

给某一列钦定字符集和核查集:图片 9

 

 

5.查看字符集设置
mysql> show variables like ‘collation_%’;
+———————-+—————–+
| Variable_name         | Value            |
+———————-+—————–+
| collation_connection | utf8_general_ci |
| collation_database    | utf8_general_ci |
| collation_server      | utf8_general_ci |
+———————-+—————–+
3 rows in set (0.02 sec)
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/ |
+————————–+—————————-+
8 rows in set (0.02 sec)
mysql>

安装服务端和客商端的字符集:

  • 语法:set character_set_xxx =字符集;
    【character_set_xxx是地点查看字符聚焦的服务端的后生可畏豆蔻梢头默许字符集,意义在上头已经标上了】【这种设置是会话级的,仅在当次接二连三生效。】
  • 假定想要永恒修改服务端的字符集:windows下修改my.ini文件【正是mysql的安排文件,可以从mysql服务中查阅图片 10在哪】,在mysqld少校character-set-server的值修改为钦定的字符集【修改的是服务端的字符集】

 

其他的风姿罗曼蒂克部分装置格局:

补充:

  • 不可长久配置服务端认为客商端的字符集,每一个连连过来的顾客端的字符集都以不鲜明的,应当由客商端设置当次连接的字符集来钦赐字符集。

 


修改数据库的字符集
    mysql>use mydb
    mysql>alter database mydb character set utf-8;
成立数据库钦命数据库的字符集
    mysql>create database mydb character set utf-8;

mysql中的中文数据难题:

 

mysql中的粤语数据难点本质上依然字符集问题,想要识别和存款和储蓄汉语数据,必得设置能编码粤语的字符集。

gbk和utf8都以支撑mysql的,常常都是将mysql的字符集退换成utf8来甄别中文。

怎么布置(以gbk为例):

  • 先是要考虑的三个是:只要你利用命令行情势,私下认可境况下字符的编码格式是gbk的,相当于说顾客端的数据编码是gbk的;
  • 假设服务端要识别客商端传来的华语,那么要求安装服务端感到客商端的字符集为gbk;set
    character_set_client =’gbk’;
  • 比方服务端要赶回粤语给客商端,供给将服务端再次回到给顾客端的数额的字符集设置为gbk;set
    character_set_results =’gbk’;
  • 对于单次会话,能够一贯运用set names = ‘gbk’;【推行set names=
    ‘gbk’正是把character_set_client、character_set_connection、character_set_results那3个参数值都设为gbk】

 

 

经过铺排文件修改:
修改/var/lib/mysql/mydb/db.opt
default-character-set=latin1
default-collation=latin1_swedish_ci

default-character-set=utf8
default-collation=utf8_general_ci
重起MySQL:
[root@bogon ~]# /etc/rc.d/init.d/mysql restart

 

 


由此MySQL命令行修改:
mysql> set character_set_client=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_connection=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_database=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_results=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_server=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_system=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> set collation_connection=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> set collation_database=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> set collation_server=utf8;
Query OK, 0 rows affected (0.01 sec)
查看: 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/ |
+————————–+—————————-+
8 rows in set (0.03 sec)
mysql> show variables like ‘collation_%’;
+———————-+—————–+
| Variable_name         | Value            |
+———————-+—————–+
| collation_connection | utf8_general_ci |
| collation_database    | utf8_general_ci |
| collation_server      | utf8_general_ci |
+———————-+—————–+
3 rows in set (0.04 sec)


【知识性文章转发】
MYSQL 字符集难题

MySQL的字符集支持(Character Set Support)有多少个方面:
      字符集(Character set)和排序格局(Collation)。
对于字符集的辅助细化到几个档次:
    
 服务器(server),数据库(database),数据表(table)和连接(connection)。
1.MySQL默许字符集
MySQL对于字符集的钦赐可以细化到三个数据库,一张表,一列,应该用什么样字符集。
唯独,守旧的次序在开创数据库和数码表时并不曾应用那么复杂的布署,它们用的是私下认可的配置,那么,暗中同意的配备从何而来呢? 
   (1)编写翻译MySQL 时,钦点了两个暗中同意的字符集,这些字符集是 latin1;
     (2)安装MySQL 时,能够在布置文件 (my.ini)
中内定叁个暗中认可的的字符集,假诺没内定,这几个值传承自编写翻译时钦赐的;
     (3)运营mysqld
时,能够在命令行参数中钦定二个暗许的的字符集,要是没钦命,那几个值承继自配置文件中的配置,此时
character_set_server 被设定为那几个暗中同意的字符集;
 
   (4)当成立二个新的数据库时,除非明显钦赐,这几个数据库的字符集被缺省设定为character_set_server;
     (5)当选定了叁个数据库时,character_set_database
被设定为那一个数据库默许的字符集;
     (6)在此个数据Curry成立一张表时,表暗中认可的字符集被设定为
character_set_database,相当于以此数据库暗许的字符集;
 
   (7)当在表内设置后生可畏栏时,除非鲜明钦点,不然此栏缺省的字符集就是表私下认可的字符集;
大致的下结论一下,如若什么地方都不修改,那么全体的数据库的全部表的具备栏位的都用
latin1 存款和储蓄,可是大家只要设置
MySQL,经常都会选用多语言支持,相当于说,安装程序会自动在配置文件中把
default_character_set 设置为
UTF-8,那有限扶助了缺省情状下,全部的数据库的全部表的全部栏位的都用 UTF-8
存款和储蓄。
2.查看暗中认可字符集(暗中同意情状下,mysql的字符集是latin1(ISO_8859_1)
普通,查看系统的字符集和排序情势的设定能够透过上边包车型大巴两条命令:
      mysql> SHOW VARIABLES LIKE ‘character%’;
+————————–+———————————+
| Variable_name             | Value                            |
+————————–+———————————+
| character_set_client      | latin1                           |
| character_set_connection | latin1                           |
| character_set_database    | latin1                           |
| character_set_filesystem | binary                      |
| character_set_results     | latin1                           |
| character_set_server      | latin1                           |
| character_set_system     | utf8                             |
| character_sets_dir        | D:”mysql-5.0.37″share”charsets” |
+————————–+———————————+
mysql> SHOW VARIABLES LIKE ‘collation_%’;
+———————-+—————–+
| Variable_name         | Value            |
+———————-+—————–+
| collation_connection | utf8_general_ci |
| collation_database    | utf8_general_ci |
| collation_server      | utf8_general_ci |
+———————-+—————–+
3.修改暗中同意字符集
(1) 最轻便易行的修改章程,正是修改mysql的my.ini文件中的字符集键值,
如     default-character-set = utf8
       character_set_server = utf8
    修改完后,重启mysql的劳务,service mysql restart
    使用 mysql> SHOW VA君越IABLES LIKE
‘character%’;查看,开采数据库编码均已改成utf8
+————————–+———————————+
| 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        | D:”mysql-5.0.37″share”charsets” |
+————————–+———————————+
    (2) 还应该有风姿洒脱种修改字符集的点子,就是利用mysql的指令
    mysql> SET character_set_client = 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。

关于MySQL的国语标题

削株掘根乱码的主意是,在施行SQL语句在此以前,将MySQL以下多个系统参数设置为与服务器字符集character-set-server同样的字符集。
character_set_client:顾客端的字符集。
character_set_results:结果字符集。
character_set_connection:连接字符集。
安装那多个系统参数通过向MySQL发送语句:set names gb2312

关于GBK、GB2312、UTF8

UTF- 8:Unicode Transformation
Format-8bit,允许含BOM,但平日不含BOM。是用以减轻国际上字符的大器晚成种多字节编码,它对罗马尼亚语使用8位(即八个字节),汉语使用24为(八个字节)来编码。UTF-8包罗全球全数国家须要使用的字符,是国际编码,通用性强。UTF-8编码的文字能够在多个国家辅助UTF8字符集的浏览器上出示。如,如若是UTF8编码,则在外人的意国语IE上也能彰显中文,他们不需求下载IE的华语语言扶助包。

GBK是国标GB2312基础上扩大体量后卓越GB2312的科班。GBK的文字编码是用双字节来表示的,即无论中、俄文字符均使用双字节来代表,为了不一样中文,将其最高位都设定成1。GBK包涵全体华语字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。

GBK、GB2312等与UTF8之间都不能够不透过Unicode编码本事互相转变:
GBK、GB2312--Unicode--UTF8
UTF8--Unicode--GBK、GB2312

对此多少个网址、论坛来讲,假诺匈牙利(Magyarország)语字符很多,则建议利用UTF-8节省空间。但是以往众多论坛的插件平日只支持GBK。

GB2312是GBK的子集,GBK是GB18030的子集
GBK是回顾中国和扶桑韩字符的大字符集结
设借使中文的网址 推荐GB2312 GBK有的时候照旧多少难点
为了防止全数乱码难题,应该利用UTF-8,以往要扶助国际化也要命有利
UTF-8能够当做是大字符集,它饱含了大多文字的编码。
行使UTF-8的三个好处是其他地区的客商(如香港(Hong Kong)山西)无需安装简体粤语支持就会平常观察你的文字而不会并发乱码。

gb2312是简体汉语的码
gbk接济简体中文及繁体汉语
big5辅助繁体中文
utf-8扶植大致拥有字符

首先解析乱码的情景
1.写入数据库时作为乱码写入
2.询问结果以乱码再次回到
到底在发出乱码时是哪黄金年代种情景吗?
我们先在mysql 命令行下输入
show variables like ‘%char%’;
查阅mysql 字符集设置情形:

mysql> show variables like ‘%char%’;
+————————–+—————————————-+
| Variable_name            | Value                                  |
+————————–+—————————————-+
| character_set_client     | gbk                                   

| character_set_connection | gbk                                   

| character_set_database   | gbk                                   

| character_set_filesystem | binary                                

| character_set_results    | gbk                                   

| character_set_server     | gbk                                   

| character_set_system     | utf8                                  

| character_sets_dir       | /usr/local/mysql/share/mysql/charsets/

+————————–+—————————————-+

在询问结果中能够见到mysql
数据库系统中型地铁户端、数据库连接、数据库、文件系统、查询
结果、服务器、系统的字符集设置
在那处,文件系统字符集是牢固的,系统、服务器的字符集在装置时规定,与乱码难点非亲非故
乱码的难题与顾客端、数据库连接、数据库、查询结果的字符集设置有关
*注:客商端是看访问mysql
数据库的点子,通过命令行访问,命令行窗口正是客商端,通
过JDBC 等连续访谈,程序正是客商端
大家在向mysql
写入普通话数据时,在顾客端、数据库连接、写入数据库时分别要开展编码转

在实行查询时,在回来结果、数据库连接、客户端独家张开编码转换
明天大家应当明了,乱码产生在数据库、顾客端、查询结果以至数据库连接那中间一个或多
个环节
接下去大家来消除那么些标题
在报到数据库时,我们用mysql –default-character-set=字符集-u root -p
进行连接,那时大家
再用show variables like
‘%char%’;命令查看字符集设置景况,能够开掘客商端、数据库连接、
询问结果的字符集已经设置成登入时精选的字符集了
风姿罗曼蒂克经是曾经报到了,可以应用set names
字符集;命令来兑现上述功用,等同于上边包车型大巴指令:
set character_set_client = 字符集
set character_set_connection = 字符集
set character_set_results = 字符集

设若遇上上述命令无效时,也可应用旭日东升种最简单易行最绝望的法子:

一、Windows

1、中止MySQL服务
2、在MySQL的设置目录下找到my.ini,若无就把my-medium.ini复制为二个my.ini就可以
3、打开my.ini以后,在[client]和[mysqld]上边均增加default-character-set=utf8,保存并关闭
4、启动MySQL服务

要透顶化解编码难题,必得使

| character_set_client     | gbk                                   

| character_set_connection | gbk                                   

| character_set_database   | gbk                                   

| character_set_results    | gbk                                   

| character_set_server     | gbk                                   

| character_set_system     | utf8     

这么些编码相平等,都合併。

假假使透过JDBC 连接数据库,能够如此写UCR-VL:
URL=jdbc:mysql://localhost:3306/abs?useUnicode=true&characterEncoding=字符集
JSP 页面等极端也要设置相应的字符集
数据库的字符集能够修改mysql 的运转配置来内定字符集,也足以在create
database 时增进
default character set 字符集来强制安装database 的字符集
透过那样的设置,整个数据写入读出流程中都会师了字符集,就不会出现乱码了
干什么从命令行直接写入普通话不安装也不会出现乱码?
能够明显的是从命令行下,顾客端、数据库连接、查询结果的字符集设置未有变化
输入的中文经过后生可畏多级转码又折回开端的字符集,大家查见到的本来不是乱码
但那并不意味中文在数据Curry被科学作为普通话字符存款和储蓄
举个例子来讲,现在有二个utf8 编码数据库,顾客端连接使用GBK 编码,connection
使用默许
的ISO8859-1(也便是mysql
中的latin1),大家在客商端发送“中文”那一个字符串,客商端
将发送生机勃勃串GBK 格式的二进制码给connection 层,connection 层以ISO8859-1
格式将这段
二进制码发送给数据库,数据库将这段编码以utf8
格式存款和储蓄下来,我们将以此字段以utf8
格式读抽取来,鲜明是赢得乱码,也正是说汉语数据在写入数据库时是以乱码情势积累的,
在同四个顾客端举行询问操作时,做了黄金年代套和写入时反而的操作,错误的utf8
格式二进制
码又被调换到准确的GBK 码并不错展现出来。

Leave a Comment.