记录下博客支持emoji表情的坎坷
博客支持emoji表情的设置过程坎坷,需修改数据库编码和配置文件,并解决索引长度问题,最终通过更改存储引擎成功实现。
本文最后由 荒野孤灯 更新于 2022 年 4 月 16 日 21 时 02 分,已有 1107 天未更新。今日被查阅 1 次,若内容或图片资源失效,请留言反馈,谢谢!
摘要由 AI 智能生成
之前博客程序因空间数据库版本为 MYSQL5.1 ,不支持uft8mb4,也就没去弄,导致偶尔不小心输入了 emoji 表情,保存时就报错,很是恼火,最近换了空间,于是乎就想着弄上,便发生了以下坎坷。
照旧先问度娘
度娘告诉我两步轻松搞定。
步骤一:执行以下sql语句,修改typecho数据库中表的编码格式为utf8mb4;
alter table typecho_comments convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_contents convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_fields convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_metas convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_options convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_relationships convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_users convert to character set utf8mb4 collate utf8mb4_general_ci;
步骤二:修改根目录 config.inc.php
文件内容,将 'charset' => 'utf8'
改成 'charset' => 'utf8mb4'
;
悲剧来了
第一步就直接报错:1071 - Specified key was too long; max key length is 767 bytes
,what fuck !什么鬼?
又是一翻百度,get 到以下知识点:
1071 - Specified key was too long; max key length is 767 bytes
错误,意思就是“索引字段长度太长,超过了767 bytes ;- innodb存储引擎,多列索引的长度限制:每个列的长度不能大于767 bytes;所有组成索引列的长度和不能大于3072 bytes ;
- myisam存储引擎,多列索引的长度限制:每个列的长度不能大于1000 bytes,所有组成索引列的长度和不能大于1000 bytes;
- mysql的varchar主键只支持不超过767个字节或者768/2=384个双字节 或者767/3=255个三字节的字段 而GBK是双字节的,UTF8是三字节的,UTF8mb4是四字节的;
而我又恰好用的是 innodb 存储引擎,研究数据表,发现有很多字段的 varchar 值为 255 ,大于 767/4=191 ,所以导致执行上面数据库 sql 代码时报错。
好吧,既然问题找到了,那就搞吧。于是乎,一张一张数据表手动改,把 varchar 大于 191 的都改成 191 ( varchar 小于 191 ,就不用管它)。再把 config.inc.php
改好,还真成功了。
为啥不改存储引擎
就在我测试成功发送 emoji 表情后,突然想到,傻逼,为啥不直接改存储引擎为 myisam ,官方既然把有些 varchar 设置为 255 ,肯定就是默认我们会使用 myisam存储引擎。于是乎,又是一顿神操作:
步骤一:将所有表的存储引擎改为 myisam;
ALTER TABLE typecho_comments ENGINE=MyISAM;
ALTER TABLE typecho_contents ENGINE=MyISAM;
ALTER TABLE typecho_fields ENGINE=MyISAM;
ALTER TABLE typecho_metas ENGINE=MyISAM;
ALTER TABLE typecho_options ENGINE=MyISAM;
ALTER TABLE typecho_relationships ENGINE=MyISAM;
ALTER TABLE typecho_users ENGINE=MyISAM;
步骤二: 把之前改的 varchar 都改回来;
步骤三: 修改根目录 config.inc.php
文件内容,将 'engine' => 'INNODB',
改成 'engine' => 'MyISAM',
;
好了,轻松秒杀,舒服啊!
另外 get 到一新技能
一个实用快捷键,在 win10 输入法自带了 emoji 表情,可以通过 win + 句号
来打开表情面板,输入 emoji 时更便捷点。?????
大家如果有新增数据表,记得在执行上面操作时加上。
小白神操作,大佬勿喷!
分类标签:折腾,工具代码,typecho优化,备忘
文章链接:https://www.80srz.com/posts/532.html
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
我的去年已经转换过编码,上个月博客被黑重新安装了博客,忘了将config.inc.php里的编码改掉很多评论有emoji表情都会报错。最近才整好..打算近期升级1.2
可能是你执行sql语句前,没打开博客数据库,你要先打开博客数据库,再去执行sql语法
666,完美解决!谢谢~
ok
哦,我想起来了。篱落主机数据库建立的时候自动是加了前缀的。
这个应该算是改过前缀吧?
没有呢
我靠,我的遭遇跟您一模一样,说好的两步搞定,结果第一步执行SQL命令就报错!
我是小白,还是没看懂最后你怎么操作成功的?
您报的啥错?一样吗?