创建具有从选择结果动态创建和定义的列的表时,如何指定排序规则,就像在创建带有列定义的表时一样?
例如:
例如:
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
(包括表中的列)。
CREATE TABLE
的文档概述了几种做这种事情的方法,但在第二种情况下,它们都不符合您的期望。 - tadmanSELECT....
是由各种逻辑(如case when
表达式、其他表和函数结果)创建的结果集合。 - Streamline