热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL字符集都有哪些

今天就跟大家聊聊有关MySQL字符集都有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所

今天就跟大家聊聊有关MySQL字符集都有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1. 字符集基础

先了解下MySQL字符集都有哪些地方使用,进入数据库VARIABLES参数一目了然:

mysql> SHOW VARIABLES  WHERE variable_name LIKE '%character%'  OR  variable_name  LIKE '%collation%'  ; +-------------------------------+--------------------------------------+ | 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            | /opt/idc/mysql8.0.23/share/charsets/ | | collation_connection          | utf8mb4_bin                          | | collation_database            | utf8mb4_bin                          | | collation_server              | utf8mb4_bin                          | | default_collation_for_utf8mb4 | utf8mb4_0900_ai_ci                   | +-------------------------------+--------------------------------------+

从上面client,connection,database,results层层环节扣着,任何一个环节的字符集不兼容都会出现乱码问题。

MySQL8.0 utf8mb4 Unicode字符集一个新的通用排序归类,被命名为utf8mb4_0900_ai_ci。MySQL  8.0默认的是utf8mb4_0900_ai_ci,属于 utf8mb4_unicode_ci中的一种。

这些字段每个意义,代表着什么含义:

  • uft8mb4 表示用 UTF-8 编码方案,每个字符最多占4个字节。

  • utf8mb3也是Unicode字符集的UTF-8编码,每个字符使用一到三个字节。(utf8: utf8mb3的别名)

  • 0900 就是Unicode 校对算法版本。(Unicode归类算法是用于比较符合Unicode标准要求的两个Unicode字符串的方法)。

  • ai指的是口音不敏感。也就是说,排序时e,è,é,ê和ë之间没有区别,不区分重音。

  • ci表示不区分大小写。排序时p和P之间没有区别。

再了解一下一些场景下 utf8 和 utf8mb4 的问题点:

utf8编码最多支持3字节的数据,而emoji表情符, 偏生字是4个字节的utf8无法存储的,致辞延伸出utf8mb4字符集解决这个问题。

日常常用的字符集:

  • utf8mb4_bin:将字符串每个字符用二进制数据编译存储,区分大小写,而且可以存二进制的内

  • utf8mb4_general_ci:ci即case  insensitive,不区分大小写。没有实现Unicode排序规则,在遇到某些特殊语言或字符集,排序结果可能不一致。但在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。

utf8mb4_unicode_ci:是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。

2. 字符集配置

mysql字符集如何设置,更改操作:

1)my.cnf配置文件信息,建议初始化时就设置好。

[mysqld]

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci

character-set-client-handshake = FALSE #此处是忽略客户端的字符集,使用服务器的设置

2)init_cOnnect=‘SET NAMES utf8mb4’ #服务器为每个连接的客户端执行的字符串,对于一些超级管理源就不生效的

3)字符集变更,包含库,表,column的变更。都可以完全的拥有自己的字符集。

##更改DATABASE  ALTER DATABASE `db1` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci   ##更改TABLE  ALTER TABLE `t1` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci   ##更改column字段  ALTER TABLE `t1`  modify `name` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '昵称';

4)日常字符集检查工作:

SELECT b.SCHEMA_NAME, b.DEFAULT_CHARACTER_SET_NAME, b.DEFAULT_COLLATION_NAME ,a.TABLE_NAME, a.TABLE_COLLATION  FROM  information_schema.SCHEMATA b   left join information_schema.TABLES   a  on  b.SCHEMA_NAME =a. TABLE_SCHEMA  WHERE  b.SCHEMA_NAME not in ('information_schema' ,'mysql','performance_schema', 'sys')  ORDER BY TABLE_SCHEMA,TABLE_NAME ;

通过多方便设置,更改操作,检查。字符集不再是隐藏问题。

3. 字符集对于数据库的影响

字符集对整个数据库影响面还是比较可观的。库更改 对于原先存在的表字段 都不影响 依次类推。所以数据库>表>字段 都可以单独设置字符集。

常见问题1:有索引 没有走 因为进行了 字符集隐式转换

MySQL字符集都有哪些

常见问题2:在尾随空格方面不同

字符串值(CHAR、VARCHAR和TEXT)的比较与其他排序规则在尾随空格方面不同。For example, ‘a’ and 'a ’  作为不同的字符串比较,而不是相同的字符串。

MySQL字符集都有哪些

对于字符集排序来说,字符串末尾的空格也有对应的处理。

