更改 mySQL 中的字符集时出错?
Posted
技术标签:
【中文标题】更改 mySQL 中的字符集时出错?【英文标题】:Error when changing character set in mySQL? 【发布时间】:2020-04-19 23:39:43 【问题描述】:我正在尝试将 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 更改排序规则,我可以做到,但它似乎不起作用,因为表情符号不是数据库中的保护程序。所以我想我也应该改变字符集。
【问题讨论】:
【参考方案1】:在此处查看 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;
【讨论】:
以上是关于更改 mySQL 中的字符集时出错?的主要内容,如果未能解决你的问题,请参考以下文章
在 C# 中的 app.config 文件中存储 < 和 > 字符时出错