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

问题描述 投票:1回答:1

在我的数据库中,一些表和列是使用显式定义的:

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)
mysql collation
1个回答
2
投票

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

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

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 |
+-------------------+---------+----+---------+----------+---------+

请注意,如果你只说CHARACTER SET latin1,你会得到COLLATION latin1_swedish_ci

因此,如上所述,您的问题是关于如何从latin1_general_ci更改为latin1_swedish_ci。如果这真的是你想要的,那么它需要重建表。列上的任何CHARACTER SETCOLLATION更改都需要重建。更改默认设置的侵入性较小。

最好为每列明确指定CHARACTER SETCOLLATION,从而避免必须知道“默认值”的细微问题。

底线(根据现有问题):

ALTER TABLE MyTable
    MODIFY `CommandName` varchar(255) COLLATE latin1_general_ci NOT NULL;
© www.soinside.com 2019 - 2024. All rights reserved.