1、数据库中有关编码格式的配置

查看数据库有关编码格式的配置

mysql> show variables like 'char%';

+--------------------------+----------------------------------+

| Variable_name | Value |

+--------------------------+----------------------------------+

| character_set_client | utf8mb4 |

| character_set_connection | utf8mb4 |

| character_set_database | utf8mb4 |

| character_set_filesystem | binary |

| character_set_results | utf8mb4 |

| character_set_server | utf8mb4 |

| character_set_system | utf8 |

| character_sets_dir | /paic/mysql/base/share/charsets/ |

+--------------------------+----------------------------------+

可以看到一共8个变量:

character_set_client

主要用来设置客户端使用的字符集。

character_set_connection

主要用来设置连接数据库时的字符集,如果程序中没有指明连接数据库使用的字符集类型则按照这个字符集设置。

character_set_database

主要用来设置默认创建数据库的编码格式,如果在创建数据库时没有设置编码格式,就按照这个格式设置。

character_set_filesystem

文件系统的编码格式,把操作系统上的文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的。

character_set_results

数据库给客户端返回时使用的编码格式,如果没有指明,使用服务器默认的编码格式。

character_set_server

服务器安装时指定的默认编码格式,这个变量建议由系统自己管理,不要人为定义。

character_set_system

数据库系统使用的编码格式,这个值一直是utf8,不需要设置,它是为存储系统元数据的编码格式。

character_sets_dir

这个变量是字符集安装的目录。

2、客户端设置

其中 character_set_client、character_set_connection 以及 character_set_results 三个变量是客户端每次连接数据库时想要的字符编码,和服务端没有关系。登录mysql后,执行 set names gbk; 实际上就是同时修改的这三个参数。

修改上边三个变量登录mysql设置:

mysql> set names latin1;

查看变化

mysql> show variables like 'char%';

+--------------------------+----------------------------------+

| Variable_name | Value |

+--------------------------+----------------------------------+

| character_set_client | latin1 |

| character_set_connection | latin1 |

| character_set_database | utf8mb4 |

| character_set_filesystem | binary |

| character_set_results | latin1 |

| character_set_server | utf8mb4 |

| character_set_system | utf8 |

| character_sets_dir | /paic/mysql/base/share/charsets/ |

+--------------------------+----------------------------------+

也可以修改配置文件,在 [mysql] 段添加:

default-character-set=latin1

3、服务端设置

character_set_database 是单个数据库级别的 字符集设置,该参数允许不同的 database 使用不同的字符集。

比如:

create database test1 character set utf8mb4 collate utf8mb4_bin;

这个语句创建了数据库 test1 ,同时设置了该库的 character 和 collate 参数。

character_set_server 设置的是 server 级别的也就是配置文件中 [mysqld] 段的字符集,同一个 mysqld 的配置,所有字符存储时使用相同的字符集。

字符集默认是 lantin1,通常的配置还有 utf8、utf8_bin、gbk 等。

character_set_server 通常和 collation_server (也就是排序规则)一同配置。

排序规则 collation_server 的参数通常有 utf8mb4_bin、utf8mb4_general_ci、utf8_bin、utf8_general_ci。

ci 代表 casesensitive ignore 排序时不考虑大小写;_bin 结尾的排序时考虑大小写。

4、编码格式

latin1:mysql默认的编码格式,是单字节编码,所以因为字节的原因,有些国家的语言不能使用 latin1 显示。

gbk:GBK是国家标准,包含全部中文字符,不论中英文都采用双字节编码。如果数据库大量存储汉字,对性能要求高,就应该选择 GBK 编码方式。因为存储汉字的话,GBK每个汉字只占用2个字节,UTF8 汉字编码需要3个字节,GBK 比 UTF8 所占空间小,还可以减少磁盘I/O,数据库cache,以及网络传输时间(现在可忽略不计)从而提高性能。

GBK是定长字符集,UTF8 是变长字符集,如果数据库需要做大量的字符运算、比较、排序等等,选择定长字符集会更好,因为定长字符集处理速度要比变长字符集处理速度快。

utf8: UTF8 是 Unicode 字符集,是 UTF16 改良版本,1至4字节编码规范。国际流行通用使用此编码,如果你的网站是多国语言就首选这个字符集。

如果数据库主要处理英文,则建议采用 UTF-8,因为GBK对英文字符编码也采用2个字节,而 UTF8 只需要一个字节。

如果客户有外国的,建议用UTF8,因为国外客户访问GBK的页面要下载语言包,访问 UTF-8 编码的网页则不出现这问题,UTF-8编码的文字可以在各国各种支持UTF8字符集的浏览器上显示。

utf8mb4:MySQL在5.5.3之后增加了这个 utf8mb4 的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的 unicode。好在utf8mb4是utf8的超集,除了将编码改为 utf8mb4 外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。

因为 utf8 编码最大字符长度为3字节,如果遇到4字节的宽字符就会插入异常了。例如Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等。

为了获取更好的兼容性,应该总是使用 utf8mb4 而非 utf8。 对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql 官方建议,使用 VARCHAR 替代 CHAR。

5、举例

下面举个 mysql 的字符集配置案例:

vi /etc/my.cnf

[client] 中添加

default-character-set = utf8mb4

[mysqld] 中修改

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci

init_connect='SET NAMES utf8mb4'

character-set-client-handshake = FALSE

[mysql] 中添加

default-character-set = utf8mb4

[client] 代表客户端默认设置内容

[mysql] 代表我们使用mysql命令登录mysql数据库时的默认设置

