• 9.Mysql字符集


    9.字符集
    9.1 字符集概述
    字符集就是一套文字符号及其编码、比较规则的集合。
    ASCII(American Standard Code for Information Interchange)字符集:采用7位编码,包括大小写英文字母、阿拉伯数字和标点符号,及33个控制符号等。
    9.2 Unicode字符集
    ISO-10646采用4字节编码,简称UCS-4,将代码空间分为4部分(组group、面plane、行row、格ceil),每部分各占一个字节。
    Unicode采用2字节编码,Unicode编码被纳入UCS-4的0组0面,称为基本多语言字面,共65534个码位。
    UTF是USC和Unicode格式转换(Transformation Format)的缩写,分为UTF-8和UTF-6.
    UTF-8按一定规则将ISO-10646或Unicode字元码转换成1~4个字节的编码,其中将ASCII码(0~0x7F)转换成单字节编码。

    9.3 汉字及一些常见字符集
    GB 2312-80 双字节编码字符集,收录6763个常用汉字。
    GB 13000 除收录GB 2312-80外还收录全部汉字及偏旁部首,共27484个。
    GBK 除收录GB 2312-80外还收录中日韩全部汉字及偏旁部首,共20902个。
    GB18030 2字节或4字节编码,兼容GB13000和GBK。
    字符集 是否定长 编码方式 其他说明
    ASCII 是 单字节7位编码 最早的、奠基性字符集
    latin1 是 单字节8位编码 西欧字符集
    GBK 是 双字节编码
    UTF-8 否 1~4字节编码

    9.4 怎样选择合适的字符集
    考虑因素:UTF-8
    满足应用对语言的需求,尽量选择支持多语言的字符集;
    考虑对已有数据的兼容;尽量选择已有数据的超集,而非子集;
    考虑字符集编码长度对性能的影响,尽量选择编码长度短的字符集;
    考虑字符运算对性能的影响,尽量选择定长字符集,而非变长字符集;
    考虑客户端程序对字符集的支持,尽量保持前后端字符集一致,避免发生字符集转换。

    9.5 Mysql支持的字符集简介
    Mysql支持统一台服务器不同的数据库、同一个数据库不同的表、同一个表不同列可以使用不同的字符集。
    Mysql字符集分为4个层级:服务器字符集、数据库字符集、表字符集、列字符集。
    Mysql字符集包括字符集(character)和校对规则(collation)两部分,
    字符集(character)用来定义存储字符串的方式;
    校对规则(collation)用来定义比较字符串的方式;
    字符集和校对规则是一对多关系,即一个字符集可以有多个校对规则;
    每个字符集默认对应一个校对规则。
    校对规则命名:
    字符集_语言名_ci大小写不敏感
    字符集_语言名_cs大小写敏感
    字符集_bin基于字符编码的值比较与语言无关,对大小写敏感

    查看可用字符集:
    show character set;
    或者查看information_schema.character_set表
    查看某个字符集的所有校对规则和默认校对规则:
    show collation like 'gbk%';
    或者查看information_schema.collations表
    例子:
    select case when 'A' COLLATE gbk_chinese_ci ='a' COLLATE gbk_chinese_ci then 1 else 0 end;
    select case when 'A' COLLATE gbk_bin ='a' COLLATE gbk_bin then 1 else 0 end;

    9.6 Mysql字符集的设置
    Mysql字符集分为4个级别:服务器字符集、数据库字符集、表字符集、列字符集。
    9.6.1 服务器字符集和校对规则
    在my.cnf文件中设置:
    [mysqld]
    character-set-server=gbk
    在启动项中指定:
    mysqld --character-set-server=gbk
    在编译时指定:
    cmake -DDEFAULT_CHARSET=gbk
    默认使用latin1作为服务器字符集;
    在设置字符集时没有指定校对规则,默认使用字符集默认校对规则;
    如果要使用字符集非默认校对规则,则需要在设置字符集时一同设置校对规则。
    查看当前服务器字符集和校对规则:
    show variables like 'character_set_server';
    show variables like 'collation_server';

    9.6.2 数据库字符集和校对规则
    数据库字符集和校对规则在创建数据库时指定,也可以在创建完数据库后通过alter database命令进行修改。
    查看当前数据库字符集和校对规则:
    show variables like 'character_set_database';
    show variables like 'collation_database';
    数据库字符集起效规则:
    当设置了数据库字符集和校对规则时,则使用指定的字符集和校对规则;
    当设置了数据库字符集且未设置校对规则时,则使用指定的字符集和字符集默认校对规则;
    当未设置数据库字符集但设置了校对规则时,则使用指定的校对规则和与该校对规则关联的字符集;
    当未设置数据库字符集和校对规则时,则使用服务器字符集和校对规则。

    9.6.3 表字符集和校对规则
    表字符集和校对规则在创建表时指定,也可以在创建完表后通过alter table命令进行修改。
    查看当前表字符集和校对规则:
    show create table table_name;
    表字符集起效规则:
    当设置了表字符集和校对规则时,则使用指定的字符集和校对规则;
    当设置了表字符集且未设置校对规则时,则使用指定的字符集和字符集默认校对规则;
    当未设置表字符集但设置了校对规则时,则使用指定的校对规则和与该校对规则关联的字符集;
    当未设置表字符集和校对规则时,则使用数据库字符集和校对规则。

    9.6.4 列字符集和校对规则
    在建表时可以为不同列设置不同的字符集,也可以使用alter table table_name modify column col_name为列修改为不同的字符集。
    一般表中所有列与表保持相同的字符集和校对规则。

    9.6.5 连接字符集和校对规则
    连接字符集和校对规则时客户端与服务器交互的字符集和校对规则。
    参数character_set_client、character_set_connection、character_set_results分别代表客户端、连接和返回结果的字符集。
    这三个参数要保持相同,才能确保写入的数据能够被正确读出。
    同时设置3个参数的命令:
    set names gbk;
    一次设置了3个参数的字符集,但只对一次连接有效。
    在my.cnf中设置:
    [mysql]
    default-character-set=gbk
    对所有连接都有效。
    字符串常量的字符集由参数character_set_connection决定。
    可以通过命令修改字符串常量的字符集,
    例子:
    select -gbk '字符串常量';
    select -utf-8 '字符串常量';

    9.7 字符集的修改步骤
    将latin1字符集的数据库修改成GBK字符集的过程如下:
    1)导出表结构
    mysqldump -uroot -p --default-character-set=gbk -d scott > C: able.sql
    说明:
    --default-character-set=gbk 设置连接字符集为gbk
    -d 只导出表结构,不导出数据
    2)手工修改scott.sql中表结构定义中的字符集为新的字符集
    3)确保记录不再更新,导出所有记录
    mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=latin1 databasename> C:data.sql
    说明:
    --quick 用于转储大的表,强制mysqldump从服务器一次一行地检索表中的行而不是检索所有行,并在输出前将它缓存到内存中。
    --extended-insert 使用包括几个values列表的多行insert语法,导出文件更小,导入时速度更快。
    --no-create-info 不导出create table语句,只导数据
    --default-character-set=latin1 按照原有的字符集导出所有数据,保证中文不会出现乱码
    4)打开导出文件,将set names=latin1修改为set names=gbk;
    5)使用新的字符集创建新的数据库。
    create databases db_name default charset gbk;
    6)创建表,执行table.sql
    mysql -uroot -p db_name < table.sql
    7)导入数据,执行data.sql
    mysql -uroot -p db_name < data.sql

    9.8 小结

  • 相关阅读:
    调用外部文件(ShellExecute)
    字体函数 -- GetDeviceCaps
    字体函数 -- EnumFonts
    字体函数 -- EnumFontFamilies
    回调函数 EnumFontFamProc
    AlphaBlend
    c# 编程修改 wince 系统时间
    windows 打开文件夹
    C# wince 实现软件忙鼠标状态改变
    CSDN第一期总结之三:Thread的问题(转)
  • 原文地址:https://www.cnblogs.com/BradMiller/p/9765806.html
Copyright © 2020-2023  润新知