mysql - 在 mysql 中从 select 创建表时如何指定排序规则?

标签 mysql collation

当从选择结果中创建一个包含动态创建和定义的列的表时,如何像在创建包含列定义的表时那样指定排序规则?

CREATE TABLE IF NOT EXISTS my_table (
  SELECT * FROM (
    SELECT ....
  ) )

上面的代码创建了带有动态列的表,但它没有使用我想要的排序规则。它使用的是 utf8_general_ci,我希望它是 utf8_unicode_ci。

下面这个不行

CREATE TABLE IF NOT EXISTS my_table (
  SELECT * FROM (
    SELECT ....
  ) ) DEFAULT CHARSET=utf8 DEFAULT COLLATE utf8_unicode_ci;

它给出错误消息,指示命令在此位置无效。

我意识到上面的建议是无效的,那么实现这个的方法是什么?我试过设置数据库排序规则,认为这是为所有创建的表设置数据库的默认值,但它的行为似乎不像那样 - 或者 当我 ALTER 数据库排序规则时,也许我实际上并没有为数据库设置默认值。有没有办法为表设置默认值,以便上面的第一个代码块使用所需的排序规则创建表?

上述代码块中的SELECT...结果是指使用case/when语句、字符串解析和函数结果的各种条件/逻辑值设置- 它不仅仅是从另一个表中一对一地选择列,因此它不像定义另一个表的列那么简单。

我已经尝试使用 ALTER DATABASE my_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci 提前设置数据库排序规则,但这不会改变结果。从选择创建表(从选择结果动态定义的列)时,仍然使用 utf8_general_ci 创建表(以及表中的列)

最佳答案

以下内容在 MariaDB 版本 10 上对我有用:

CREATE TABLE my_table ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
SELECT *
FROM other_table
;

关于mysql - 在 mysql 中从 select 创建表时如何指定排序规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46187534/

相关文章:

MySQL根据同一表中的一列中的条件合并属于同一ID的表中的行

MySQL 不会按瑞典字符排序 åäö 即使排序正确也无法正常工作

c# - 带有 Saxon API 的 XQuery/XPath - 需要不区分大小写的路径

java - 用于选择表名的 SQL 查询

java - 结合字母顺序和自然顺序(又名。用户理智排序)

delphi - 是否有适用于 Delphi 的 Unicode 归类算法 (UCA) 代码?

mysql - 为什么我不能在 MySQL 中使用特定的排序规则?

mysql - Sequel Pro 连接 mysql 服务器

mysql - 我怎样才能从nodejs连接到mysql?

php - 比较 mysql/symfony2 中的日期