MySQL 编码utf8 与 utf8mb4 utf8mb4_unicode_ci 与 utf8mb4_general_ci

yizhihongxing

MySQL是一个关系型数据库,支持多种字符编码。其中,UTF-8是目前最为常用的字符编码方式之一,但UTF-8也有多种可选的扩展,如utf8mb4,utf8mb4_unicode_ci,以及utf8mb4_general_ci。在使用时需要注意它们之间的区别。

UTF-8 和 UTF-8mb4

UTF-8是Unicode的一种编码方式,适用于1-3个字节的字符编码,但是,UTF-8无法支持4个字节的字符编码,这就导致了它无法存储一些Emoji表情等特殊字符。因此,MySQL提供了一种扩展的字符编码方式:utf8mb4。该编码方式支持4个字节的字符编码,能够存储绝大部分字符。

utf8mb4_general_ci 和 utf8mb4_unicode_ci

在MySQL中,utf8mb4编码方式有两种排序规则:utf8mb4_general_ci和utf8mb4_unicode_ci。这两种排序规则主要区别在于对一些字符的处理方式不同。

utf8mb4_general_ci基于Unicode规则进行排序,但它会忽略字符集的一些细节,比如不区分大小写,不区分一些特殊字符等,它在一定情况下对排序有着较好的性能。utf8mb4_unicode_ci基于Unicode Collation Algorithm来排序,处理方式比utf8mb4_general_ci更加精细,它能够区分不同的大小写,以及一些特殊字符。但由于它需要较多的计算,因此性能不如utf8mb4_general_ci。

配置MySQL使用utf8mb4

以下是配置MySQL使用utf8mb4编码方式的详细过程。

1. 修改MySQL配置文件

需要修改MySQL的配置文件my.cnf(也可能是/etc/mysql/mysql.conf.d/mysqld.cnf)。在该配置文件中找到[mysqld]项,加入以下三行代码:

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-character-set-client-handshake

请注意:该配置是将服务端的默认字符集和排序规则改为utf8mb4和utf8mb4_unicode_ci。但该配置无法修改已有的数据库和表的编码方式,需要进一步修改。

2. 修改已有数据库和表

MySQL中,修改已有的数据库和表的编码方式需要三步:

  1. 重命名要更改编码方式的表或数据库,可以使用ALTER TABLE或RENAME DATABASE语句完成。
  2. 使用CREATE TABLE或CREATE DATABASE语句创建新的表或数据库,其编码方式为utf8mb4。
  3. 将旧表中的数据拷贝至新表中,可以使用INSERT INTO或SELECT INTO语句完成。

下面是两个示例,说明如何配置和使用utf8mb4编码方式

示例1:创建新表使用utf8mb4编码

CREATE TABLE `mytable` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;

该示例代码创建了一个名为Mytable的表,该表的字符编码方式为utf8mb4,排序规则为utf8mb4_general_ci。该表包含三个字段:id,name和content。其中name和content的字符集均为utf8mb4,排序规则为utf8mb4_general_ci。

示例2:修改已有的数据库编码方式

假设有一个数据库名为mydb,已有一个名为Mytable的表,需要将该数据库的字符编码方式改为utf8mb4。按照上述三步操作,依次执行以下代码即可完成:

RENAME DATABASE mydb TO mydb_old;
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE mydb;
CREATE TABLE `Mytable` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
INSERT INTO mydb.`Mytable` SELECT * FROM mydb_old.`Mytable`;

这段代码在修改已有的数据库时,首先将该数据库重命名为mydb_old,然后创建一个新的mydb数据库,该数据库的字符编码方式为utf8mb4,排序规则为utf8mb4_general_ci。随后在新的数据库mydb中创建了一个名为Mytable的表,并将旧表中的数据拷贝至新表中。

以上就是关于MySQL编码utf8、utf8mb4、utf8mb4_general_ci和utf8mb4_unicode_ci的介绍和完整攻略了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL 编码utf8 与 utf8mb4 utf8mb4_unicode_ci 与 utf8mb4_general_ci - Python技术站

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

