我正在运行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)
知道为什么会这样吗?
答案 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;
这应该更改表定义而不是表中已有的数据。