MySQL ALTER TABLE实际上没有改变表

时间:2015-06-25 19:55:57

标签: mysql

我正在运行ALTER TABLE命令来更改表格的字符集和整理,但它看起来并不像它正常工作。该命令运行时没有错误,但表实际上从未实际更新:

mysql> SHOW CREATE TABLE users;
--------------------------------------------------------------+
| users | CREATE TABLE `users` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `id_deprecated` int(11) NOT NULL DEFAULT '0',
  `email` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `index_users_on_email` (`email`),
  KEY `id_deprecated` (`id_deprecated`),
) ENGINE=InnoDB AUTO_INCREMENT=824 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
+-------+
1 row in set (0.05 sec)


mysql> ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0


mysql> SHOW CREATE TABLE users;
--------------------------------------------------------------+
| users | CREATE TABLE `users` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `id_deprecated` int(11) NOT NULL DEFAULT '0',
  `email` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `index_users_on_email` (`email`),
  KEY `id_deprecated` (`id_deprecated`),
) ENGINE=InnoDB AUTO_INCREMENT=824 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
+-------+
1 row in set (0.05 sec)

知道为什么会这样吗?

3 个答案:

答案 0 :(得分:0)

ALTER TABLE <table> CONVERT TO ...转换存储在表中的值,但不转换表定义本身。

ALTER TABLE <table> CHANGE <column> ...更改了表格定义。

答案 1 :(得分:0)

最终工作的是:ALTER TABLE users CHARACTER SET utf8rmb4 COLLATE utf8mb4_unicode_ci。请注意,没有CONVERT或CHANGE。

答案 2 :(得分:0)

尝试

ALTER TABLE users 
  CHARACTER SET utf8,
  COLLATE utf8mb4_unicode_ci;

这应该更改表定义而不是表中已有的数据。