问题:mysql的uuid()默认排序规则与配置的连接排序规则不匹配。
我用字符集utf-8和排序规则utf8\u polish\u ci创建了一个数据库+表+字段。
my.cnf如下:
init_connect='SET NAMES utf8 COLLATE utf8_polish_ci'
character-set-server=utf8
collation-server=utf8_polish_ci
字符集:
mysql> show variables like "char%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
排序规则:
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+----------------+
| Variable_name | Value |
+----------------------+----------------+
| collation_connection | utf8_polish_ci |
| collation_database | utf8_polish_ci |
| collation_server | utf8_polish_ci |
+----------------------+----------------+
现在,当使用 uuid()
函数,返回以下错误:
mysql> select replace(uuid(),'-','');
ERROR 1270 (HY000): Illegal mix of collations (utf8_general_ci,COERCIBLE), (utf8_polish_ci,COERCIBLE), (utf8_polish_ci,COERCIBLE) for operation 'replace'
这种情况发生的原因是 uuid()
的默认排序规则似乎是utf8\u general\u ci。
mysql> select charset(uuid()), collation(uuid());
+-----------------+-------------------+
| charset(uuid()) | collation(uuid()) |
+-----------------+-------------------+
| utf8 | utf8_general_ci |
+-----------------+-------------------+
有没有办法更改uuid()使用的默认排序规则,使其与 collation_connection
?
在我们的环境中,我们编写sql更新,这些更新在具有不同排序规则的不同mysql数据库上执行。因此,通过指定来强制排序规则不是一个选项。
1条答案
按热度按时间dly7yett1#
(这并不是一个真正的答案,而是试图找出问题的根源和解决方法。)
上车
DATABASE
一个完全不相干的CHARACTER SET
以及COLLATION
.为客户建立utf8\U抛光:
现在让我们换衣服
SET NAMES
只是。现在成功了!??尽管UUID()
存在utf8
!?