MySQL UTF-8: General? Bin? Unicode?

MySQL UTF-8: General? Bin? Unicode?

在MySQL中,我们经常需要设置字符编码来正确地储存和查询数据。而UTF-8是一种广泛使用的字符编码格式。但是,在MySQL中,有三个版本的UTF-8可以选择使用:General、Bin和Unicode。那么它们之间有什么区别呢?

阅读更多:MySQL 教程

General

General是MySQL默认的UTF-8字符集。它支持大部分字符,但是对于某些字符,如表情符号,可能无法正确地存储。

Bin

Bin是MySQL二进制字符集,它可以正确地存储任何字符,包括不是UTF-8字符集支持的字符,但是它并不能进行排序和比较。

Unicode

Unicode是MySQL的全球化字符集,它可以像General那样支持大部分字符,同时也可以支持更多的字符,如表情符号和特殊符号。Unicode可以进行排序和比较,但是它占用的空间比General和Bin要多。

示例

让我们通过一个简单的例子来理解不同的字符集之间的差异:

假设我们需要在数据库中储存以下三个字符串:

  • “München”
  • “Munchen”
  • “MÑ”

如果我们使用General字符集进行存储,那么”München”和”Munchen”将被正确地存储,但是”MÑ”可能会被存储为”M?”或者”Mn”,因为General字符集无法正确识别Ñ这个字符。

如果我们使用Bin字符集进行存储,那么所有字符串都将被正确地存储,但是它们之间无法进行排序和比较。

如果我们使用Unicode字符集进行存储,那么所有字符串都将被正确地存储,并且它们之间也可以进行排序和比较。

设置字符集

在MySQL中,我们可以通过以下命令来设置字符集:

SET NAMES utf8mb4;
Mysql

这将设置字符集为Unicode。如果需要设置其他字符集,只需要替换utf8mb4即可。

同时,我们也可以在创建表时设置字符集,例:

CREATE TABLE `my_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Mysql

在以上命令中,我们特别指定了字符集为Unicode,并且指定了相应的排序规则。

总结

在MySQL中,我们需要通过设置字符集来正确地存储和查询数据。General字符集支持大部分字符,但是无法正确处理某些字符;Bin字符集可以正确地存储任何字符,但是无法排序和比较;Unicode字符集支持更多的字符并且可以进行排序和比较,但是占用的空间比另外两种字符集多。我们可以在命令中指定字符集,也可以在创建表时指定字符集。 了解不同字符集的区别,可以让我们更加准确地储存和查询数据。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册