zoukankan      html  css  js  c++  java
  • Mysql系列-字符集

    字符集

    怎样选择合适的字符集

    • 如果应用程序需要发布到很多国家和地区,需要支持各种各样的文字,则选择Unicode编码,Mysql中即UTF-8.q如果需要将数据导入数据库,这时候要注意数据库字符集对数据字符集的兼容性,最好一致。
    • 如果数据库支持一般中文,数据量很大,性能要求高,那么应该选择双字节定长编码的中文字符集,比如GBK。因为相对于UTF-8而言GBK每个汉字只需要2个字节,而UTF8每个汉字需要3个字节。
    • 如果数据库需要做大量的检索、比较、排序,应该选择定长字符集。

    查看字符集

    字符集和校对规则是一对多的关系
    show character set; //查看数据库可用的所有字符集
    show collation like '%gbk%'; //查看字符集的校对规则
    校对规则命名约定:
    _ci:大小写不敏感,_cs:大小写敏感,_bin:二进制值比较

    MySQL字符集设置

    MySQL的字符集和校对规则分四个级别的默认设置:
    服务器级、数据库级、表级、字段级
    
    服务器级:
    在MySQL服务启动时来确定
    1.在my.cnf中设置:[mysqld] character-set-server=gbk
    2.在启动选项中指定:mysqld --character-set-server=gbk
    3.在编译时指定:shell> cmake . -DDEFAULT_CHARSET=gbk
    在没有指定校对规则的情况下,使用默认的校对规则。
    //查询当前服务器的字符集
    show variables like 'character_set_server';
    //查询当前服务器的校对集
    show variables like 'collation_server';
    
    数据库级:
    在创建数据库的时候指定,也可以在创建完成之后通过alter database命令修改。推荐在创建数据库的时候显式指定字符集和校对规则,如果没有指定,则默认使用服务器字符集和校对规则。
    show variables like 'character_set_database';
    show variables like 'collation_database';
    
    表级:
    在创建表的时候指定,如果没有指定则使用数据库的字符集和校对规则。
    show create table t1;
    
    列级:
    列级别的字符集一般不适用,主要是针对不同字段需要使用不同字符集的情况,遇到的几率很小。
    
    以上四种字符集设置确定的是数据保存的字符集和校对规则,对于实际的应用程序,还存在客户端和服务器之间交互的字符集和校对规则设置。
    MySQL提供了三个参数:character_set_client、character_set_connection、character_set_results.分别代表客户端、连接、返回结果的字符集。通长情况下这三种字符集是相同的。
    一般通过下面的命令设置这三个参数。
    set names utf8; //应用程序每次连接数据库都需要执行。

    字符集修改步骤

    如果数据库中已经存在数据,此时想修改字符集不能通过 alter table 或者alter database这
    
    两个命令都无法作用于已存在的数据。
    一下模拟lantin1字符集数据库修改成GBK字符集数据库的过程
    
    1.导出表结构:
    mysqldump -uroot -p --default-character-set=gbk -d databasename> createtab.sql
    --default-character-set=gbk:设置以什么方式连接
    -d:表示只导出表结构,不导出数据
    2.手工修改createtab.sql中表结构定义中的字符集为新的字符集。
    3.确保记录不在更新导出所有记录。
    mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-
    
    set=latin1 databasename> data.sql
    --quick:该选项用于转储大的表
    --extended-insert:使用包括几个values列表的多行insert语法,加速插入。
    --no-create-info:不导出每个转储表的create table语句。
    --default-character-set=latain1:按照原有的字符集导出数据。
    4.打开data.sql,将set names latin1 手工修改为:set names gbk;
    5.使用新的字符集创建新的数据库
    create database databasename default charset gbk;
    6.创建表,执行createtab.sql
    mysql -uroot -p databasename < createtab.sql
    7.导入数据,执行data.sql
    mysql -uroot -p databasename < data.sql
  • 相关阅读:
    nginx和phpfpm保持长连接
    单件模式+打开窗体+窗体构造函数参数
    Java REST框架一览(转)
    什么原因成就了一位优秀的程序员?(转)
    使用 sqlRest 将数据库转换为 REST 风格的 Web 服务(转)
    浏览器插件之ActiveX开发系列(转载)
    Java JSON技术框架选型与实例(转)
    SQL参数绑定
    ab压力测试工具使用
    Jintegra使用注意事项
  • 原文地址:https://www.cnblogs.com/liun1994/p/5573248.html
Copyright © 2011-2022 走看看