问题描述
MySql 上的错误信息:
Error message on MySql:
我已经浏览了其他几篇文章,但未能解决此问题.受影响的部分与此类似:
I have gone through several other posts and was not able to solve this problem. The part affected is something similar to this:
我使用的存储过程是这样的:
The stored procedure I'm using is this:
我正在用 php 进行测试,但 SQLyog 出现了同样的错误.我还测试了重新创建整个数据库,但效果不佳.
I was testing with php, but the same error is given with SQLyog. I have also tested recreating the entire DB but to no good.
任何帮助将不胜感激.
推荐答案
存储过程参数的默认排序规则是 utf8_general_ci
并且您不能混合排序规则,因此您有四个选项:
The default collation for stored procedure parameters is utf8_general_ci
and you can't mix collations, so you have four options:
选项 1:将 COLLATE
添加到您的输入变量:
Option 1: add COLLATE
to your input variable:
选项 2:将 COLLATE
添加到 WHERE
子句:
Option 2: add COLLATE
to the WHERE
clause:
选项 3:将其添加到 IN
参数定义(MySQL 5.7 之前):
Option 3: add it to the IN
parameter definition (pre-MySQL 5.7):
选项 4:更改字段本身:
除非您需要按 Unicode 顺序对数据进行排序,否则我建议您更改所有表以使用 utf8_general_ci
排序规则,因为它不需要更改代码,并且会稍微加快排序速度.
Unless you need to sort data in Unicode order, I would suggest altering all your tables to use utf8_general_ci
collation, as it requires no code changes, and will speed sorts up slightly.
更新:utf8mb4/utf8mb4_unicode_ci 现在是首选的字符集/整理方法.不建议使用 utf8_general_ci,因为性能改进可以忽略不计.请参阅https://stackoverflow.com/a/766996/1432614
UPDATE: utf8mb4/utf8mb4_unicode_ci is now the preferred character set/collation method. utf8_general_ci is advised against, as the performance improvement is negligible. See https://stackoverflow.com/a/766996/1432614
这篇关于操作 '=' 的排序规则 (utf8_unicode_ci,IMPLICIT) 和 (utf8_general_ci,IMPLICIT) 的非法混合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!