mysql 修改 character_set_database_Mysql5.7.22 坑爹的 `character_set_database`

Mysql5.7.22 坑爹的 character_set_database

Intro

今天用 EF Core Code First 生成数据库的时候,在初始化数据库的时候一直报错,后来debug的时候发现只要保存中文字符就会包异常,检查生成的数据库的编码竟然是 latin。MySqlException: Incorrect string value: '\xE8\x81\x94\xE7\xB3\xBB...' for column 'TypeName' at row 1

MySqlConnector.Core.ResultSet.ReadResultSetHeaderAsync(IOBehavior ioBehavior) in ResultSet.cs, line 42

MySqlException: Incorrect string value: '\xE8\x81\x94\xE7\xB3\xBB...' for column 'TypeName' at row 1

MySql.Data.MySqlClient.MySqlDataReader.ActivateResultSet(ResultSet resultSet) in MySqlDataReader.cs, line 80

DbUpdateException: An error occurred while updating the entries. See the inner exception for details.

Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection connection)

MySqlException: Incorrect string value: '\xE8\x81\x94\xE7\xB3\xBB...' for column 'TypeName' at row 1

MySqlConnector.Core.ResultSet.ReadResultSetHeaderAsync(IOBehavior ioBehavior) in ResultSet.cs

尝试更新MySql的默认编码,服务器上装的是 MySql 5.7,在网上找了许多方法都不奏效。

升级 8.0

尝试了各种办法 5.7.22 版本的mysql 无法更新 character_set_database,一直是 latin,从而导致每次新建数据的时候没有指定 charset 版本的时候都会以默认 lanti 编码,导致后面的数据保存到数据库的时候就会直接报错,。

经过查阅官网文档,可以看到 character_set_database 已经不再使用了,后面的版本就废弃了,到8.0就不需要这个了,如果没有指定charset,会使用 character-set-server=utf8mb4 的charset

最终决定升级 MySql 8.0,按照 StackOverflow 这篇文章 的介绍进行了升级。

升级之后重新设置 charset,character_set_database 终于正常了,终于不再是 latin 了,要注意的一个地方,mysql的utf8不是真正的utf8,是一个伪UTF8,utf8mb4才是真正的utf8,这里直接设置默认编码为 utf8mb4,设置完之后重启一下MySQL服务,sudo service mysql restart

再看 char set 信息

AAffA0nNPuCLAAAAAElFTkSuQmCC

charsets

升级完成之后再连接 mysql 服务器会报错,错误信息如下:

ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does not exist

解决方法:

在命令行中执行以下命令:mysql_upgrade -u root -p

输入密码后,更新迁移完成,终于一切搞定了。

此时再连接数据,保存中文就再没有什么问题了。

作者:天天向上卡索

链接:https://www.jianshu.com/p/65c526cd7572

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值