在我的数据库中,一些表和列是使用明确的归类定义的:
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)
答案 0 :(得分:1)
每列的字符集和校对是重要的事情。当您添加新列或表时,表和数据库上的设置仅默认。
要查看给定字符集的默认排序规则(例如latin1):
CHARACTER SET latin1
请注意,如果您只说COLLATION latin1_swedish_ci
,则会获得latin1_general_ci
。
因此,如上所述,您的问题是关于如何从latin1_swedish_ci
更改为CHARACTER SET
。如果这真的是你想要的,那么它需要重建表。 列上的任何COLLATION
或CHARACTER SET
更改都需要重建。更改默认确实不那么具有侵略性。
最好为每列明确指定COLLATION
和ALTER TABLE MyTable
MODIFY `CommandName` varchar(255) COLLATE latin1_general_ci NOT NULL;
,从而避免必须知道"默认值"的微妙问题。
底线(根据现有问题):
{{1}}