zoukankan      html  css  js  c++  java
  • MySQL开发规范-字符集介绍

    字符集(Charset)

    是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
     
    MySQL数据库的字符集:
    • 字符集(CHARACTER) 这个好理解
    • 校对规则(COLLATION) 即排序规则
     
    MySQL中常见的字符集:
    • UTF8 (utf8mb4用的比较多一些)
    • LATIN1
    • GBK
     
    常见校对规则:
    • ci: 大小写不敏感
    • cs或bin: 大小写敏感
     
    对于字符集和字符序补充:
    什么是字符集、字符序?简单的来说:
    字符集(character set):定义了字符以及字符的编码。
    字符序(collation):定义了字符的比较规则。
    举个例子:
    有四个字符:A、B、a、b,这四个字符的编码分别是A = 0, B = 1, a = 2, b = 3。这里的字符 + 编码就构成了字符集(character set)。
    如果我们想比较两个字符的大小呢?比如A、B,或者a、b,最直观的比较方式是采用它们的编码,比如因为0 < 1,所以 A < B。
    另外,对于A、a,虽然它们编码不同,但我们觉得大小写字符应该是相等的,也就是说 A == a。
    这上面定义了两条比较规则,这些比较规则的集合就是collation。
    同样是大写字符、小写字符,则比较他们的编码大小;
    如果两个字符为大小写关系,则它们相等。
    

      

    我们可以使用以下命令查看:
    – show charset;
    – show collation;
     
    查看当前数据库支持的字符集,以及其对应的默认校对规则和存储最大字符长度

    查看utf8支持的校对规则

    MySQL字符集级别

    服务器端字符集:控制的是,存到mysql中时,字符集控制
    
    客户端字符集: 控制的是用户的输入及显示
    
    系统字符集: 控制的是系统相关的显示,和一些依赖于操作系统的应用
    

    在生产中我们必须保证操作系统、MySQL客户端实例、MySQL服务器端的字符集保持一致

    1. 操作系统字符集设置

    source /etc/sysconfig/i18n
    [root@db02 logs]# echo $LANG
    zh_CN.UTF-8
    

      

    2. MySQL实例级别

     
    方法1: 在编译安装时候就指定如下服务器端字符集

    cmake .
    -DDEFAULT_CHARSET=utf8 
    -DDEFAULT_COLLATION=utf8_general_ci 
    -DWITH_EXTRA_CHARSETS=all 
    

     

    方法2: 在配置文件中设置

    [mysqld]
    character-set-server=utf8
    

      

    3. Mysql实例客户端级别

    第一种方式:
    临时生效单条命令法
    mysql> set names utf8;
    Query OK, 0 rows affected (0.00 sec)
    

      

     
    第二种方式:
    通过修改my.cnf实现修改mysql客户端的字符集,配置方法如下。

    [client]
    default-character-set=utf8
    

      

    注意:如果我们在创建数据库或者表时指定好字符集之后,那么这个数据库或者表就以创建时指定的字符集为准,将忽略配置文件中的字符集。
     
    创建数据库
    CREATE DATABASE `oldboy` /*!40100 DEFAULT CHARACTER SET utf8 */ 
    create database oldboy DEFAULT CHARACTER SET UTF8 DEFAULT COLLATE = utf8_general_ci;
    

      

    创建表

    CREATE TABLE `test` (
    `id` int(4) NOT NULL AUTO_INCREMENT,
    `name` char(20) NOT NULL,
    PRIMARY KEY (`id`)
    
    ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8
    

      

    获取帮助并查询

    help create database;
    show character set;
    

      

    如果都没有做,我们想要在生产环境中更改数据库的字符集?

    alter database oldboy CHARACTER SET utf8 collate utf8_general_ci;
    alter table t1 CHARACTER SET latin1;
    
    注意:更改字符集时,一定要保证由小往大改,后者必须是前者的严格超集。生产中别随便改。一定要反复确认。

     

  • 相关阅读:
    使用Visual Studio .Net 做自己的汉化软件
    给所有的Control加两个属性,实现回车键自动跳转到下一个控件
    数字逗号标记—以前原创(一)
    解决w3wp.exe占用CPU和内存问题
    sql日期函数
    索引的使用总结
    w3wp.exe狂占内存
    w3wp.exe占内存CPU问题 WIN2003 IIS6.0假死现象的分析
    查看Linux系统日志
    linux动态增加LV空间
  • 原文地址:https://www.cnblogs.com/yang-ning/p/11649119.html
Copyright © 2011-2022 走看看