【问题标题】:Mysql: Set collation for view not workingMysql:为视图设置排序规则不起作用
【发布时间】:2021-04-17 08:22:34
【问题描述】:

我想将视图的排序规则设置为默认数据库。但该选项不可用。 即使我尝试设置除此之外的任何其他内容,也不会在列中反映相同的内容,因为它们单独具有不同的排序规则。

代码:

create or replace view my_view as
select * from table_a a
inner join table_b b
on a.id = b.fk_id
collate utf8mb4_unicode_ci

但是如果我查询

SHOW FULL COLUMNS FROM my_view

结果集包含排序规则为 utf8mb4_general_ci

谁能解释为什么会这样?我该如何纠正?

更多信息

SHOW VARIABLES LIKE "char%";
variable_name value
character_set_client utf8
character_set_connection utf8
character_set_database utf8mb4
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/local/mysql/share/charsets/

【问题讨论】:

  • 为您所在的DATABASE 建立了哪些字符集和排序规则?还有什么联系?
  • @RickJames 目前当我尝试将排序规则设置为 latin1_swedish_ci 时,它会抛出错误,因为 "COLLATION latin1_swedish_ci is not valid for CHARACTER SET utf8mb4" 。上面提到的任何变量中都不存在utf8mb4,不知道它是怎么来的以及如何解决这个问题

标签: mysql database collation character-set


【解决方案1】:

您的collate utf8mb4_unicode_ci 仅影响加入条件。

如果您需要更改结果集排序规则,则必须使用单独的列列表而不是星号,并单独更改排序规则(CONVERT 函数)或为每个字符串类型列指定。

DEMO

【讨论】:

  • 当我尝试与 latin1_swedish_ci 进行校对时,它会抛出错误:“COLLATION latin1_swedish_ci 对 CHARACTER SET utf8mb4 无效”。 utf8mb4 不存在于上述任何变量中,不确定它是如何产生的以及如何解决这个问题。试过把character_set_client、character_set_results、character_set_connection设置成latin1,还是不行!
  • @Jake 您需要更改字符集,而不仅仅是排序规则 - 使用显式 CONVERT() 而不是排序规则指定。
  • 能否请您在您发布的演示链接上尝试一下,以便用户更清楚。
猜你喜欢
  • 1970-01-01
  • 2011-12-26
  • 2018-03-06
  • 2012-06-10
  • 2022-01-16
  • 1970-01-01
  • 2012-12-13
  • 2011-11-14
  • 1970-01-01
相关资源
最近更新 更多