我有一个从损坏的数据库中取出的数据库转储,我需要将其导入到干净的安装中.但是,原始数据库似乎已设置为使用utf8_unicode_ci.
将此转储导入干净数据库时,将使用默认的utf8_general_ci创建所有数据库,这会为我提供重复的单词条目,包括ß,因为一般会生成'ß' == 's',而utf8_unicode_ci应该具有'ß' == 'ss'.
但是,当导入mysql时,似乎总是在创建表时选择默认的utf8_general_ci,即使我将数据库(schema)默认设置为utf8_unicode_ci.
有没有办法强制它使用utf8_unicode_ci创建表而不必在我的转储中注入alter table语句?它的大小是几GB,手动修改会很痛苦.
配置MySQL系统范围很好.
我尝试过设置:
collation-server=utf8_unicode_ci
在my.cnf中,但似乎没有设置表创建的默认排序规则.
今天早上我正在处理同样的问题,我能够按照以下方式设置表格排序.
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;
Run Code Online (Sandbox Code Playgroud)
出于某种原因,似乎引擎和字符集需要一个=但是如果它有一个校对,则会进行校对.我尝试了,因为我注意到MySQL Charset示例也没有使用=.
这是针对MySQL社区服务器5.5.32-cll-lve进行测试的.
显然,如果您在创建语句中指定字符集,则无法对新创建的表强制进行排序规则,这意味着如果您有:
CREATE TABLE foo
...
CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
它将隐式地将其设置为 utf8_general_ci,这是该字符集的默认排序规则。这与数据库设置、系统设置和连接设置无关。
我最终调用了这个:
cat dump.sql|sed s/CHARSET=utf8/CHARSET=utf8\ COLLATE=utf8_unicode_ci/ > dump_replaced.sql
Run Code Online (Sandbox Code Playgroud)
就等着。
| 归档时间: |
|
| 查看次数: |
16723 次 |
| 最近记录: |