无法更改数据库的字符集

Cant change charset of database

提问人:Tut budet Ima 提问时间:7/24/2023 更新时间:7/24/2023 访问量:29

问:

现在我的数据库有字符集utf8mb3。我想把它改成utf8mb4。对于这个任务,我创建了一个脚本,用于创建 SQL 脚本,并执行此操作。此脚本可以生成如下行:

ALTER DATABASE `database_name` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
ALTER TABLE `database_name`.`table1` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `database_name`.`table2` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
...
ALTER TABLE `database_name`.`table1` CHANGE `column1` `column1` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `database_name`.`table1` CHANGE `column2` `column2` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL;
ALTER TABLE `database_name`.`table1` CHANGE `column3` `column3` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
...

我意识到,我在外键和唯一键方面有问题(我认为),并将这些行添加到我生成的脚本中:

SET SESSION FOREIGN_KEY_CHECKS = 0;
SET SESSION UNIQUE_CHECKS = 0;
...
SET SESSION FOREIGN_KEY_CHECKS = 1;
SET SESSION UNIQUE_CHECKS = 1;

外键的问题消失了,但我仍然有这样的唯一键错误:

ERROR 1062 (23000) at line 14: Duplicate entry 'some_id' for key 'table1.column1'

我可以设置一些变量来忽略此类错误吗?我能用它们做什么?

MySQL 的UTF-8 innodb utf8mb4

评论

0赞 Rick James 7/25/2023
让我们看看引起麻烦的具体原因。让我们看看.some_idSHOW CREATE TABLE
0赞 Tut budet Ima 7/25/2023
@RickJames如果重要,ID 看起来像“d1341b05-4aoc-4307-8195-38fee15c8e4f-hash”,它的类似 ID 是“d1341b05-4aoc-4307-8195-38fee15c8e4f-Hash”。这是一个独特的密钥。但是,我认为,同样的问题也会在其他桌子上表现出来。我想为它找到最终的解决方案
0赞 Tut budet Ima 7/25/2023
@RickJames我也不明白)MySQL说“你的SQL语法有错误;”SHOW CREATE TABLE
0赞 JosefZ 7/25/2023
这回答了你的问题吗?SQL 唯一 varchar 区分大小写问题
0赞 Rick James 7/26/2023
SHOW CREATE TABLE table1;

答: 暂无答案