mysql 不区分声调 'e' 'é'

本文解释了MySQL中字符集与排序规则(collation)的区别,特别是在处理多国语言字符时如何确保正确排序与区分特殊字符。通过具体示例介绍了如何设置charset=utf8及collation=utf8_bin以实现对特殊字符的支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遇到这个问题的通常情况是数据字符涉及到多国语言。大家往往认为在创建数据库或表格时指定charset=utf8,数据库就能识别所有字符,结果实际情况却并非这样。

mysql使用charset指定字符如果存储,却依靠另外一个参数--collation--来指定排序规则。这个collation正是mysql是否区分大小学,是否区分声调字符的关键。每个charset有一个默认collation。utf8的默认collation是utf8_general_ci,ci表示case insensitive,即不区分大小写。通过测试,该collation也不区分'e' 和'é','ü'和'u'。 而实际上绝大多collation都不区分,或者部分区分这些带声调或特殊地区的特殊字符。如果一个数据集必须保证区分这类字符,可以指定charset=utf8 collation=utf8_bin。

建表示例

mysql > CREATE TABLE `utf8_test` (
         --> `value` varchar(30) NOT NULL DEFAULT '',
         --> PRIMARY KEY (`value`)
         --> ) ENGINE=InnoDB DEFAULT CHARSET=utf8  COLLATE=utf8_bin;

改表示例

mysql > show create table 'utf8_test'\G

*************************** 1. row ***************************
       Table: utf8_test
Create Table: CREATE TABLE `utf8_test` (
  `value` varchar(30) NOT NULL DEFAULT '',
  PRIMARY KEY (`value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql > ALTER TABLE 'utf8_test' CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;

mysql > show create table 'utf8_test'\G

mysql > show create table utf8_test\G                                                                                                         

 *************************** 1. row ***************************
       Table: utf8_test
Create Table: CREATE TABLE `utf8_test` (
  `value` varchar(30) COLLATE utf8_bin NOT NULL DEFAULT '',
  PRIMARY KEY (`value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
1 row in set (0.00 sec)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值