数据库字符集与排序规则(Character Set And Collation)

  数据库需要适应各种语言和字符就需要支持不同的字符集Character Set),每种字符集也有各自的排序规则Collation)。

(注意:Collation原意为校对,校勘,但是根据实际使用场景,觉得还是翻译为排序规则比较合适)

  在绝大部分情形中,使用何种字符集和排序规则决定于服务器,数据库和表的级别,一般SQL操作不必关心这些。

以下操作均以MySQL为例。

查看数据库支持的字符集与排序规则

查看字符集:

SHOW CHARACTER SET;

部分结果:

查看排序规则:(后缀"_cs"或者"_ci"意思是区分大小写和不区分大小写(Case Sensitive & Case Insensitve))

SHOW COLLATION;

部分结果:

使用数据库支持的字符集与排序规则

  通常系统管理在安装时定义一个默认的字符集和排序规则,

也可以在创建数据库时对数据库范围,建表时对表级别,甚至列级别设置字符集和排序规则。

> 下图为建数据库时指定字符集和排序规则

为了确定所用的字符集和排序规则,可以使用下列语句:

SHOW VARIABLES LIKE ‘character%‘;
SHOW VARIABLES LIKE ‘collation%‘;

> 建表时指定表的字符集和排序规则

1 CREATE TABLE mytable (
2     column1 INT,
3     column2 VARCHAR (10)
4 ) DEFAULT CHARACTER SET hebrew
5 COLLATE hebrew_general_ci;

不指定字符集和排序规则时使用数据库默认设置,若指定了字符集没有指定排序规则,则使用字符集的默认排序规则。

>建表时指定表和列的字符集和排序规则

CREATE TABLE mytable (
    column1 INT,
    column2 VARCHAR (10),
    column3 VARCHAR (10) CHARACTER SET latin1
        COLLATE latin1_general_ci
) DEFAULT CHARACTER SET hebrew
    COLLATE hebrew_general_ci;

>自定义查询语句中ORDER BY的排序规则

SELECT * FROM `mytable` ORDER BY `column1` COLLATE latin1_general_cs;

这里的使用不限于ORDER BY,还有GROUP BY,聚集函数等。

参考文章:

【1】MySQL比知必会 2009年1月第一1版 第27章 “全球化与本地化”

时间: 2024-10-13 22:51:06

数据库字符集与排序规则(Character Set And Collation)的相关文章

MySQL字符集与排序规则 北京MySQL DBA学习

MySQL提供了多种字符集和排序规则选择,其中字符集设置和数据存储以及客户端与MySQL实例的交互相关,排序规则和字符串的对比规则相关. 字符集的设置可以在MySQL实例.数据库.表.列四个级别.MySQL设置字符集支持在InnoDB.MyISAM.Memory三个存储引擎.查看当前MySQL支持的字符集的方式有两种,一种是通过查看information_schema.character_set系统表,一种是通过命令show character set查看每个指定的字符集都会有一个或多个支持的排

mysql建数据库的字符集与排序规则

1.字符集说明: 一般选择utf8.下面介绍一下utf8与utfmb4的区别.utf8mb4兼容utf8,且比utf8能表示更多的字符.unicode编码区从1 - 126就属于传统utf8区,当然utf8mb4也兼容这个区,126行以下就是utf8mb4扩充区,什么时候你需要存储那些字符,你才用utf8mb4,否则只是浪费空间. 2.排序规则 排序一般分为两种:utf_bin和utf_general_cibin 是二进制, a 和 A 会别区别对待.例如你运行:SELECT * FROM ta

MySQL - 新建数据库的字符集与排序规则说明

我们在新建数据库时(Navicat)界面时会遇到这两个选项: 1.字符集 一般选择utf8. 下面介绍一下utf8与utfmb4的区别: utf8mb4兼容utf8,且比utf8能表示更多的字符.至于什么时候用,看你的做什么项目了,到这里可以查看unicode编码区从1 - 126就属于传统utf8区. 当然utf8mb4也兼容这个区,126行以下就是utf8mb4扩充区,什么时候你需要存储那些字符,你才用utf8mb4,否则只是浪费空间. 2.排序说明 排序一般分为两种:utf_bin和utf

数据库排序规则的冲突(理解collate Chinese_PRC_CI_AS)

之前碰到了数据库排序规则冲突问题,即百度或者 Google 的老话题: " 无法解决 equal to 操作中' sql_latin1_general_cp1_ci_as '和' chinese_prc_ci_as '之间的排序规则冲突 " .一般的方法,是在创建临时表或表连接的时候加上规则校勘语句 COLLATE "规则名"解决,如: create table #example ( EXP_Name varchar (50) collate CHINESE_PRC

修改sql server实例、数据库、表、字段的排序规则

转自:http://blog.51cto.com/jimshu/1095780 概念与详情请参考:字符编码与排序规则:https://www.cnblogs.com/gered/p/9145123.html 一.修改SQL Server服务器(实例)的排序规则 以下实验使用了SQL Server 2008 R2的默认实例,将Chinese_PRC_CI_AS修改成SQL_Latin1_General_CP1_CI_AS. 1. 停止SQL Server实例服务 2. 打开"命令提示符"

MySql之排序规则问题(2)

今天看到这个Sql语句,之前听说过,但是并未弄懂,因此在此特意做下笔记: userName varchar(20) collate chinese_prc_ci_as null 1.首先,collate是一个子句,可应用于数据库定义或列定义以定义排序规则,或应用于字符串表达式以应用排序规则投影 ::={windows_collation_name}|{sql_collation_name} 参数:collate_name是应用于表达式列定义或数据库定义的排序规则的名称collation_name

翻译:MariaDB字符集和排序规则

html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary { display: block } audio,canvas,progress,video { display: inline-block; vertical-align: baseline } audio:not([co

Mysql字符集以及校对规则

编码:计算机都是二进制存储,因此需要将显示符号转换成二进制数才能存储,每个字符所转换成的二进制数,就是字符编码. 字符集 字符用于显示的抽象符号.字符集是一套字符与字符编码的集合. 常见的字符集编码: Ascii字符集,GB2312字符集,gbk字符集,latin1字符集,unicode字符集等. show character set;可以获得MySQL支持的所有字符集. 修改数据库字符集 alter database liguodong character set utf8; MySQL可以使

无法解决 equal to 运算中 "Chinese_PRC_CI_AS" 和 "SQL_Latin1_General_CP1_CI_AS" 之间的排序规则冲突。

什么是排序规则(collation) 关于SQL Server的排序规则,估计大家都不陌生,在创建数据库时我们经常要选择一种排序规则(conllation),一般我们会留意到每一种语言的排序规则都有许多种,比如标准大陆简体中文Chinese_PRC的排序规则就有数十种之多 这些排序规则有什么作用呢?让我们先来看看MS官方的解释: 排序规则指定了表示每个字符的位模式.它还指定了用于排序和比较字符的规则.排序规则具有下面的特征: 语言 区分大小写 区分重音 区分假名 比如在SQL Server 20