zoukankan      html  css  js  c++  java
  • MySQL ------ 字符集(character set) 和 校对(collate)(三十)

    数据表用来存储和检索数据,不同的语言和字符集需要以不同的方式存储和检索,因此MySQL需要适应不同的字符集(不同的字母和字符),适应不同的排序和检索数据的方法

    由于对于不同的行,使用不同的排序方式会产生不一样的结果,如obGE,obge,OBGE,在使不使用区分大小写排序时会产生不同的结果,而且会影响排序和搜索,更何况对于不同国家的字符,因此使用校对很重要。

    常用术语:

        字符集:字母和符号的集合

        编码:某个字符集成员的内部指令

        校队:规定字符如何比较指令

    在MySQL的正常数据库活动(select、insert等)中,不需要操心太多的东西,使用何种字符集和校对的决定在服务器、数据库和表级进行。

    一、查看MySQL支持众多的字符集

    -- 为查看所支持的字符集完整列表
    show character set;

    上述显示了所有可用的字符集以及每个字符集的描述和默认校对 

    -- 查看可用的校对
     show collation;

    上述显示所有可用的校对,以及它们适用的字符集,而且其中有的字符集不止一校对 

    通常系统管理在安装时定义一个默认的字符集和校对。也可以在创建数据库时,指定默认的字符集和校对。

    -- 为了确定所有的字符集和校对
    SHOW VARIABLES LIKE 'character%';
    SHOW VARIABLES LIKE 'collation%';

    二、使用字符集和校对顺序

    实际上,字符集很少是服务器的范围(甚至数据库范围)的设置,不同的表,甚至不同的列都可能需要不同的字符集,而且两者都可以在创建时指定

    one、指定字符集和校对在表的范围

    -- 给表指定字符集和校对 在创建的时候指定 
    mysql> create table obge_table
        -> (
        ->  column1 int,
        ->  column2 varchar(10)
        -> )default character set hebrew
        ->  collate hebrew_general_ci; 

    上述包含一个两列的,并且指定了一个字符集合一个校对顺序

     注意:

    1、如果指定CHARACTER SET 和COLLATE 两者,则使用这些值

    2、如果只指定character set ,则使用此字符集及其默认的校对(也就是 show character set 结果中显示的)

    3、如果既不指定character set 也不指定 collater 则使用数据库默认

    two、指定字符集和校对在列的范围

    -- 对一个表以及一个特定的列指定了character set 和 collate  
    mysql>  create table obgestu.obge_table
        -> (
        ->  columns int,
        ->  column1 varchar(10),
        ->  column2 varchar(10) character set utf8 collate  utf8_general_ci
        -> )default character set hebrew collate hebrew_general_ci; 

    Three 、在查询时指定校对顺序

    校对在对用order by  子句检索出来的数据排序时起重要的作用,如果需要用与创建表时不同的校对顺序  排序特定的select 语句,可以在select 语句自身中进行

    latin1 对于不同的欧洲语言有几种校对,而且许多校对出现两次,

          一次区分大小写(由_cs表示),

          一次不区分大小写由(_ci 表示)

    字符集

    -- 为区分大小写校对 
     select * from customers order by last_name,first_name collate latin1_general_cs;

    select 使用collate 指定一个备用的校对顺序,将会影响到结果的排序次序。

    注意:

        1、在不区分大小写的表上进行区分大小写搜索可以,反之也可以

        2、collate 除了可以在order by 子句中使用外,还可以用于 group by、having、聚集函数、别名等

        3、如果觉得需要可以使用 Cast() 或 Convert() 函数,将 字符集进行转换

  • 相关阅读:
    java面试系列<1>——java基础
    Netty 面试必备知识点
    Redis 面试必备知识点
    MySQL 面试必备知识点
    肝了一个半月的 Java 项目快速开发脚手架:Chewing
    线上BUG:MySQL死锁分析实战
    2021-07-01阅读小笔记:Spring ioc 之组件扫描
    2021-06-13:G1垃圾回收器
    Dubbo原理剖析 之 @DubboReference.version设置为*
    2021-04-09阅读小笔记:JDK8中的一等公民和Stream小概念
  • 原文地址:https://www.cnblogs.com/obge/p/13162352.html
Copyright © 2011-2022 走看看