MySql从表和列中删除排序规则规范
在my DB中,一些表和列是使用排序规则明确定义的: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
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;