mysql - 更改 mySQL 中的字符集时出错?
问题描述
我正在尝试将 mySQL 数据库(版本 5.6.45)中的一个字段从 utf8 更改为 utf8mb4,以便能够发布表情符号。
这就是我正在做的事情:
ALTER TABLE contenidos CHANGE COLUMN titulo varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
但我也尝试过(结果相同),这个:
ALTER TABLE contenidos CHANGE COLUMN titulo CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE contenidos CHANGE COLUMN titulo varchar(500) CHARACTER SET utf8mb4;
我不断收到此错误:
1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用
在第 3 行的“CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci”附近
如果我从 phpmyadmin 更改排序规则,我可以做到,但它似乎不起作用,因为表情符号不是数据库中的保护程序。所以我想我也应该改变字符集。
解决方案
在此处查看 ALTER TABLE 的语法:https ://dev.mysql.com/doc/refman/5.6/en/alter-table.html
如果您使用 CHANGE COLUMN,则使用该列的当前名称,然后您必须重新命名该列,即使您没有更改名称。
ALTER TABLE contenidos CHANGE COLUMN titulo
titulo varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
原因是 CHANGE COLUMN 允许您更改列名。如果您想这样做,您可以命名要更改的列,然后是新名称。
ALTER TABLE contenidos CHANGE COLUMN <old_name> <new_name> <data-type> ...
CHANGE COLUMN 的语法要求您提供两个名称,即使它们相同。
替代方案:使用 MODIFY COLUMN,它不允许更改列名,但允许更改其他列属性,包括字符集。所以你只需要列出一次列名。
ALTER TABLE contenidos MODIFY COLUMN titulo
varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
顺便说一句,每个排序规则仅适用于一个字符集,因此您无需同时指定两者。通过指定排序规则,这将在必要时隐式更改字符集。
ALTER TABLE contenidos MODIFY COLUMN titulo
varchar(500) COLLATE utf8mb4_general_ci;
推荐阅读
- javascript - 当我单击更新按钮时,我希望在添加具有相同值的课程中打开课程
- perl - 如何从 Perl 中的 URL 中提取域?
- sql - 整个表的 SQL Server Datediff
- c++ - 从右值引用限定的成员函数按值或按右值引用返回?
- prometheus - 对 PromQL 的 DataDog 指标查询
- sql - 从 SQL 子查询中检索特定列数据
- google-apps-script - DriveActivity API 返回函数
- ios - 在 IFrame 中播放媒体 - Ionic IOS
- c - 我正在尝试使用变量在 C 中初始化一个数组,但它不起作用
- sabre - API 在 Sabre 中提供辅助数据/设施以及搜索结果