存储过程中的Database Collation疑问:为何对应latin1_swedish_ci?
为什么恢复备份后数据库排序规则是latin1_swedish_ci?
这个问题在MySQL环境里挺常见的,我来拆解下几个最可能的原因:
原数据库本身的排序规则就是latin1_swedish_ci
备份文件会完整保留原数据库的所有属性,包括排序规则。如果你的原始数据库创建时就指定了latin1_swedish_ci,那恢复后的数据库自然会继承这个设置。你可以检查备份文件里的CREATE DATABASE语句,里面大概率会有类似COLLATE latin1_swedish_ci的子句。恢复时未显式指定新的排序规则
当你执行恢复操作时,如果没有在命令或工具里指定要覆盖的排序规则,数据库会默认沿用备份文件中记录的配置。比如用MySQL命令行恢复时,如果你只是执行mysql -u username -p your_db < backup.sql,就不会修改原有的排序规则设置。服务器默认排序规则的影响(若先建库再导入)
要是你的操作流程是先新建了一个空数据库,再导入备份里的存储过程,那可能新建库时没指定排序规则,直接用了MySQL服务器的默认值。很多默认安装的MySQL服务器,排序规则就是latin1_swedish_ci,新建数据库会自动继承这个配置。
小提示:存储过程的创建语句一般不会直接改变数据库级的排序规则,这个属性是属于数据库本身的,和存储过程的关联很小。
如果想要修改成你需要的排序规则(比如utf8mb4_unicode_ci),可以试试这两种方式:
- 删除当前恢复的数据库,重新创建时显式指定排序规则:
CREATE DATABASE your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;,再导入备份文件。 - 用
ALTER DATABASE your_db COLLATE utf8mb4_unicode_ci;修改库级排序规则,但要注意后续可能需要调整表和列的排序规则,避免出现字符集不兼容的问题。
内容的提问来源于stack exchange,提问作者All_Safe
相关产品推荐
相关产品推荐

