› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
PaperKite
V2EX  ›  MySQL

MySQL 字符集问题

  •  
  •   PaperKite · Mar 11, 2022 · 3647 views
    This topic created in 1659 days ago, the information mentioned may be changed or developed.

    同一个 MySQL ,my.cnf 中配置了

    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    

    执行以下 SQL

    show variables like '%char%';
    show variables like 'collation%';
    

    MySQL cli 查询结果

    Variable_name Value
    character_set_client utf8
    character_set_connection utf8
    character_set_database utf8
    character_set_filesystem binary
    character_set_results utf8
    character_set_server utf8
    character_set_system utf8
    character_sets_dir /usr/share/mysql/charsets/

    Variable_name Value
    collation_connection utf8_general_ci
    collation_database utf8_general_ci
    collation_server utf8_general_ci

    navicat 、navicat 命令行、datagrip 结果

    Variable_name Value
    character_set_client utf8mb4
    character_set_connection utf8mb4
    character_set_database utf8
    character_set_filesystem binary
    character_set_results utf8mb4
    character_set_server utf8
    character_set_system utf8
    character_sets_dir /usr/local/mysql/share/charsets/

    Variable_name Value
    collation_connection utf8mb4_general_ci
    collation_database utf8_general_ci
    collation_server utf8_general_ci

    为何结果不同

    Alucns
        1
    Alucns  
       Mar 11, 2022
    建议直接使用:utf8mb4
    PaperKite
        2
    PaperKite  
    OP
       Mar 11, 2022 via iPhone
    @Aluhao 主要是想问为何两个地方结果不一样
    katsusan
        4
    katsusan  
       Mar 11, 2022   ❤️ 3
    navicat 连接 mysql 成功后会执行几条命令: set names xxx; show variables like 'lower_case_%'; ...

    如果连接信息里编码选的是 auto, 就会执行 set names utf8mb4.可以在你的命令行下试试看, 跟 navicat 一样的结果.
    PaperKite
        5
    PaperKite  
    OP
       Mar 11, 2022
    @katsusan #4 感谢。命令行执行了 set names utf8mb4 之后,确实和 navicat 一样的结果了,连接信息里编码也确实选的是 auto ; auto 切换成其他就跟最开始的命令行结果一致了。另外想问一下( navicat 连接 mysql 成功后会执行几条命令: set names xxx; show variables like 'lower_case_%'; ...)这个是如何了解到的
    comlewin
        6
    comlewin  
       Mar 11, 2022
    这可能就叫经验
    PaperKite
        7
    PaperKite  
    OP
       Mar 11, 2022
    @comlewin 可能这就是大佬吧👍
    C02TobNClov1Dz56
        8
    C02TobNClov1Dz56  
       Mar 11, 2022
    @PaperKite #7 你可以启动 navicat 后按 ctrl+H 查看命令行历史, navicat 作为 GUI 工具, 是记录了命令行交互历史记录哒
    PaperKite
        9
    PaperKite  
    OP
       Mar 11, 2022
    @chengyiqun 你说的是工具选项卡中的历史日志吗 我在里面没找到#4 说的内容
    F281M6Dh8DXpD1g2
        10
    F281M6Dh8DXpD1g2  
       Mar 11, 2022
    client 字符集是 client 设置的,你不设置当然就 follow server 的
    C02TobNClov1Dz56
        11
    C02TobNClov1Dz56  
       Mar 11, 2022
    @PaperKite #9 不知道, 可能是 navicat 版本不一样吧, 我司的分布式数据库就是和新版 navicat 兼容性不好, 所以我至今还在用 navicat11
    katsusan
        12
    katsusan  
       Mar 11, 2022   ❤️ 1
    @PaperKite #5
    > 想问一下( navicat 连接 mysql 成功后会执行几条命令: set names xxx; show variables like 'lower_case_%'; ...)这个是如何了解到的

    mysql 的 client 向 server 发送 query command 时用的是 text protocol, 在 unencrypted connection(no SSL)下用 tcpdump 抓包就能看到了. 协议在 https://dev.mysql.com/doc/internals/en/com-query.html.
    PaperKite
        13
    PaperKite  
    OP
       Mar 11, 2022
    @katsusan 感谢 抓包看到了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2332 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 00:44 · PVG 08:44 · LAX 17:44 · JFK 20:44
    ♥ Do have faith in what you're doing.