问题描述:在数据库保存拼音时数据库提示主键冲突,具体如下:要保存的信息为fèn,fēn;但保存了fēn之后数据库提示冲突;
原因分析:fèn,fēn在数据库中被认为是同一字符,导致主键冲突保存失败;
解决:大家在创建数据库或者表格的时候指定charset=utf8,数据库就能识别所有的字符,结果往往不是如此;mysql使用charset指定字符,如何存储却依靠另一个参数--collation--来指定排序规则。这个collation正是mysql是否区分大小写,是否区分声调字符的关键。每个charset有一个默认的collation。utf-8默认的为utf8-general-ci,ci表示case insensitive,即不区分大小写。如果需要区分,可以指定charset=utf8 collation=utf8_bin。
建表DEMO;
CREATE TABLE `t_wrod_voice` (
`word_id` int(10) NOT NULL COMMENT '字库ID',
`voice` varchar(64) NOT NULL COMMENT '发音',
`voice_file` varchar(64) DEFAULT NULL COMMENT '音频文件',
PRIMARY KEY (`word_id`,`voice`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='字库发音表';
改表DEMO;
ALTER TABLE T_WORD_VOICE CONVERT TO CHARACTER SET utf8 COLLATE=utf8_bin ;