mysql h 字符集_#MySQL问题--字符集问题

博客讨论了在执行SQL查询时遇到的字符集不匹配问题,导致的异常及影响。问题源于不同表之间的字符集不一致,具体为gbk_chinese_ci和utf8mb4_general_ci。解决方案是通过设置查询时的字符集转换,如使用`set names 'gbk';`和`...collate utf8mb4_general_ci;`。文中还提到了字符集转换对查询性能的影响,转换可能导致查询时间增加。

78b01d2b2d86590a285da58cc1268f89.png

问题描述:执行SQl语句

SQL:select * from searchdicts  where word = '㒰桂平';

异常:java.sql.SQLException: Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation '='

原因:字符集问题,两表编码方式不一致。

查看字符集:

mysql> show variables like 'char%';

+--------------------------+----------------------------------+

| Variable_name | Value |

+--------------------------+----------------------------------+

| character_set_client | gbk |

| character_set_connection | gbk |

| character_set_database | gbk |

| character_set_filesystem | binary |

| character_set_results | gbk |

| character_set_server | latin1 |

| character_set_system | utf8 |

| character_sets_dir | /Data/apps/mysql/share/charsets/ |

+--------------------------+----------------------------------+

8 rows in set (0.01 sec)

解决:查询SQL过程中进行字符转换

a6b0346518737d1efcb00acb95e88ff9.png

设置字符集;set names 'gbk';

select * from searchdicts where word = '㒰桂平' collate utf8mb4_general_ci;

模式:

select * from table_a a left join table_b b on CONVERT(a.field_a USING utf8) COLLATE utf8_unicode_ci = b.field_b

备注:utf8mb4_general_ci字符集是包含gbk_chinese_ci,属于范围更广的字符集。

select * from searchdicts where word = '仝桂平';

select * from searchdicts where word = '㒰桂平';

影响:查询时间会受损。

select * from searchdicts where word = '孟卫平';

耗时:0.006s

select * from searchdicts where word = '孟卫平' collate utf8mb4_general_ci;

耗时:0.886s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值