MySQL:Unknown character set:utf8mb4怎么解决?

最近在整理MySQL 8 .0的文档时,注意到一个比较重要的变化:默认的字符集从latin1 变成了utf8 mb4 这让我想起了之前整理过的一篇关于字符集转换的文章,因为升级到MySQL 8 .0之后,很多系统可能都会面临字符集转换的需求。
所以,我觉得现在分享这个话题正合适。

那时候的需求背景是这样的:有些系统使用的字符集是utf8 ,但utf8 最多只能存储3 字节长度的字符,这导致一些4 字节的生僻字或者表情符号无法存储。
因此,我们决定将这些系统迁移到utf8 mb4 ,以支持更广泛的字符集。

下面是具体的迁移方案:
首先,我们需要准备一个新的数据库实例,并对一些参数进行修改。
在[mysqld]配置中,我们需要设置以下参数:

init_connect='SET NAMES utf8 mb4 ':这个参数会在每次连接建立时执行设置的语句,不过需要注意的是,这个设置对拥有super权限的用户无效。

character-set-server=utf8 mb4 :设置服务器的默认字符集为utf8 mb4
collation-server=utf8 mb4 _general_ci:设置服务器的校验规则,如果需要区分大小写,可以设置为utf8 mb4 _bin。

skip-character-set-client-handshake:这个参数的作用是忽略客户端连接时设置的字符编码,保持与全局设置一致。

此外,还需要对InnoDB相关的参数进行设置:

innodb_file_format=Barracuda
innodb_file_format_max=Barracuda
innodb_file_per_table=1
innodb_large_prefix=ON:这个参数允许索引的最大字节数为3 07 2 ,如果不开启,最大字节数为7 6 7 ,这对于类似varchar(2 5 5 )字段的索引会有问题,因为2 5 5 4 大于7 6 7
接下来,我们需要停止应用,并观察确认没有数据写入。
可以通过show master status来观察GTID或者binlog position,如果没有变化,就说明没有数据写入。

然后,我们需要导出数据。
首先导出表结构:
bash mysqldump -u [username] -p --no-data --default-character-set=utf8 mb4 --single-transaction --set-gtid-purged=OFF --database=[databasename] > /backup/[databasename].sql
然后导出数据:
bash mysqldump -u [username] -p --no-create-info --master-data=2 --flush-logs --routines --events --triggers --default-character-set=utf8 mb4 --single-transaction --set-gtid-purged=OFF --database=[databasename] > /backup/[databasename]data.sql
接下来,我们需要修改导出的表结构文件,将表和列定义中的utf8 改为utf8 mb4
然后,导入数据。
先导入表结构:
bash mysql -u [username] -p [databasename] < /backup/[databasename].sql
后导入数据:
bash mysql -u [username] -p [databasename] < /backup/[databasename]data.sql
接着,我们需要在新数据库中创建与旧环境相同的数据库用户。

最后,修改新数据库的端口,并启动应用进行测试。
关闭旧数据库,修改新数据库的端口后重启,然后启动应用。

以上就是从utf8 到utf8 mb4 的迁移方案,希望对大家有所帮助。

unknown command怎么解决

遇到UNKNOWNCOMMAND这个错误提示,其实就是软件没认出你输入的那个命令啦!很多软件都有这个可能,比如你给DOS系统下的命令搞错了,或者AutoCAD里的命令格式不对,MySQL里写的查询语句语法有问题,编译程序用错了宏定义。
解决方法简单,导入数据时加上–default-character-set=utf8 参数就OK啦!下面给你完整操作步骤:使用mysqldump导出数据:mysqldump -udbuser -pdatabase table > exp.sql;导入数据时加上参数:mysql -udbuser -p --default-character-set=utf8 database < exp>想要更多教程,就去系统圣地软件站看看吧!

mysql中通过source导入数据时导入一部分时突然会中断,提示连不上mysql

嘿,朋友们!我刚搞定了一个小难题,虽然它是个09 年的旧问题,但说不定能帮到你们呢,看看吧~

my sql出现error 1049,为什么?

最近在用命令行做数据库备份的时候,碰到点小麻烦。
我在cmd命令框里敲了这么一句命令:C:/mysql/bin>mysqldump -u root -p javashopes_tagses_settings > e:/tags.sql,结果备份失败了,还报了个错,说是“mysqldump: Got error: 1 04 9 : Unknown database ‘jpa’ when selecting the database”,意思是它找不到叫“jpa”的数据库。

但我明明在mysql里用show databases;命令看到了这个数据库啊,输出的结果里也清清楚楚地写着“+---------------+| Database |+---------------+| jpa |+---------------+”呢。
我又试了试use jpa;,结果也成功进入了这个数据库,显示“Database changed”。

这到底是怎么了?后来我琢磨了一下,发现原因其实很简单。
关键在于你是否真正进入了mysql环境。
如果你还没进入mysql环境,那你在cmd里敲的命令,比如mysqldump,它只是个工具,不算是在mysql里执行的sql语句,所以后面不需要加逗号(;)。
但是,一旦你进入了mysql环境,比如用mysql>提示符显示出来,那你输入的每一个命令,比如show databases;或者use jpa;,就都是真正的sql语句了,这时候就必须在最后加上逗号(;)。

所以,下次再用命令行备份数据库的时候,记得先进入mysql环境,然后再执行相关的sql语句,这样才能避免这种“找不到数据库”的奇怪错误啦。