mysql - 将 character_set_client 指定为 MySQL 中表的默认字符集
问题描述
我有以下查询来创建表:
CREATE TABLE qrtz_simprop_triggers
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
STR_PROP_1 VARCHAR(512) NULL,
STR_PROP_2 VARCHAR(512) NULL,
STR_PROP_3 VARCHAR(512) NULL,
INT_PROP_1 INT NULL,
INT_PROP_2 INT NULL,
LONG_PROP_1 BIGINT NULL,
LONG_PROP_2 BIGINT NULL,
DEC_PROP_1 NUMERIC(13,4) NULL,
DEC_PROP_2 NUMERIC(13,4) NULL,
BOOL_PROP_1 BOOL NULL,
BOOL_PROP_2 BOOL NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) ENGINE=InnoDB
default charset=<value of character_set_client>;
也就是说,如果值为character_set_client
is UTF8
,那么默认字符集应该是utf8
,如果character_set_client
是latin1
,那么默认字符集应该是latin1
。
这对我来说非常重要,即使花了几个小时我也无法破解它。任何帮助将不胜感激。
解决方案
您必须使用动态 SQL 来执行此操作。您不能直接在 CREATE TABLE 语句中使用变量。
SET @sql = CONCAT('CREATE TABLE ... DEFAULT CHARSET=', @@character_set_client);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
但是,我想知道你为什么要这样做。我通常会允许表字符集默认为模式的字符集。使用客户端字符集似乎很奇怪。
推荐阅读
- ruby-on-rails - 在 Ruby on Rails 中生成现有表的 html 视图
- java - 在片段中使用 MediaScannerConnection.scanFile()?
- azure-functions - Azure Functions with Consumption plan - 创建任务并返回
- python - Python QT改变按钮的背景颜色,而不仅仅是边框
- javascript - 在 JavaScript 中,无论如何都可以忽略函数调用中的某些参数?
- ruby - 如何将 ruby 程序作为自己的命令运行?
- python - 在 Azure 数据工厂上运行 .Net 和 Python 应用程序?
- monads - Scala Cats:用于任务 [Validated[String,?] 的 Monad 实例的尾递归 tailRecM 方法
- python - Django Microsoft Office 365 登录
- python - 如何在找到值后立即跳过对索引的字符串搜索?Python