当前位置: 首页 > article >正文

MYSQL----------字符集

MySQL 字符集概述

  • 定义:字符集是一组字符的集合,每个字符都有一个唯一的编码,MySQL 中的字符集决定了如何存储和解释数据中的字符。它涉及到存储、检索和处理文本数据的方式,不同的字符集能够表示不同的语言和符号。
  • 重要性:选择合适的字符集对于确保数据的正确存储和显示至关重要,特别是在处理多语言环境时,避免出现乱码和数据丢失问题。

Unicode 简述

  • 概念:Unicode 是一种国际标准,旨在为世界上所有的字符提供一个唯一的标识符,无论语言或平台如何,都能保证字符的一致性。它涵盖了几乎所有的书写系统,包括各种语言、符号、表情符号等。
  • 编码方式:常见的 Unicode 编码有 UTF-8、UTF-16 和 UTF-32。UTF-8 是一种可变长度的编码,使用 1 到 4 个字节表示一个字符,对于英文字符使用 1 个字节,而对于更复杂的字符(如汉字)使用更多字节,因此在存储和传输上具有较高的效率。

汉字及一些常见字符集

  • GBK:主要用于表示简体中文和繁体中文,是中国大陆常用的字符集,它是双字节编码,能很好地表示中文汉字。
  • BIG5:主要用于表示繁体中文,在台湾、香港等地区使用较多,也是双字节编码。
  • UTF-8:作为 Unicode 的一种实现方式,支持全球各种语言,是最通用的字符集,适合多语言环境,是网络和软件开发中最常用的字符集之一。

怎样选择合适的字符集

  • 语言需求
    • 对于只处理英文数据,使用 latin1 可能足够,但对于多语言环境,尤其是涉及中文、日文、韩文等,建议使用 UTF-8
    • 如果是专门处理中文信息,在中国大陆可以考虑 GBK,在台湾或香港地区可以考虑 BIG5,但使用 UTF-8 可以避免不同中文编码之间的兼容性问题。
  • 存储效率
    • 对于英文文本占多数的情况,latin1 可能在存储上更节省空间,因为它是单字节编码。但对于多语言环境,UTF-8 的可变长度特性在整体存储效率上可能更优,因为它只对复杂字符使用更多字节。

MySQL 支持的字符集简介

  • ASCII:基本的字符集,主要包含英文字母、数字和一些基本符号,是单字节编码。
  • latin1:也称为 ISO-8859-1,支持部分欧洲语言,与 ASCII 兼容,可表示 256 个字符。
  • UTF-8:如前所述,支持全球各种语言,是目前最常用的字符集,具有良好的兼容性和存储效率。
  • UTF-16 和 UTF-32:也是 Unicode 的编码方式,但 UTF-16 使用 2 个或 4 个字节表示字符,UTF-32 使用固定的 4 个字节表示字符,通常在某些特定的应用场景下使用。

MySQL 字符集设置

  • 服务器字符集和校对规则
    • 服务器字符集决定了服务器的默认字符集和校对规则,可通过 my.cnf 配置文件设置,例如:
      [mysqld]
      character_set_server=utf8mb4
      collation_server=utf8mb4_unicode_ci
      
    • 其中 character_set_server 是服务器的字符集,collation_server 是校对规则,utf8mb4 是对 UTF-8 的扩展,能更好地支持补充字符,utf8mb4_unicode_ci 是一种不区分大小写的校对规则。
    • 也可以在服务器启动时使用命令行参数设置,如:
      mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
      
  • 数据库字符集和校对规则
    • 在创建数据库时,可以指定字符集和校对规则,例如:
      CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
      
    • 也可以修改数据库的字符集和校对规则:
      ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
      
  • 表字符集和校对规则
    • 创建表时指定字符集和校对规则:
      CREATE TABLE mytable (
          id INT,
          name VARCHAR(50)
      ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
      
    • 修改表的字符集和校对规则:
      ALTER TABLE mytable CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
      
  • 列字符集和校对规则
    • 创建列时指定字符集和校对规则:
      CREATE TABLE mytable (
          id INT,
          name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
      );
      
    • 修改列的字符集和校对规则:
      ALTER TABLE mytable MODIFY name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
      
  • 连接字符集和校对规则
    • 可以在连接时设置字符集,例如在客户端连接时:
      SET NAMES utf8mb4;
      
    • 或者在连接字符串中设置,如 jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8mb4(在 Java 的 JDBC 连接中)。
      在这里插入图片描述

字符集的修改步骤

  • 服务器级
    1. 编辑 my.cnf 文件,添加或修改 character_set_servercollation_server 的值。
    2. 重启 MySQL 服务器使配置生效。
  • 数据库级
    1. 使用 ALTER DATABASE 语句修改数据库的字符集和校对规则。
    2. 对于已有的表和数据,需要进一步检查和修改表和列的字符集,以确保一致性。
  • 表级
    1. 使用 ALTER TABLE 语句修改表的字符集和校对规则。
    2. 对于表中的列,可能需要使用 ALTER TABLE 语句修改列的字符集和校对规则,确保数据存储和显示正确。
  • 列级
    1. 使用 ALTER TABLE 语句修改列的字符集和校对规则,要注意数据的兼容性,避免数据丢失或乱码。

在修改字符集时,要考虑数据的兼容性和一致性,特别是对于已存储的数据,可能需要进行数据迁移或转换。同时,不同的字符集和校对规则会影响数据的排序、比较和搜索结果,因此要根据具体需求进行选择。例如,在对大小写不敏感的情况下,可以使用
_ci 结尾的校对规则(如 utf8mb4_unicode_ci),而在需要区分大小写的情况下,可以使用 _cs
结尾的校对规则。 总之,选择合适的字符集对于 MySQL
数据库的正常运行和数据处理至关重要,需要综合考虑语言需求、存储效率、兼容性等因素,并确保字符集在服务器、数据库、表、列和连接中的一致性,以避免出现乱码和数据处理问题。

在这里插入图片描述


http://www.kler.cn/a/467367.html

相关文章:

  • 权限掩码umask
  • 浅谈棋牌游戏开发流程七:反外挂与安全体系——守护游戏公平与玩家体验
  • Linux下编译安装PETSc
  • 实时高保真人脸编辑方法PersonaMagic,可根据肖像无缝生成新角色、风格或场景图像。
  • S7-200采集频率信号
  • 物体切割效果
  • 一文讲清楚HTTP常见的请求头和应用
  • opencv与halcon的差距及改进方法
  • 浅谈文本匹配
  • 深入Android架构(从线程到AIDL)_10 主线程(UI 线程)的角色
  • [Day 12]904.水果成篮
  • cpp编译链接等
  • Java 关键字【synchronized】
  • 智慧招商宣传系统(源码+文档+部署+讲解)
  • 香橙派安装 opencv 4.9.0
  • C++文件流 例题
  • 电子应用设计方案86:智能 AI背景墙系统设计
  • 激活函数概述及对比
  • 计算机网络 (24)网际控制报文协议ICMP
  • Excel导出功能:vue2+SpringBoot
  • 4.3 最短路径问题:Dijkstra、Floyd
  • tensorflow 内存错误
  • NS4866 500mA 多功能锂电池充放电管理IC
  • django vue3实现大文件分段续传(断点续传)
  • unity学习3:如何从github下载开源的unity项目
  • 数字0、字符‘0’、转义字符‘\0’、NULL有什么区别?