MySql从表和列

时间:2017-11-21 14:33:57

标签: mysql collation

在我的数据库中,一些表和列是使用明确的归类定义的:

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)

1 个答案:

答案 0 :(得分:1)

每列的字符集和校对是重要的事情。当您添加新列或表时,表和数据库上的设置仅默认

要查看给定字符集的默认排序规则(例如latin1):

CHARACTER SET latin1

请注意,如果您只说COLLATION latin1_swedish_ci,则会获得latin1_general_ci

因此,如上所述,您的问题是关于如何从latin1_swedish_ci更改为CHARACTER SET。如果这真的是你想要的,那么它需要重建表。 上的任何COLLATIONCHARACTER SET更改都需要重建。更改默认确实不那么具有侵略性。

最好为每列明确指定COLLATIONALTER TABLE MyTable MODIFY `CommandName` varchar(255) COLLATE latin1_general_ci NOT NULL; ,从而避免必须知道"默认值"的微妙问题。

底线(根据现有问题):

{{1}}