一文带你了解MySQL字符集和比较规则

一文带你了解MySQL字符集和比较规则

什么是字符集

数据在被存储到数据库中时,要被转换成计算机能够识别的二进制编码。而字符集就是将字符映射为二进制编码的规则集合。MySQL支持多种字符集,如utf8、gbk等。

字符集的作用

字符集决定了数据在存储和传输过程中的编码方式,它直接影响到存储和查询的结果。如果字符集设置不正确,可能会导致数据被储存为乱码或者无法正确匹配查询条件,而且还会影响系统性能。

MySQL字符集的种类

MySQL支持多种字符集,我们常用的如下:

  • utf8mb4:MySQL5.5.3及以后版本,用于支持四字节存储的字符集,包含了几乎所有的字符。
  • utf8:MySQL5.5.3之前版本的默认字符集,只支持三字节存储,不能存储一些特殊字符,如草书、楷书等。
  • gbk:支持简体中文字符的字符集。

比较规则

比较规则用于指定比较字符串时的规则。常用的比较规则如下:

  • utf8_general_ci: utf8字符集,不区分大小写。
  • utf8_bin: utf8字符集,区分大小写。

当进行字符比较时,如果使用的字符集和比较规则不同,会导致查询结果不符合预期。

示例1:不同字符集导致乱码

创建一个students表:

CREATE TABLE students (
  id INT(11) NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

向students表中插入一条带有中文的数据:

INSERT INTO students (name) VALUES ('张三');

当使用gbk字符集进行查询时,会出现乱码:

SELECT * FROM students WHERE name='张三' COLLATE gbk_chinese_ci;

应该使用utf8mb4字符集进行查询:

SELECT * FROM students WHERE name='张三' COLLATE utf8mb4_chinese_ci;

示例2:使用不同的比较规则

创建一个persons表:

CREATE TABLE persons (
  id INT(11) NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

插入一条数据:

INSERT INTO persons (name) VALUES ('Tom');

当使用utf8_general_ci进行查询时,可以匹配到:

SELECT * FROM persons WHERE name='tom';

但是如果使用utf8_bin进行查询,就无法匹配到了:

SELECT * FROM persons WHERE name='tom' COLLATE utf8_bin;

总结

在使用MySQL时,字符集和比较规则的设置非常重要,能够影响到数据的存储、查询、传输等方面,务必慎重设置。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文带你了解MySQL字符集和比较规则 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Docker中部署mysql服务的方法及遇到的坑

    下面为你介绍在Docker中部署mysql服务的方法及遇到的坑的完整攻略。 1. Docker中部署mysql服务的方法 1.1 Docker安装 如果你还没有安装Docker,可以参考Docker官网的指引进行安装:Get started with Docker 1.2 获取MySQL的镜像 可以通过Docker Hub获取MySQL的官方镜像,使用以下命…

    database 2023年5月18日
    00
  • Oracle 自定义split 函数实例详解

    Oracle 自定义split 函数实例详解 在 Oracle 中,没有内置的字符串分割函数,因此需要使用自定义的函数来实现字符串分割操作。本文将详细讲解如何自定义 Oracle 的 split 函数,并提供两个示例说明。 函数代码 create or replace function split(p_str varchar2, p_sep varchar2…

    database 2023年5月21日
    00
  • Oracle数据创建虚拟列和复合触发器的方法

    下面是详细讲解“Oracle数据创建虚拟列和复合触发器的方法”的完整攻略。 创建虚拟列 确定需要创建虚拟列的表,并确认虚拟列的计算公式。 使用 ALTER TABLE 语句添加虚拟列,语法如下: sql ALTER TABLE table_name ADD (column_name data_type [GENERATED ALWAYS] AS (expre…

    database 2023年5月21日
    00
  • mysql-8.0.19-winx64 安装

    一、首先需要到官方mysql中下载最新版mysql          解压到指定目录如:D:\WinInstall\mysql-8.0.19-winx64 这时候你需要在根目录下创建两个文件,分别是data文件夹和my.ini文件,然后使用编辑器编辑my.ini文件,并在其中添加   mysqld] # 设置3306端口 port=3306 # 设置mysq…

    MySQL 2023年4月12日
    00
  • Aqua Data Studio 18汉化安装破解教程(附DateStopper破解下载)

    Aqua Data Studio 18汉化安装破解教程 在本教程中,我们将会提供一步一步的指导,来帮助您安装和破解Aqua Data Studio 18,以及安装汉化补丁。我们同样会为您提供一个DateStopper破解下载链接。 步骤一:下载Aqua Data Studio 18的安装程序 在进行本教程之前,需要您先准备好Aqua Data Studio …

    database 2023年5月22日
    00
  • ehcache memcache redis 区别

    之前用过redis 和 memcache ,没有ehcache 的开发经验,最近也查阅不少文档和博客,写一些总结,也有不少内容总结与诸多博客中的博主总结:  Ehcache EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider,所以被用于大型复杂分布式web application的各…

    Redis 2023年4月12日
    00
  • 教你使用Psycopg2连接openGauss的方法

    下面是“教你使用Psycopg2连接openGauss的方法”的完整攻略。 Psycopg2和openGauss简介 Psycopg2是一个Python数据库连接库,专门用于连接PostgreSQL数据库。openGauss是一款开源的高性能数据库,与PostgreSQL基本兼容,因此也可以使用Psycopg2连接openGauss数据库。 安装Psycop…

    database 2023年5月18日
    00
  • MySQL操作符(and、or、in、not)的具体使用

    MySQL操作符是用于查询数据时,根据指定的条件进行筛选和过滤数据的关键字。常用的操作符有 and、or、in、not等。在使用操作符时,需注意使用正确的语法和逻辑,才能准确地查询到所需要的数据。 AND操作符 AND操作符用于筛选同时符合多项条件的数据。其语法如下: SELECT column_name(s) FROM table_name WHERE c…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部