美文网首页
MySQL技巧总结

MySQL技巧总结

作者: 龙小江i | 来源:发表于2018-10-13 19:38 被阅读0次

    导入数据

    # 登录
    mysql --local-infile -u user_name -p
    # 导数
    load data local infile '文件路径.txt' into table table_name character set utf8 fields terminated by '\t' ignore 1 lines;
    

    中文乱码

    # 建表
    create table table_name(
    field_name varchar(20) default '-' comment '字段注释' collate utf8_bin
    );
    # cmd登陆
    mysql --local-infile -u user_name -p
    # 在cmd中导入外部数据
    load data local infile '文件路径.txt' into table table_name character set utf8 fields terminated by '\t' ignore 1 lines;
    

    关于第一列第一行数值变成 0

    错误原因:文件以utf8-bom编码保存, 有bom的会比无bom的多出3个字节, Windows系统可以自动识别处理,Unix系统则不能识别,导致解析错误
    解决方案:更改文件编码为utf8

    修改数据库编码为utf8mb4

    • 在Mysql中,四个字节的utf8mb4是三个字节的utf8的超集,可以支持手机端常用的表情字符Emoji和一些不常用的汉字,如 “墅”。
    • 使用utf8mb4伴随而来的是索引键超长的问题,对于表行格式是 COMPACT或 REDUNDANT,InnoDB有单个索引最大字节数 768 的限制,而字段定义的是能存储的字符数,比如 VARCHAR(200) 代表能够存200个汉字,索引定义是字符集类型最大长度算的,即 utf8 maxbytes=3, utf8mb4 maxbytes=4,算下来utf8和utf8mb4两种情况的索引长度分别为600 bytes和800bytes,后者超过了768,导致出错:Error 1071: Specified key was too long; max key length is 767 bytes
    • COMPRESSED和DYNAMIC格式不受限制,但也依然不建议索引太长,太浪费空间和cpu搜索资源。
      参考文章1:清官谈mysql中utf8和utf8mb4区别
      参考文章2:mysql使用utf8mb4经验吐血总结
    说得通俗一点,我对于上面的理解是,只要索引字段不超过768/4=192个字符长度,使用 VARCHAR 替代 CHAR 就能达到尽可能多得表示字符,避免字符乱码的目的。
    [client]
    default-character-set=utf8mb4
    
    [mysql]
    default-character-set=utf8mb4
    
    [mysqld]
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'
    skip-character-set-client-handshake=true
    

    相关文章

      网友评论

          本文标题:MySQL技巧总结

          本文链接:https://www.haomeiwen.com/subject/udqaaftx.html