MySql从表和列中删除排序规则规范

MySql从表和列中删除排序规则规范,mysql,collation,Mysql,Collation,在my DB中,一些表和列是使用排序规则明确定义的: CREATE TABLE `MyTable` ( `MyTableId` int(11) NOT NULL AUTO_INCREMENT, `CommandName` varchar(255) COLLATE latin1_general_ci NOT NULL, PRIMARY KEY (`MyTableId`), ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=latin1

在my DB中,一些表和列是使用排序规则明确定义的:

CREATE TABLE `MyTable` (
  `MyTableId` int(11) NOT NULL AUTO_INCREMENT,
  `CommandName` varchar(255) COLLATE latin1_general_ci NOT NULL,
  PRIMARY KEY (`MyTableId`),
  ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
现在在数据库级别定义了默认字符集和排序规则

ALTER DATABASE `MyDatabase` CHARACTER SET latin1 COLLATE latin1_general_ci;
是否可以删除排序规则(而不必重新创建表),这样就可以清楚地看到数据库中使用的是默认设置。如果要为表编写脚本,请改为:

CREATE TABLE `MyTable` (
  `MyTableId` int(11) NOT NULL AUTO_INCREMENT,
  `CommandName` varchar(255) NOT NULL,
  PRIMARY KEY (`MyTableId`),
  ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=latin1;
尝试不指定排序规则值,但脚本数据库相同时

ALTER TABLE MyTable MODIFY CommandName varchar(255)

每个列的字符集和排序规则是重要的内容。表和数据库上的设置仅是重复添加新列或表时的默认设置

要查看给定字符集(如latin1)的默认排序规则,请执行以下操作:

请注意,如果只说
字符集拉丁语1
,则会得到
排序规则拉丁语1\u瑞典语ci

因此,如前所述,您的问题是如何从
latin1\u general\u ci
更改为
latin1\u swedish\u ci
。如果这确实是您想要的,则需要重建表。列上的任何
字符集
排序规则
更改都需要重新生成。更改默认设置的影响较小

最好为每列显式指定
字符集
排序规则
,从而避免了解“默认值”的细微问题

底线(基于目前的问题):


可能是@SebastianBrosch的副本,不,这不是这篇文章的副本。正如我所说,我尝试了ALTER,但没有产生结果,我想要这样的句子:
ALTERTABLE`MyTable`转换为字符集latin1
您是否可以将
CommandName
列从
latin1\u general\u ci
更改为
latin1\u swedish\u ci
,而无需重新生成?。更改列的排序规则必然需要重新生成包含该列的任何索引。我不知道在任何索引中都不使用该列时是否需要重新生成。
最好明确指定每列的字符集和排序规则,从而避免了解“默认值”的细微问题。
-您能否提供一些有关这些“细微问题”的详细信息或链接?我真的很感兴趣。@nevverind-也许没什么微妙的。。。它将获取未指定字符集/排序规则的默认值。但我非常确定,该列的设置随后被冻结(在添加列的情况下)。
mysql> SHOW COLLATION LIKE '%latin1%';

+-------------------+---------+----+---------+----------+---------+
| Collation         | Charset | Id | Default | Compiled | Sortlen |
+-------------------+---------+----+---------+----------+---------+
| latin1_german1_ci | latin1  |  5 |         | Yes      |       1 |
| latin1_swedish_ci | latin1  |  8 | Yes     | Yes      |       1 |
| latin1_danish_ci  | latin1  | 15 |         | Yes      |       1 |
| latin1_german2_ci | latin1  | 31 |         | Yes      |       2 |
| latin1_bin        | latin1  | 47 |         | Yes      |       1 |
| latin1_general_ci | latin1  | 48 |         | Yes      |       1 |
| latin1_general_cs | latin1  | 49 |         | Yes      |       1 |
| latin1_spanish_ci | latin1  | 94 |         | Yes      |       1 |
+-------------------+---------+----+---------+----------+---------+
ALTER TABLE MyTable
    MODIFY `CommandName` varchar(255) COLLATE latin1_general_ci NOT NULL;