美文网首页
mysql杂谈

mysql杂谈

作者: 温岭夹糕 | 来源:发表于2023-06-15 22:30 被阅读0次

    目录

    1. 类型

    1.类型

    1.1mysql字符集问题(character set)和排序

    charset指的是对unicode字符集的编码方式

    show variables like 'character%';
    show create database <databaseName>;
    

    第二条命令看到的字符集是根据my.cnf的[default-character-set]设置的

    //my.cnf
    [client]
    default-character-set=utf8mb4
    [mysqld]
    default-character-set=utf8mb4
    

    创建数据库指定字符集

    CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
        [create_option] ...
    
    create_option: [DEFAULT] {
        CHARACTER SET [=] charset_name
      | COLLATE [=] collation_name
    }
    

    collate称为排序,又称校对规则,都是定义对字符串的校对:

    • utf8_bin 是将字符串每一个字符用二进制存储
    • utf8_genera_ci 不区分大小写
    • utf8_genera_cs 大小写敏感
      通常情况下utf8_genera_ci对中英文的校验准确度够用了

    1.2 varchar类型的长度到底是多少

    mysql ref对varchar的用法定义是

    [NATIONAL] VARCHAR(M) 
    [CHARACTER SET charset_name] 
    [COLLATE collation_name]
    

    M的范围是[0-65535],即最多占用65535个字节,其中varchar的存储规则:

    • 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)
    • 5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个。最大大小是65532字节,即最多21844个汉字


      image.png

    所以更像GO语言的rune类型,即码点。

    其他补充:

    1. char代表定长,会自动填充
    2. binary和blob代表存储二进制数据

    1.3MySQL时间字段究竟使用INT还是DateTime型?

    mysql中表示日期的类型有YEAR、TIME、DATE、DTAETIME、TIMESTAMP,其中

    • TIMESTAMP 占 4个字节,表示时间到2038年
    • datetime 占8个字节, 表示时间到9999年

    时间类型本质上也是使用int去存储的,所以如果从性能角度讲两者是没差别的,当存在大量查询和排序时加个索引就能解决。而且datetime语义化更好。建议更多使用datetime

    相关文章

      网友评论

          本文标题:mysql杂谈

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