jumpserver mysql1071问题(和其他python mysql问题类似)mysql Specified key was too long
1071 问题 键过长 具体解释可以查mysql报错大全 出现这个问题,应该最先检查所运行实例的字符集状态,如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | mysql> show variables like "%char%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) |
我这边是使用了utf8mb4 编码,jumpserver openstack 等程序设计时一般采用utf8普通编码
utf8mb4顾名思义最大长度单个字符4字节,会使字段和键长度加长,而mysql默认情况下单个列的索引不能超过767位(不同版本可能存在差异)故很容易出现问题,遇到这些特定程序,在创建数据库时,使用
1 | create database character set utf8 ; |
这样的形式指定字符集才是最佳实践,实际使用中,无需兼容4字节中文(怕不是火星文)默认使用utf8 比较经济,兼容性也尚可,兼容特殊字符可以考虑utf8mb4
1 | CREATE DATABASE `crowd` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ | |
其他情况下 数据库表采用utf8编码,其中varchar(255)的column进行了唯一键索引,也容易出现该问题
继续阅读
- 上一篇 >:openldap