更改 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 文件中存储 < 和 > 字符时出错

mysql中replace替换字符串更改方法

在 MySQL 和 MariaDB 中创建交叉兼容的垃圾字符串函数时出错

MYSQL 安装 BuildEngine 时出错

MySQL utf8mb4,保存表情符号时出错

如何更改 DataGrip 中的字符集?