mysql - 将 character_set_client 指定为 MySQL 中表的默认字符集

标签 mysql database rdbms

我有以下查询来创建表:

  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的值为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;

不过,我想知道你为什么要这样做。我通常会允许表字符集默认为模式的字符集。使用客户端字符集似乎很奇怪。

关于mysql - 将 character_set_client 指定为 MySQL 中表的默认字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54259375/

相关文章:

php - 如何使用 mysql 从多个类别中选择行并显示每个类别的数据列表?

database - 如何更改 postgresql 9.4 中的日志目录位置?

mysql - WHERE 比较器的 SQL 多重查询

database - <your favorite database> 最大的缺点是什么?

mysql - 将 XML 读入 SQL 表

mysql - 如何在表中找不到数据时将计数设为 0?

php - PDO - 将大数组插入 MySQL 数据库

php - 单击 laravel/mysql 中的删除按钮后无法删除该行

iphone - 如何创建多个sqlite数据库实例?

php - 将工作负载从 PHP 转移到 MySQL