2017-11-21 22 views
0

から照合スペックを削除します。MySQLは、いくつかのテーブルと列が明示的に照合順序で定義されていた私の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) 
+0

可能な複製[?データベースの既定の照合順序を変更する方法](https://stackoverflow.com/questions/5906585/どのようにデフォルトの照合順序を変更するか) –

+0

@SebastianBrosch、いいえ、この投稿の重複はありません。私はALTERで試してみたが、私が望む結果は得られない – Riga

答えて

0

ときに各列の文字セットと照合が重要なものである:スクリプトテーブルには、代わりにこれを持ってしたいときテーブルとデータベースの設定はで、新しい列またはテーブルをrepsectively追加する場合のデフォルト値はです。

(例えばlatin1のような)与えられた文字セットのデフォルトの照合を参照するには、次の

mysql> SHOW COLLATION LIKE '%latin1%'; 
ERROR 2006 (HY000): MySQL server has gone away 
No connection. Trying to reconnect... 
Connection id: 1503849 
Current database: pantheon 

+-------------------+---------+----+---------+----------+---------+ 
| 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 SETまたはCOLLATION列の変更は、再構築が必要です。 をデフォルトのに変更することは、侵襲性が低くなります。

CHARACTER SETCOLLATIONを各列に明示的に指定すると、「デフォルト」という微妙な問題を知る必要がなくなります。 (質問に基づいて、そのままで)

ボトムライン:

ALTER TABLE MyTable 
    MODIFY `CommandName` varchar(255) COLLATE latin1_general_ci NOT NULL; 
+0

次のような文がある: 'ALTER TABLE \' MyTable \ '文字セットに変換するlatin1;' 'CommandName'カラムを' latin1_general_ci'から 'latin1_swedish_ci'に変更できますか?再建せずに? – wchiquito

+0

カラムの照合を変更すると、_by any means_は、必ずそのカラムを含むインデックスを再構築する必要があります。列がインデックスで使用されていないときに再構築が必要かどうかわかりません。 –

関連する問題