当从选择结果中创建一个包含动态创建和定义的列的表时,如何像在创建包含列定义的表时那样指定排序规则?
即
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/