【问题标题】:mysql won't let me change collation typemysql 不允许我更改排序规则类型
【发布时间】:2016-11-12 20:08:14
【问题描述】:

我正在尝试将我的表排序规则类型从 unicode 转换为通用,但 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)

【问题讨论】:

标签: mysql collation


【解决方案1】:

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

您的表已经有UTF8 charset。所以,在我看来,你不需要再次设置它。我可以看到您正在尝试使用您的 alter 查询再次将其转换为 charset utf8。

【讨论】:

  • 我添加了原因。
  • = 在语法中是可选的。语法不允许COLLATE 没有CHARACTER SET;这可能是另一个错误。
  • 请注意,此答案正在更改 DEFAULT 排序规则,执行 CONVERT TO。这可以解释为什么它的工作方式不同。
【解决方案2】:

我尝试了 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 的默认排序规则。

【讨论】:

    猜你喜欢
    • 2011-08-28
    • 2018-03-27
    • 2011-03-29
    • 2012-06-10
    • 2023-04-10
    • 2020-02-13
    • 2011-02-13
    • 2021-01-28
    • 2020-05-26
    相关资源
    最近更新 更多