mysql> SELECT COLLATION_NAME, PAD_ATTRIBUTE  FROM INFORMATION_SCHEMA.COLLATIONS   WHERE CHARACTER_SET_NAME = 'utf8mb4'; +----------------------------+---------------+ | COLLATION_NAME             | PAD_ATTRIBUTE | +----------------------------+---------------+ | utf8mb4_general_ci         | PAD SPACE     | | utf8mb4_bin                | PAD SPACE     | | utf8mb4_unicode_ci         | PAD SPACE     | | utf8mb4_icelandic_ci       | PAD SPACE     | | utf8mb4_latvian_ci         | PAD SPACE     | | ......... | utf8mb4_0900_ai_ci         | NO PAD        | | utf8mb4_de_pb_0900_ai_ci   | NO PAD        | | utf8mb4_0900_bin           | NO PAD        | +----------------------------+---------------+

注意:在选择使用utf8mb4_0900 字符集之后空格 就需要处理。

常见问题3:对于数据的大小写敏感

除了lower_case_table_names之外,怎样有效使用大小写字符集设置,采用ut8mb4_bin字符集 既可,查询和数据插入解决。

MySQL字符集都有哪些

常见问题4:表情符,偏生字

常见错误代码:1366 Incorrect string value: ‘\xF0\x9F\x99\x82’ for column ‘name’ at  row 2

指定Utf8mb4字符集,再配合character-set-client-handshake属性

MySQL字符集都有哪些

备注:对于jdbc来说没有utf8mb4这样的字符集说法。

看完上述内容,你们对MySQL字符集都有哪些有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程笔记行业资讯频道,感谢大家的支持。


推荐阅读
  • 本文介绍了如何在 Spring Boot 项目中使用 spring-boot-starter-quartz 组件实现定时任务,并将 cron 表达式存储在数据库中,以便动态调整任务执行频率。 ... [详细]
  • 解决网页乱码问题的实用方法
    网页乱码问题在开发中较为常见,主要由文件编码、程序字符集设置和数据库连接字符集设置不当引起。本文将详细介绍如何逐一排查并解决这些问题。 ... [详细]
  • 在运行于MS SQL Server 2005的.NET 2.0 Web应用中,我偶尔会遇到令人头疼的SQL死锁问题。过去,我们主要通过调整查询来解决这些问题,但这既耗时又不可靠。我希望能找到一种确定性的查询模式,确保从设计上彻底避免SQL死锁。 ... [详细]
  • 作为一名新手开发者,我正在尝试使用 ASP.NET 和 Vue.js 构建一个单页面应用,涉及多个复杂组件(如按钮、图表等)。希望有经验的开发者能够提供指导。 ... [详细]
  • 本文介绍了 Oracle SQL 中的集合运算、子查询、数据处理、表的创建与管理等内容。包括查询部门号为10和20的员工信息、使用集合运算、子查询的注意事项、数据插入与删除、表的创建与修改等。 ... [详细]
  • 开发笔记:前端之前端初识
    开发笔记:前端之前端初识 ... [详细]
  • 申请地址:https://developer.apple.com/appstore/contact/?topic=expedite 常见申请理由:1. 我们即将发布新产品,这是一个媒体活动,我们无法承担任何风险,因此在多个方面努力提升应用质量。 ... [详细]
  • MySQL 5.7 服务端在 Windows 上的安装与配置
    本文详细介绍了在 Windows 系统上安装和配置 MySQL 5.7 服务端的方法,包括 my.ini 配置文件的设置、初始化数据库、启动服务以及设置用户权限等步骤。 ... [详细]
  • 图数据库与传统数仓实现联邦查询使用CYPHER实现从关系数据库过滤时间序列指标一、MySQL得到研报实体在Oracle中的唯一ID二、Oracle中过滤时间序列数据三、CYPHER ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 在尝试将 mysqldump 文件加载到新的 MySQL 服务器时,遇到因使用保留关键字 'table' 导致的语法错误。 ... [详细]
  • iOS snow animation
    CTSnowAnimationView.hCTMyCtripCreatedbyalexon1614.Copyright©2016年ctrip.Allrightsreserved.# ... [详细]
  • Nacos 0.3 数据持久化详解与实践
    本文详细介绍了如何将 Nacos 0.3 的数据持久化到 MySQL 数据库,并提供了具体的步骤和注意事项。 ... [详细]
  • 本文详细介绍了 Spark 中的弹性分布式数据集(RDD)及其常见的操作方法,包括 union、intersection、cartesian、subtract、join、cogroup 等转换操作,以及 count、collect、reduce、take、foreach、first、saveAsTextFile 等行动操作。 ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
author-avatar
唯心-C_436
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有