[mysqld] 代表数据库自身的默认设置

6、出现乱码分析

编码格式如果要设置为UTF8

6.1、检查服务器端(也就是 [mysqld] 段)配置是否为 UTF8。

6.2、检查客户端(也就是 [client] 和 [mysql] 段)配置是否为 UTF8。

6.3、检查ssh工具(例如 SecureCRT )会话选项的配置是否为 UTF8。

6.4、检查linux系统默认编码格式是否为UTF8

参考:

https://www.cnblogs.com/digdeep/p/5228199.html

https://blog.csdn.net/sun8112133/article/details/79921734

https://www.cnblogs.com/beyang/p/7580814.html

https://www.cnblogs.com/zeroingToOne/p/9536888.html

https://www.cnblogs.com/shihaiming/p/5855616.html

mysql代表单个字符_mysql字符编码以及字符序相关推荐

  1. mySQL字符串字段区别_MySQL类型之(字符串列类型区分、数据类型区分)

    1.首先CHAR, VARCHAR, TEXT和BINARY, VARBINARY, BLOB的区别: CHAR, VARCHAR, TEXT称为:      非二进制字符串; BINARY, VAR ...

  2. mysql修改界面代码_mysql修改编码

    在[mysqld]下的 port的下一行写入character-set-server=utf8  也可以设置成其他类型的字符编码,把utf8换成gbk等 一.编辑MySql的配置文件 MySql的配置 ...

  3. mysql 导入单个表_MySQL 备份恢复(导入导出)单个 innodb表

    MySQL 备份恢复单个innodb表呢,对于这种恢复我们我们很多朋友都不怎么了解了,下面一起来看一篇关于MySQL 备份恢复单个innodb表的教程 在实际环境中,时不时需要备份恢复单个或多个表(注 ...

  4. java 字符流 utf8,JAVA基础(字符流设置编码读写字符)

    1,使用指定的码表读写字符 FileReader是使用默认码表读取文件, 如果需要使用指定码表读取, 那么可以使用InputStreamReader(字节流,编码表) FileWriter是使用默认码 ...

  5. mysql排序规则查看_MySQL 查看编码 排序规则

    mysql show variables Variable_name Value collation_connection utf8_general_ci collation_database utf ...

  6. java备份mysql的单个表_MySQL 使用java备份某张表的操作

    核心是mysqldump和Runtime 操作其实并不是很困难,创建一个进行备份操作的类,接收到备份调用后,标记该表正在备份,然后创建一个子线程进行备份操作.所需的配置信息是从配置文件读取的,也要注意 ...

  7. MySQL set names 命令_mysql set names 命令和 mysql 字符编码问题

    先看下面的执行结果: (root@localhost)[(none)]mysql>show variables like 'character%';+---------------------- ...

  8. mysql修改客户端编码命令_mysql命令行修改字符编码

    1.修改数据库字符编码 mysql> alter database mydb character set utf8 ; 2.创建数据库时,指定数据库的字符编码 mysql> create ...

  9. mysql gbk编码 字节数_MySql中UTF8和GBK编码中文字符长度问题

    2.设计函数,输入为一个字符串,里边包含中文.英文.数字等字符,编码为GBK.中文字符的编码规则假定为:双字节组成,高字节大于0x80,低字节任意.     a) 用常用语言(c/c++/php/ja ...

最新文章

  1. 《2021全球脑科学发展报告》发布
  2. Codeforces 1209D Cow and Snacks
  3. 物联卡的使用_物联卡在手机上使用有什么影响?网友:寿命分别是3个月,16天,9天...
  4. Emlog5.31后台登录页面自适应源码
  5. 美团最好战的那个男人要走了
  6. Python版冒泡法排序算法
  7. 最强JAVA核心技术群
  8. php 关闭 ob缓存,php ob缓存主要函数
  9. 今天给一份 2022 互联网就业指南。
  10. RTL8187L usb驱动编译
  11. 【HUST】网安|编译原理实验|实验四攻略
  12. 如何更改计算机时间和日期,如何更改电脑日期?电脑教程:然后修改
  13. OpenCV3.1.0安装在ubuntu16.40(Linux)步骤(电赛AM5708板子可用)
  14. linux命令行大于号、小于号、双大于号、双小于号
  15. 分数计算机在线应用,在线连分数计算器
  16. 简单提取iOS13的ipsw固件的内置壁纸(或文件)
  17. 怎么对document.write写出来的内容调整对齐方式_【求职技巧】给少数人:硅谷BAT级别的简历这么写...
  18. php出现网页无法运作怎么处理,该网页无法正常运作怎么解决?
  19. java程序license验证_基于TrueLicense实现产品License验证功能
  20. 拿到别人提供的虚拟机需要做的几件事情

热门文章

  1. vivado烧写FPGA速度调节
  2. python3.5安装教程linux_linux安装python3.5
  3. c++如何输入数组_从一个数组中找出 N 个数,其和为 M 的所有可能最 nice 的解法...
  4. ai背景合成_AI设计制作万圣节夜景插画
  5. 关于用串口IDLE中断,DMA_GetCurrDataCounter()函数值不变的问题
  6. 10G_Ethernet_01 万兆以太网设计引言
  7. matlab组织的培训讲义,matlab培训讲义.doc
  8. python在mac上_在Mac上Python多版本切换
  9. 非文学翻译理论与实践_北外“欧洲非通用语文学翻译与研究中心”正式成立
  10. python爬虫怎么挣钱_python爬虫19 | 爬虫遇到需要的登录的网站怎么办?用这3招轻松搞定!...