如何为数据库中创建的所有表设置默认排序规则?

时间:2011-07-27 12:15:58

标签: mysql collation

我从一个损坏的数据库中获取了一个数据库转储,我需要将其导入到一个干净的安装中。但是,原始数据库似乎已设置为使用utf8_unicode_ci。

将此转储导入干净数据库时,将使用默认的utf8_general_ci创建所有数据库,这会为包含ß的单词提供重复条目,因为一般会生成'ß' == 's',而utf8_unicode_ci可能会{{1} }}

但是,当导入mysql时,似乎总是在创建表时选择默认的utf8_general_ci,即使我将数据库(schema)默认设置为utf8_unicode_ci。

有没有办法强制它使用utf8_unicode_ci创建表而不必在我的转储中注入alter table语句?它的大小为几GB,手动修改会很痛苦。

配置MySQL系统范围很好。

我尝试过设置:

'ß' == 'ss'

在my.cnf中,但似乎没有为表创建设置默认排序规则。

3 个答案:

答案 0 :(得分:9)

今天早上我正在处理同样的问题,我可以按照以下方式设置表格排序。

DROP TABLE IF EXISTS `agtAgentTypes`;
CREATE TABLE `agtAgentTypes` (
  `agentTypeID` int(11) NOT NULL,
  `agentType` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`agentTypeID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 DEFAULT COLLATE utf8_unicode_ci;

出于某种原因,似乎引擎和字符集需要=但是如果它有一个校对,则会进行校对。我尝试了,因为我注意到MySQL Charset Examples也没有使用=。

这是针对MySQL社区服务器5.5.32-cll-lve进行测试的。

答案 1 :(得分:4)

如果你在create语句中指定了charset,显然没有办法强制新创建的表进行整理,这意味着如果你有:

CREATE TABLE foo
...
CHARSET=utf8;

它会隐式将其设置为utf8_general_ci,这是该charset的默认排序规则。这与数据库设置,系统设置和连接设置无关。

我最后援引了这个:

 cat dump.sql|sed s/CHARSET=utf8/CHARSET=utf8\ COLLATE=utf8_unicode_ci/ > dump_replaced.sql

等待。

答案 2 :(得分:3)

如果您使用的是phpmyadmin,请阅读以下文章:

http://kb.mediatemple.net/questions/138/Default+MySQL+character+set+and+collation#gs

或尝试这种方式

CREATE TABLE tbl_name (column_list)
    [[DEFAULT] CHARACTER SET charset_name]
    [COLLATE collation_name]]

ALTER TABLE tbl_name
    [[DEFAULT] CHARACTER SET charset_name]
    [COLLATE collation_name]

Reference