一文带你了解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日

相关文章

  • SVN报错:Error Updating changes:svn:E155037的解决方案

    针对这个问题,我可以如下详细讲解解决方案的完整攻略: 问题描述 首先,我们来看一下这个问题的具体描述:当我们在使用SVN(Subversion)进行代码管理、版本控制时,有时候在提交或更新代码时可能会遇到如下的错误提示: Error Updating changes: svn:E155037: Previous operation has not finis…

    database 2023年5月18日
    00
  • PHP结合Mysql数据库实现留言板功能

    以下是详细讲解“PHP结合Mysql数据库实现留言板功能”的完整攻略: 准备工作 安装PHP与Mysql数据库。 创建数据库及数据表。具体步骤如下: 在Mysql中先创建一个名为message_board的数据库。 创建一张名为message的数据表,包含以下字段: id:主键,自增长。 username:留言者姓名。 content:留言内容。 creat…

    database 2023年5月21日
    00
  • 在Linux系统安装MySql步骤截图详解

    下面是详细的攻略: 安装 MySql 前的准备 在安装 MySql 前,我们需要确保系统的软件仓库是最新的,以确保能够获得最新的 MySql 软件包,可以使用以下命令来更新软件仓库: sudo apt update 接着,使用以下命令来安装 MySql 服务器: sudo apt install mysql-server 在安装 MySql 服务器的过程中,…

    database 2023年5月22日
    00
  • 学习 C++能带给我们什么

    学习C++能够带给我们很多的技能和知识,下面我详细讲解一下学习C++的完整攻略,包括以下几个方面的内容: 一、什么是C++? C++是一种通用的、静态的、编译式的、跨平台的计算机程序设计语言。C++中包含了C语言的所有特性,加上了类和模板的特性,使得C++能够更好地进行面向对象的编程和泛型编程。C++被广泛地应用在操作系统、游戏开发、应用软件、嵌入式系统、大…

    database 2023年5月22日
    00
  • Node.js操作MongoDB数据库实例分析

    Node.js 操作 MongoDB 数据库实例分析 本文是 Node.js 操作 MongoDB 数据库实例的完整攻略,将涵盖以下内容: MongoDB简介 Node.js操作MongoDB数据库实例说明 示例说明 总结 MongoDB简介 MongoDB是一个免费、开源、跨平台的NoSQL数据库,旨在优化可伸缩性和开发者生产力。MongoDB将数据存储在…

    database 2023年5月22日
    00
  • seata-1.4.0安装及在springcloud中使用详解

    seata-1.4.0安装及在springcloud中使用详解 Seata是一款分布式事务解决方案,提供了对Spring Cloud、Dubbo等微服务框架的支持。本篇攻略将详细讲解Seata-1.4.0的安装及在Spring Cloud中的使用方法。 安装Seata-1.4.0 下载Seata-1.4.0 可以从官网 http://seata.io/zh-…

    database 2023年5月21日
    00
  • Centos搭建图形化界面VNC的方法

    下面是“Centos搭建图形化界面VNC的方法”的完整攻略。 1. 安装VNC服务 VNC是一种远程控制计算机桌面的协议。在Linux系统上,我们可以通过安装VNC服务来实现远程访问图形化界面。我们可以使用yum命令来安装VNC服务。 sudo yum install tigervnc-server 2. 配置VNC服务 安装完成VNC服务后,需要进行VNC…

    database 2023年5月22日
    00
  • python: linux下安装redis

    Python连接时报拒绝连接,需要重装redis: 1) 卸载redis sudo apt-get remove redis-server sudo apt-get autoremove 2)编译安装redis wget http://download.redis.io/releases/redis-3.0.2.tar.gz tar -xvf redis-3…

    Redis 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部