動的に作成され、選択結果から列を定義してテーブルを作成する場合、列定義を使用してテーブルを作成するときのように照合順序を指定するにはどうすればよいですか?mysqlでselectからテーブルを作成するときの照合順序を指定する方法を教えてください。
すなわち
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
文を使用して値の設定、文字列解析、および機能の結果の様々な意味 - それはちょうど定義した別のテーブルからの1対1の列を選択していません他のテーブルの列を定義するのと同じくらい単純ではありません。
事前にALTER DATABASE my_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci
を使用してデータベースの照合順序を設定しようとしましたが、結果は変わりません。テーブルはまだ作成されている(および表の列)が選択(選択結果から動的に定義された列)
[TABLE' CREATE ']のドキュメント(https://dev.mysql.com/doc/refman/5.7/en/create -table.html)は、このようなことを行うためのいくつかの方法を概説していますが、後者のケースではあなたの期待と一致するものはありません。 – tadman
これは私がここで質問している理由です(?)私は上記の2番目のコードブロックを、私が働きたいことの提案として提供しましたが、正しくないことを認識しています。私は正しい解決策が何であるかを探しています。ドキュメントには、選択からテーブルを作成し、そのテーブルの照合オプションが存在するという事実がありますが、これらの2つを一緒に示す例は見つかりません。上の 'SELECT ....'は、 'case '式、他のテーブル、関数の結果のような様々なロジックを作成した結果の集まりです。 – Streamline