分类目录归档:MySQL

MySQL 里 varchar(64) 采用utf-8编码,能存多少个汉字?或多少个字母?

MySQL 中 varchar(64) 采用 UTF-8 编码时的存储能力可通过以下维度分析:


一、存储汉字

  1. 字符数量
    varchar(64) 可直接存储 64 个汉字,因为定义长度单位为字符而非字节。
    例如:varchar(64) 字段可完整存入 “数据库设计规范与最佳实践”(假设总长度不超过 64 个汉字)。
  2. 字节占用
    每个 UTF-8 汉字占 3 字节,64 个汉字共占 64 × 3 = 192 字节
    (注:实际存储时会额外消耗 1-2 字节记录字段长度,但因 64 < 255,仅需 1 字节长度前缀)

二、存储字母/数字

  1. 字符数量
    可存储 64 个字母或数字,同样以字符为单位计算。
    例如:varchar(64) 可存入 “ABCDabcd1234…” 共 64 个字符。
  2. 字节占用
    每个英文字符占 1 字节,总字节数为 64 × 1 = 64 字节

三、关键限制

  1. 总行长度限制
    MySQL 单行所有字段的字节总和不得超过 65535 字节(含长度前缀和字段元数据)。
  • 示例:若 varchar(64) 存储 64 个汉字,总字节数为 192 + 1 = 193 字节,远低于行限制。
  1. 编码版本差异
  • MySQL 5.0 以上varchar(n) 以字符为单位,兼容 UTF-8 汉字和字母混合存储。
  • MySQL 4.0 以下varchar(n) 以字节为单位(需避免使用旧版本)。

四、实际场景建议

  1. 混合存储
    若字段包含汉字和字母混合内容,总字符数不超过 64 即可,MySQL 会自动处理字节转换。
    例如:”用户ID_12345″(10 字符)占用 10 × 3 = 30 字节(汉字部分) + ASCII 字符的 1 字节/字符。
  2. 字符集升级
    推荐使用 utf8mb4 替代 utf8,以支持更多 Unicode 字符(如 emoji),但需注意存储空间需求增加。

总结

  • 汉字容量:64 个
  • 字母/数字容量:64 个
  • 实际存储:无需人工截断,MySQL 按字符计数自动管理。
  • 风险提示:需确保总行长度不超过 65535 字节,避免设计多超长字段的表。

引用链接:
1.MySQL:一场由Char/Varchar 引起的战争!! – 知乎
2.mysql数据库:varchar类型可以存储多少个汉字,多少个数字 – 腾讯云
3.MySQL utf8编码的varchar最多能存多少个字符 – CSDN博客
4.mysql utf-8 中文 – CSDN博客
5.mysql的varcher类型长度 – 根号三
6.MySQL 数据库 varchar 到底可以存多少个汉字,多少个英文呢?我们来搞搞清楚 · Ruby China – ruby-china.org
7.数据库中varchar类型 最大长度是多少?[通俗易懂] – 腾讯云
8.mysql 64字节能存多少个汉字 – 51CTO博客
9.MySQL中varchar能存多少汉字、数字 – 阿里云开发者社区
10.mysql varchar可以存几个汉字 – CSDN博客
11.mysql varchar到底能存多少汉字? – CSDN博客
12.MySQL数据类型 – 程序员肥仔
13.mysql varchar 100 可以存多少汉字 utf8编码 – 51CTO博客
14.软件编程基础知识:mysql不同字段类型分别可以存储多少内容? – 学科学玩数码
15.MYSQL_第11章_MySQL数据类型详解 – YOLO
16.mysql一个汉字几个字符 mysql里汉字占几位 – 51CTO博客
17.mysql的varchar到底能存多少个字符 – 腾讯云
18.mysql数据类型char与varchar的区别 – 博客园
19.关于MySQL VARCHAR的错误经验,你中了几条? – 稀土掘金

[Server] Plugin mysqlx reported: ‘Setup of socket: ‘/var/lib/mysql/mysqlx.sock’ failed, can’t create lock file /var/lib/mysql/mysqlx.sock.lock’

2025-05-15T12:31:13.701072Z 0 [ERROR] [MY-011300] [Server] Plugin mysqlx reported: ‘Setup of socket: ‘/var/lib/mysql/mysqlx.sock’ failed, can’t create lock file /var/lib/mysql/mysqlx.sock.lock’

因为移动了默认的数据目录导致/var/lib/mysql目录不存在,创建对应的目录即可

mkdir /var/lib/mysql/ && chown mysql:mysql /var/lib/mysql && chmod 755 /var/lib/mysql

[Warning] [MY-011068] [Server] The syntax ‘slave_skip_errors’ is deprecated and will be removed in a future release. Please use replica_skip_errors instead.

2025-05-15T12:24:59.648560Z 0 [Warning] [MY-011068] [Server] The syntax ‘slave_skip_errors’ is deprecated and will be removed in a future release. Please use replica_skip_errors instead.

使用replica_skip_errors替代

replica_skip_errors=’1062,1032,1008′

DbMySQLQuery.resultFieldStringValueByName(): MySQL_ResultSet::isNull: invalid value of ‘columnLabel’

The proposed solution “[3 Feb 16:10] Adam Latchem” worked for me, in the context of MySQL Workbench connecting to a MariaDB database. The fix (for definiteness) is to edit the file C:\Program Files\MySQL\MySQL Workbench 8.0 CE\modules\wb_admin_connections.py at line 346, to change it from

("DB", mforms.StringColumnType, "DB", 100),

to

("db", mforms.StringColumnType, "DB", 100),

(note change of case in first argument).

此操作解决MySQL Workbench Client Connections 空白问题…