更正 mysql 语法以更改具有排序规则的列

Correct mysql syntax to change a column with collation

这行代码是由phpmyadmin自动生成的(可能是我公司网站上的旧版本运行,但我不想处理那个吧现在):

ALTER TABLE `lc_error_logs` CHANGE `OneDetailedMessage` `OneDetailedMessage` VARCHAR(5000) CHARSET=latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL;

尝试执行 SQL 时,通过 phpmyadmin 获取错误消息:

Query error: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MYSQL server version for the right syntax to user near '=latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL' at line 1.

我没看出查询有什么问题,想知道有什么问题。

备注:

  1. 我所做的只是更改 VARCHAR 长度。
  2. 如果我删除该列,然后使用这些相同的设置重新创建它,效果很好。 ALTER TABLE 语法有问题。
  3. 我可以在同一个 table 中更改 INT 列(例如 INT 到 SMALLINT),没有任何问题。关于整理?但这是我们在整个数据库中使用的整理。
  4. mysql 版本:“5.5.47-0ubuntu0.14.04.1”
  5. 我对 VARCHAR 长度使用什么值并不重要。我尝试更改什么并不重要(例如,更改列名有相同的错误。)而且我之前在其他 tables 上遇到过这个问题。我从未能够成功地更改此数据库中的 VARCHAR,如果我指定排序规则。 (即使这是此数据库的默认排序规则,在我未指定排序规则时自动生成。)

问题出在 CHARSET/COLLATE 部分。如果我删除它,查询将起作用(使用数据库的默认字符集和排序规则):

ALTER TABLE `lc_error_logs` CHANGE `OneDetailedMessage` `OneDetailedMessage` VARCHAR(5000) NULL DEFAULT NULL;

或等效的,稍微简单一点:

ALTER TABLE `lc_error_logs` MODIFY `OneDetailedMessage` VARCHAR(5000) NULL DEFAULT NULL;

注意:

我仍然不知道正确的语法是什么,或者这是否与数据库的设置方式有关。 因此,如果有人可以提供即使在排序规则规范下也有效的答案,我会接受该答案。否则,我会接受这个答案,然后继续。

ALTER TABLE `lc_error_logs` CHANGE `OneDetailedMessage` `OneDetailedMessage` VARCHAR(5000) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL;

尝试使用 CHARACTER SET 而不是 CHARSET=