相关文章

  • 解析SQL Server中SQL日期转换出错的原因

    解析SQL Server中SQL日期转换出错的原因 在SQL Server中,我们使用日期转换函数将一个字符串类型的日期转换为日期类型,但是在使用过程中,常常会因为一些列原因导致日期转换出现错误。本文将全面介绍常见的日期转换出错的原因,为大家提供一些解决方案。 使用CAST或CONVERT函数 在SQL Server中,我们通常使用如下的格式将字符串转换为日…

    database 2023年5月21日
    00
  • 64位CentOs7源码安装mysql-5.6.35过程分享

    64位CentOS7源码安装MySQL-5.6.35过程分享 环境准备 首先需要安装一些必要的软件,包括C++编译器、make工具、cmake等,以及MySQL所需要的一些依赖库。 示例命令: yum groupinstall "Development Tools" yum install cmake yum install ncurse…

    database 2023年5月22日
    00
  • linux mysql 安装与操作

    下面是“Linux MySQL安装与操作”的完整攻略。 安装MySQL 在Linux上安装MySQL有多种方式,例如使用官方的二进制安装包、使用Linux发行版的包管理工具(如yum、apt-get等)进行安装等。 这里我们选择使用yum进行安装,具体步骤如下: 更新yum源:执行命令sudo yum update 安装MySQL:执行命令sudo yum …

    database 2023年5月22日
    00
  • SQL Server 比较日期大小的方法

    当我们需要在SQL Server中比较日期大小时,可以使用以下方法: 使用比较运算符(比如 “<“, “>”, “<=”, “>=”)比较日期。需要注意的是,在比较之前,我们需要将日期转换为合适的日期格式。下面是一个示例: SELECT * FROM MyTable WHERE CONVERT(VARCHAR(10), MyDateC…

    database 2023年5月21日
    00
  • SQL Server中带有OUTPUT子句的INSERT,DELETE,UPDATE应用

    下面是详细讲解SQL Server中带有OUTPUT子句的INSERT、DELETE、UPDATE应用的完整攻略。 什么是OUTPUT子句 OUTPUT子句是一个可选的语法元素,可以在执行INSERT、DELETE、UPDATE语句时使用。它允许返回与操作相关的数据作为结果集或将数据插入到表或表变量中。OUTPUT子句对于与数据源交互的应用程序和查询很有用。…

    database 2023年5月21日
    00
  • Navicat for MySQL 11注册码\激活码汇总

    Navicat for MySQL 11注册码\激活码攻略 Navicat for MySQL是一款功能丰富的数据库管理工具,但是它需要购买正版才能完整体验。对于没有购买的用户,可以通过搜集和使用注册码或激活码的方式进行激活。以下是搜集Navicat for MySQL 11注册码\激活码的攻略。 1. 寻找可靠的注册码\激活码来源网站 许多网站声称提供Na…

    database 2023年5月22日
    00
  • MySQL中explain语句的基本使用教程

    当我们在MySQL执行一条SQL语句的时候,可能会遇到很多问题。这时候我们可以使用EXPLAIN语句来分析我们的SQL语句在执行过程中的各种情况,帮助我们更好地理解SQL执行过程以及优化SQL效率。 什么是EXPLAIN语句 EXPLAIN语句是MySQL提供的一种工具,可以输出一个SQL语句在执行过程中所使用的索引、表的读取顺序、过滤条件以及 joins(…

    database 2023年5月22日
    00
  • MongoDB分片方法详解

    MongoDB分片是让我们能够将数据分散存储在多个服务器上,达到数据水平扩展能力的一种方案。今天我们就来一步步详解MongoDB分片的完整攻略。 前置条件 在使用MongoDB分片之前,需要先明确以下几个前置条件: 需要有三个节点的MongoDB副本集。 所有节点的MongoDB版本必须相同。 所有节点的时间必须同步。 所有节点的存储引擎必须相同。 所有节点…

    MongoDB 2023年3月14日
    00
合作推广
合作推广
分享本页
返回顶部