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

Mysql 如何为数据库中创建的所有表设置默认排序规则?,mysql,collation,Mysql,Collation,我有一个数据库转储,来自一个损坏的数据库,需要导入到一个干净的安装中。但是,原始数据库似乎已设置为使用utf8\U unicode\U ci 将此转储导入clean数据库时,所有数据库都使用默认的utf8_general_ci创建,该ci为包括ß在内的单词提供重复条目,因为general使“ß”==“s”,而utf8_unicode_ci假定具有“ß”==“ss” 但是,在导入mysql时,在创建表时似乎总是选择默认的utf8\u general\u ci,即使我将数据库(模式)默认设置为utf

我有一个数据库转储,来自一个损坏的数据库,需要导入到一个干净的安装中。但是,原始数据库似乎已设置为使用utf8\U unicode\U ci

将此转储导入clean数据库时,所有数据库都使用默认的utf8_general_ci创建,该ci为包括
ß
在内的单词提供重复条目,因为general使
“ß”==“s”
,而utf8_unicode_ci假定具有
“ß”==“ss”

但是,在导入mysql时,在创建表时似乎总是选择默认的utf8\u general\u ci,即使我将数据库(模式)默认设置为utf8\u unicode\u ci

有没有办法强迫它使用utf8\uUnicode\uCI创建表,而不必在我的转储中插入ALTERTABLE语句?它的大小有几GB,手动修改会很痛苦

在系统范围内配置MySQL很好

我试着设置:

collation server=utf8\u unicode\u ci


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

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

还是这样试试

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]

如果在create语句中指定字符集,显然无法强制对新创建的表进行排序,这意味着如果您有:

CREATE TABLE foo
...
CHARSET=utf8;
它将隐式地将其设置为utf8\u general\u ci,这是该字符集的默认排序规则。这与数据库设置、系统设置和连接设置无关

我最后引用了这个:

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

然后就等着

今天早上我正在处理同一个问题,我能够按照以下方式设置表排序规则

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社区服务器5.5.32-cll-lve进行的测试。

但我不想更改create语句,所有create语句都在转储中,大小为几GB。请查看下面我提供的链接。这里有一个关于如何使用sed更新转储中的编码的说明。好的,它说明了如何删除转储中的任何字符集规范。我最终在转储中直接使用sed替换了CREATE语句,因为字符集规范隐式地设置了排序规则,而不考虑数据库或连接的排序规则。不,我是使用命令行导入的,
mysql DB\u name
。我一直在尝试使用
=
,但出现了错误。