【发布时间】:2026-01-19 17:05:01
【问题描述】:
我正在尝试修复字符编码问题 - 之前我们为此列设置了排序规则 utf8_general_ci 导致问题,因为它不区分重音..
我正在尝试查找数据库中可能受到影响的所有条目。
set names utf8;
select * from table1 t1 join table2 t2 on (t1.pid=t2.pid and t1.id != t2.id) collate utf8_general_ci;
但是,这会产生错误:
ERROR 1253 (42000): COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'latin1'
- 数据库现在定义为
DEFAULT CHARACTER SET utf8 - 表是用
CHARSET=utf8定义的 - “pid”列定义为:
CHARACTER SET utf8 COLLATE utf8_bin NOT NULL - 服务器版本为 Server version: 5.5.37-MariaDB-0ubuntu0.14.04.1 (Ubuntu)
问题:当 latin1 似乎没有出现在表/架构定义中的任何位置时,为什么我会收到关于 latin1 的错误?
MariaDB [(none)]> SHOW VARIABLES LIKE '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
MariaDB [(none)]> SHOW VARIABLES LIKE '%collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
【问题讨论】:
-
请发帖
SHOW CREATE TABLE table1和SHOW CREATE TABLE table2。您的客户端连接字符集是什么?也发帖SHOW VARIABLES LIKE '%char%' -
哦,你确实有
set names utf8所以希望character_set_client会显示utf8 -
请阅读MY POST,了解如何发布有用的好问题...有一些提示和格式化工具可以帮助您格式化查询、表格等等!
-
@MichaelBerkowski - 我修复了问题中的查询 - 它应该是针对自身的自联接,而不是 table1 和 table2。
-
这可能在这方面很有帮助:scottlinux.com/2017/03/04/…
标签: mysql