MySQL不允许我更改排序规则类型。

3

我试图将表的排序规则从Unicode转换为General,但是MySQL不允许。没有返回错误,但是当我查看表时,我发现没有进行任何更改。

mysql> show variables like '%coll%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

mysql> show create table abc;
+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                                                                                                                      |
+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| abc_test | CREATE TABLE `abc` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `somecolumn` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC |
+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

mysql> alter table abc convert to charset utf8 collate utf8_general_ci;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table abc;
+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                                                                                                                      |
+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| abc_test | CREATE TABLE `abc` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `somecolumn` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC |
+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

建议在 http://bugs.mysql.com 提交错误报告。 - Rick James
2个回答

3

只需像这样使用alter:ALTER TABLE table_name COLLATE='utf8_general_ci';

你的表已经使用了UTF8字符集。所以,我认为你不需要再次设置它。我可以看到你试图使用alter查询将其转换为charset utf8。


我添加了原因。 - Md. Khalakuzzaman Khan
该语法中的 = 是可选的。该语法不允许没有 CHARACTER SETCOLLATE,这可能是另一个错误。 - Rick James
请注意,此答案更改了“DEFAULT”排序规则,并进行了“CONVERT TO”操作。这可能解释了为什么它的工作方式不同。 - Rick James

0

我尝试使用mysql 5.7.18,一切看起来都很好。那么你使用的是哪个版本?

我将排序规则变量设置为与您相同,并通过从上面复制的语句创建表并更改排序规则。最后我得到了:

mysql> show create table abc;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                       |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| abc   | CREATE TABLE `abc` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `somecolumn` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

mysql> select version();
+--------------+
| version()    |
+--------------+
| 5.7.18-debug |
+--------------+

"SHOW CREATE TABLE" 不打印排序信息,因为 utf8_general_ci 是 utf8 的默认排序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接